3 services are updated
This commit is contained in:
4
api_services/api_validations/response/__init__.py
Normal file
4
api_services/api_validations/response/__init__.py
Normal 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
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user