from datetime import date from typing import List, Optional from pydantic import BaseModel, Field, ConfigDict from pydantic.types import UUID4 class PersonBase(BaseModel): first_name: str last_name: str patronymic: Optional[str] gender: Optional[str] birth_date: Optional[date] class Config: validate_assignment=True revalidate_instances='always' orm_mode = True # extra='ignore' class AddressCreate(BaseModel): category: str region: Optional[str] city: Optional[str] street: Optional[str] house: Optional[str] flat: Optional[str] class ContactCreate(BaseModel): category: str value: str class DocumentCreate(BaseModel): category: str series: str number: str issued_by: str issued_at: Optional[date] attachments: Optional[List[str]] class PersonCreate(PersonBase): addresses: Optional[List[AddressCreate]] = [] contacts: Optional[List[ContactCreate]] = [] documents: Optional[List[DocumentCreate]] = [] photos: Optional[List[str]] = [] class Contact(BaseModel): category: str value: str class Config: orm_mode = True class Address(BaseModel): category: str region: str city: str street: str house: str flat: str class Config: orm_mode = True class Document(BaseModel): category: str series: str number: str issued_by: str issued_at: str attachments: List[str] class Config: orm_mode = True class Person(BaseModel): id: UUID4 first_name: str last_name: str patronymic: Optional[str] birth_date: Optional[date] contacts: Optional[List[Contact]] = [] addresses: Optional[List[Address]] = [] documents: Optional[List[Document]] = [] class Config: orm_mode = True class PersonDetail(Person): id: UUID4 first_name: str last_name: str