Zemliakov
Земляков Алексей Алексеевич
В лабораторной работе №4 была составлена документация для следующих классов:
class UserSpec(BaseModel):
user_id: int
username: str = Field(min_length=1, pattern=russian_regular)
surname: str = Field(min_length=1, pattern=russian_regular)
second_name: Optional[str] = Field(pattern=russian_regular, default='')
email: str = (
Field(pattern=r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'))
status: Literal['active', 'non-active']
model_config = ConfigDict(extra='forbid')
class ProfileSpec(UserSpec):
bio: str = Field(min_length=1, pattern=russian_regular)
url: str = Field(pattern=r'://')
class ItemSpec(BaseModel):
item_id: int
name: str = Field(min_length=1, pattern=russian_regular)
desc: str = Field(min_length=1, pattern=russian_regular)
price: float = Field(gt=0)
model_config = ConfigDict(extra='forbid')
class ServiceSpec(BaseModel):
service_id: int
name: str = Field(min_length=1, pattern=russian_regular)
desc: str = Field(min_length=1, pattern=russian_regular)
price: float = Field(gt=0)
model_config = ConfigDict(extra='forbid')
class OrderLineSpec(BaseModel):
order_id: int
order_line_id: int
item_line: ItemSpec
quantity: float = Field(gt=0)
line_price: Optional[float] = Field(gt=0, default=None)
model_config = ConfigDict(extra='forbid')
@model_validator(mode="after")
def calculate_line_prices(self) -> Self:
self.line_price = self.quantity * self.item_line.price
return self
class OrderSpec(BaseModel):
order_id: int
user_info: ProfileSpec
order_lines: List[OrderLineSpec]
model_config = ConfigDict(extra='forbid')
class OrdersSpec(BaseModel):
market_place_orders: List[OrderSpec]
model_config = ConfigDict(extra='forbid')
Документация составлена при помощи пакета sphinx и экспортирована в html для удобства чтения. Итоговую html страницу можно найти в docs_srs/build/html/index.html