from datetime import datetime, timedelta from typing import Optional, Union from pydantic import BaseModel # Security class Token(BaseModel): access_token: str token_type: str class TokenData(BaseModel): username: Union[str, None] = None class User(BaseModel): username: str role: Union[str, None] = None disabled: Union[bool, None] = None class UserInDB(User): hashed_password: str # End Security class HeaderBase(BaseModel): database: str spreadsheet: str class HeaderCreate(HeaderBase): pass class Header(HeaderBase): """Заголовок описания набора геологических данных по результатам экспедиционных исследований""" class Config: orm_mode = True class ItemBase(BaseModel): """Описание набора геологических данных по результатам экспедиционных исследований """ fadr: Optional[str] = None internal_id: Optional[str] = None x_coord: Optional[str] = None y_coord: Optional[str] = None gis_category: Optional[str] = None category: Optional[str] = None basin: Optional[str] = None deposit: Optional[str] = None well: Optional[str] = None depth: Optional[str] = None stratum: Optional[str] = None owner: Optional[str] = None org: Optional[str] = None ownercontacts: Optional[str] = None samplelist: Optional[str] = None description: Optional[str] = None form_dimentions: Optional[str] = None datalist: Optional[str] = None resolution: Optional[str] = None date: Optional[Union[datetime, str]] = None additional_info: Optional[str] = None scanner: Optional[str] = None comment: Optional[str] = None class ItemCreate(ItemBase): pass class Item(ItemBase): id: int depth_min: Optional[float] = None depth_max: Optional[float] = None class Config: orm_mode = True class InsertStatus(BaseModel): """basic insertation status metrics""" status: str accepted: int processed: int process_time: timedelta class DetailedSearchQuery(BaseModel): """detailed search query format""" main_query: Optional[str] = None fadr: Optional[str] = None internal_id: Optional[str] = None x_coord: Optional[str] = None y_coord: Optional[str] = None gis_category: Optional[str] = None category: Optional[str] = None basin: Optional[str] = None deposit: Optional[str] = None well: Optional[str] = None depth: Optional[str] = None stratum: Optional[str] = None owner: Optional[str] = None org: Optional[str] = None ownercontacts: Optional[str] = None samplelist: Optional[str] = None description: Optional[str] = None form_dimentions: Optional[str] = None datalist: Optional[str] = None resolution: Optional[str] = None date: Optional[str] = None additional_info: Optional[str] = None scanner: Optional[str] = None comment: Optional[str] = None