error raise now locates loc
This commit is contained in:
@@ -6,8 +6,8 @@ from pydantic import BaseModel
|
||||
from api_validations.validations_request import PydanticBaseModel, BaseModelRegular
|
||||
from databases.sql_models.response_model import AlchemyResponse
|
||||
from sqlalchemy.orm import Query
|
||||
from api_objects.errors.errorHandlers import HTTPExceptionEvyos
|
||||
|
||||
MODEL_TYPE = Callable[[Any], Any]
|
||||
|
||||
class Pagination:
|
||||
size: int = 10
|
||||
@@ -18,12 +18,24 @@ class Pagination:
|
||||
totalCount: int = 1
|
||||
totalPage: int = 1
|
||||
|
||||
def change(self, page=None, size=None, order_field=None, order_type=None):
|
||||
def change(
|
||||
self,
|
||||
page: int = 1,
|
||||
size: int = 10,
|
||||
order_field: str = "id",
|
||||
order_type: str = "asc",
|
||||
):
|
||||
self.size = size if 10 < size < 40 else 10
|
||||
self.page = page or self.page
|
||||
self.size = size or self.size
|
||||
self.orderField = order_field or self.orderField
|
||||
self.orderType = order_type or self.orderType
|
||||
self.setter_page()
|
||||
if self.page > self.totalPage:
|
||||
self.page = self.totalPage
|
||||
elif self.page < 1:
|
||||
self.page = 1
|
||||
self.setter_page()
|
||||
|
||||
def feed(self, data):
|
||||
if isinstance(data, list):
|
||||
@@ -32,14 +44,16 @@ class Pagination:
|
||||
self.totalCount = data.count
|
||||
elif isinstance(data, Query):
|
||||
self.totalCount = data.count()
|
||||
self.setter_page()
|
||||
|
||||
def setter_page(self):
|
||||
self.pageCount = self.size
|
||||
self.totalPage = int(round(self.totalCount / self.size, 0))
|
||||
if self.totalCount % self.size > 0:
|
||||
if self.page == self.totalPage:
|
||||
self.pageCount = self.totalCount % self.size
|
||||
remainder = self.totalCount % self.size
|
||||
if remainder > 0:
|
||||
self.totalPage = int(round(self.totalCount / self.size, 0)) + 1
|
||||
if self.page == self.totalPage:
|
||||
self.pageCount = remainder
|
||||
|
||||
def as_dict(self):
|
||||
return {
|
||||
@@ -56,17 +70,19 @@ class Pagination:
|
||||
class SingleAlchemyResponse:
|
||||
status_code = "HTTP_200_OK"
|
||||
result: AlchemyResponse
|
||||
response_model: MODEL_TYPE
|
||||
response_model: Any
|
||||
message: str
|
||||
completed: bool
|
||||
cls_object: Any = (None,)
|
||||
|
||||
def __new__(
|
||||
cls,
|
||||
message: str,
|
||||
response_model: MODEL_TYPE,
|
||||
response_model: Any,
|
||||
status_code: str = "HTTP_200_OK",
|
||||
result: AlchemyResponse = None,
|
||||
completed: bool = True,
|
||||
cls_object: Any = None,
|
||||
):
|
||||
cls.status_code = getattr(status, status_code, "HTTP_200_OK")
|
||||
cls.message = message
|
||||
@@ -75,10 +91,16 @@ class SingleAlchemyResponse:
|
||||
cls.response_model = response_model
|
||||
|
||||
if not isinstance(cls.result, AlchemyResponse):
|
||||
raise Exception("Invalid response type 4 single alchemy response")
|
||||
HTTPExceptionEvyos(
|
||||
lang=cls_object.lang,
|
||||
error_code="HTTP_400_BAD_REQUEST",
|
||||
)
|
||||
|
||||
if not cls.result.first:
|
||||
raise Exception("Invalid data type 4 single alchemy response")
|
||||
HTTPExceptionEvyos(
|
||||
lang=cls_object.lang,
|
||||
error_code="HTTP_400_BAD_REQUEST",
|
||||
)
|
||||
|
||||
pagination = Pagination()
|
||||
pagination.change(page=1)
|
||||
@@ -103,7 +125,7 @@ class AlchemyJsonResponse:
|
||||
result: AlchemyResponse
|
||||
completed: bool
|
||||
filter_attributes: Any = None
|
||||
response_model: MODEL_TYPE = None
|
||||
response_model: Any = None
|
||||
cls_object: Any = None
|
||||
|
||||
def __new__(
|
||||
@@ -112,7 +134,7 @@ class AlchemyJsonResponse:
|
||||
status_code: str = "HTTP_200_OK",
|
||||
result: Union[BaseModelRegular, BaseModel, PydanticBaseModel] = None,
|
||||
completed: bool = True,
|
||||
response_model: MODEL_TYPE = None,
|
||||
response_model: Any = None,
|
||||
cls_object: Any = None,
|
||||
filter_attributes: Any = None,
|
||||
):
|
||||
@@ -126,11 +148,15 @@ class AlchemyJsonResponse:
|
||||
pagination = Pagination()
|
||||
|
||||
if cls.result.first:
|
||||
raise Exception("Invalid data type 4 alchemy response")
|
||||
HTTPExceptionEvyos(
|
||||
lang=cls_object.lang,
|
||||
error_code="HTTP_400_BAD_REQUEST",
|
||||
)
|
||||
|
||||
if filter_attributes:
|
||||
pagination.change(
|
||||
page=filter_attributes.page, size=filter_attributes.size,
|
||||
page=filter_attributes.page,
|
||||
size=filter_attributes.size,
|
||||
order_field=filter_attributes.order_field,
|
||||
order_type=filter_attributes.order_type,
|
||||
)
|
||||
@@ -158,8 +184,8 @@ class ListJsonResponse:
|
||||
message: str
|
||||
completed: bool
|
||||
filter_attributes: Any
|
||||
response_model: MODEL_TYPE = None,
|
||||
cls_object: Any = None,
|
||||
response_model: Any = (None,)
|
||||
cls_object: Any = (None,)
|
||||
|
||||
def __new__(
|
||||
cls,
|
||||
@@ -167,7 +193,7 @@ class ListJsonResponse:
|
||||
status_code: str = "HTTP_200_OK",
|
||||
result: Union[BaseModelRegular, BaseModel, PydanticBaseModel] = None,
|
||||
completed: bool = True,
|
||||
response_model: MODEL_TYPE = None,
|
||||
response_model: Any = None,
|
||||
cls_object: Any = None,
|
||||
filter_attributes: Any = None,
|
||||
):
|
||||
@@ -176,15 +202,20 @@ class ListJsonResponse:
|
||||
cls.result = result
|
||||
cls.completed = completed
|
||||
cls.filter_attributes = filter_attributes
|
||||
cls.response_model: MODEL_TYPE = response_model
|
||||
cls.response_model: Any = response_model
|
||||
|
||||
if not isinstance(cls.result, list):
|
||||
raise Exception("Invalid data type 4 list json response")
|
||||
HTTPExceptionEvyos(
|
||||
lang=cls_object.lang,
|
||||
error_code="HTTP_400_BAD_REQUEST",
|
||||
)
|
||||
pagination = Pagination()
|
||||
pagination.change(page=1)
|
||||
data = list(cls.result)
|
||||
if cls.response_model:
|
||||
data = [cls.response_model(**data_object).dump() for data_object in cls.result]
|
||||
data = [
|
||||
cls.response_model(**data_object).dump() for data_object in cls.result
|
||||
]
|
||||
pagination.feed(data)
|
||||
return JSONResponse(
|
||||
status_code=cls.status_code,
|
||||
@@ -196,14 +227,15 @@ class ListJsonResponse:
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class DictJsonResponse:
|
||||
status_code = "HTTP_200_OK"
|
||||
result: dict
|
||||
message: str
|
||||
completed: bool
|
||||
filter_attributes: Any
|
||||
response_model: MODEL_TYPE = None,
|
||||
cls_object: Any = None,
|
||||
response_model: Any = (None,)
|
||||
cls_object: Any = (None,)
|
||||
|
||||
def __new__(
|
||||
cls,
|
||||
@@ -211,7 +243,7 @@ class DictJsonResponse:
|
||||
status_code: str = "HTTP_200_OK",
|
||||
result: Union[BaseModelRegular, BaseModel, PydanticBaseModel] = None,
|
||||
completed: bool = True,
|
||||
response_model: MODEL_TYPE = None,
|
||||
response_model: Any = None,
|
||||
cls_object: Any = None,
|
||||
filter_attributes: Any = None,
|
||||
):
|
||||
@@ -220,10 +252,13 @@ class DictJsonResponse:
|
||||
cls.result = result
|
||||
cls.completed = completed
|
||||
cls.filter_attributes = filter_attributes
|
||||
cls.response_model: MODEL_TYPE = response_model
|
||||
cls.response_model: Any = response_model
|
||||
|
||||
if not isinstance(cls.result, dict):
|
||||
raise Exception("Invalid data type 4 dict json response")
|
||||
HTTPExceptionEvyos(
|
||||
lang=cls_object.lang,
|
||||
error_code="HTTP_400_BAD_REQUEST",
|
||||
)
|
||||
|
||||
pagination = Pagination()
|
||||
pagination.change(page=1)
|
||||
|
||||
Reference in New Issue
Block a user