feat: вфыв

This commit is contained in:
2024-07-20 09:32:22 +03:00
parent e7235021f9
commit 6b09251141
27 changed files with 536 additions and 119 deletions

View File

@@ -1,3 +1,5 @@
from typing import Self
from pydantic import BaseModel
from pydantic.alias_generators import to_camel
@@ -7,44 +9,52 @@ class CustomConfig:
from_attributes = True
class CustomModelCamel(BaseModel):
class BaseSchema(BaseModel):
class Config:
from_attributes = True
alias_generator = to_camel
populate_by_name = True
@classmethod
def from_sql_model(cls, model, fields: dict):
model_dict = {c.name: getattr(model, c.name) for c in model.__table__.columns}
model_dict.update(fields)
return cls(**model_dict)
def model_dump_parent(self):
parent_class: BaseModel = self.__class__.__bases__[0]
parent_fields = set(parent_class.model_fields.keys())
return self.model_dump(include=parent_fields)
@classmethod
def from_orm_list(cls, sql_models) -> list[Self]:
return [cls.model_validate(model) for model in sql_models]
class CustomModelSnake(BaseModel):
class Config:
from_attributes = True
class OkMessageSchema(CustomModelCamel):
class OkMessageSchema(BaseSchema):
ok: bool
message: str
class PaginationSchema(CustomModelCamel):
class PaginationSchema(BaseSchema):
page: int | None = None
items_per_page: int | None = None
class PaginationInfoSchema(CustomModelCamel):
class PaginationInfoSchema(BaseSchema):
total_pages: int
total_items: int
class BaseEnumSchema(CustomModelCamel):
class BaseEnumSchema(BaseSchema):
id: int
name: str
class BaseEnumListSchema(CustomModelCamel):
class BaseEnumListSchema(BaseSchema):
items: list[BaseEnumSchema]