from pydantic import BaseModel from typing import List, Optional class ContactPerson(BaseModel): id: Optional[int] = None firstname: str lastname: str phone_number: str email: str class Address(BaseModel): id: Optional[int] = None street: str city: str zipcode: str country: str class Proposal(BaseModel): id: Optional[int] = None number: str class Dewar(BaseModel): id: Optional[str] = None dewar_name: str tracking_number: Optional[str] = None number_of_pucks: int number_of_samples: int return_address: List[Address] contact_person: List[ContactPerson] status: str ready_date: Optional[str] = None shipping_date: Optional[str] = None arrival_date: Optional[str] = None returning_date: Optional[str] = None qrcode: str class Shipment(BaseModel): shipment_id: Optional[str] = None shipment_name: str shipment_date: str shipment_status: str contact_person: List[ContactPerson] proposal_number: List[Proposal] return_address: List[Address] comments: Optional[str] = None dewars: List[Dewar] def get_number_of_dewars(self) -> int: return len(self.dewars) def get_shipment_contact_persons(self) -> List[ContactPerson]: return self.contact_person def get_shipment_return_addresses(self) -> List[Address]: return self.return_address def get_proposals(self) -> List[Proposal]: return self.proposal_number class Config: from_attributes = True