3 services are updated

This commit is contained in:
2025-05-13 18:29:02 +03:00
parent cd62d96158
commit 6dfa17c5e6
54 changed files with 1374 additions and 148 deletions

View File

@@ -0,0 +1,4 @@
from .pagination import PaginateOnly, ListOptions, PaginationConfig
from .result import Pagination, PaginationResult
from .base import PostgresResponseSingle, PostgresResponse, ResultQueryJoin, ResultQueryJoinSingle
from .api import EndpointResponse, CreateEndpointResponse

View File

@@ -1,7 +1,8 @@
from .result import PaginationResult
from .base import PostgresResponseSingle
from pydantic import BaseModel
from typing import Any
from typing import Any, Type
class EndpointResponse(BaseModel):
"""Endpoint response model."""
@@ -33,7 +34,10 @@ class EndpointResponse(BaseModel):
"data": result_data,
"pagination": pagination_dict,
}
model_config = {
"arbitrary_types_allowed": True
}
class CreateEndpointResponse(BaseModel):
"""Create endpoint response model."""
@@ -51,3 +55,6 @@ class CreateEndpointResponse(BaseModel):
"data": self.data.data,
}
model_config = {
"arbitrary_types_allowed": True
}

View File

@@ -1,8 +1,11 @@
from typing import Optional, Union, Type, Any, Dict, TypeVar
from pydantic import BaseModel
from sqlalchemy.orm import Query
from .pagination import default_paginate_config
from .base import PostgresResponse
from typing import Optional, Union
from sqlalchemy.orm import Query
from pydantic import BaseModel
T = TypeVar("T")
class Pagination:
"""
@@ -168,16 +171,7 @@ class PaginationResult:
@property
def data(self) -> Union[list | dict]:
"""Get query object."""
query_ordered = self.dynamic_order_by()
query_paginated = query_ordered.limit(self.limit).offset(self.offset)
queried_data = (
query_paginated.all() if self.response_type else query_paginated.first()
)
data = (
[result.get_dict() for result in queried_data]
if self.response_type
else queried_data.get_dict()
)
if self.response_model:
return [self.response_model(**item).model_dump() for item in data]
return data
query_paginated = self.dynamic_order_by().limit(self.limit).offset(self.offset)
queried_data = (query_paginated.all() if self.response_type else query_paginated.first())
data = ([result.get_dict() for result in queried_data] if self.response_type else queried_data.get_dict())
return [self.response_model(**item).model_dump() for item in data] if self.response_model else data