from typing import Optional from fastapi import status from fastapi.responses import JSONResponse from ApiLayers.LanguageModels.set_defaults.static_validation_retriever import ( StaticValidationRetriever, ) class BaseEndpointResponse(StaticValidationRetriever): __abstract__ = True pass class EndpointSuccessResponse(BaseEndpointResponse): # 200 OK def as_dict(self, data: Optional[dict] = None): return JSONResponse( status_code=status.HTTP_200_OK, content=dict(completed=True, **self.response, lang=self.lang, data=data), ) class EndpointSuccessListResponse(BaseEndpointResponse): # 200 OK def as_dict(self, data: Optional[dict] = None, pagination: Optional[dict] = None): return JSONResponse( status_code=status.HTTP_200_OK, content=dict( completed=True, **self.response, lang=self.lang, pagination=pagination, data=data, ), ) class EndpointCreatedResponse(BaseEndpointResponse): # 201 Created def as_dict(self, data: Optional[dict] = None): return JSONResponse( status_code=status.HTTP_201_CREATED, content=dict(completed=True, **self.response, lang=self.lang, data=data), ) class EndpointAcceptedResponse(BaseEndpointResponse): # 202 Accepted def as_dict(self, data: Optional[dict] = None): return JSONResponse( status_code=status.HTTP_202_ACCEPTED, content=dict(completed=True, **self.response, lang=self.lang, data=data), ) class EndpointNotModifiedResponse(BaseEndpointResponse): # 304 Not Modified def as_dict(self): return JSONResponse( status_code=status.HTTP_304_NOT_MODIFIED, content=dict(completed=False, **self.response, lang=self.lang), ) class EndpointBadRequestResponse(BaseEndpointResponse): # 400 Bad Request def as_dict(self, data: Optional[dict] = None): return JSONResponse( status_code=status.HTTP_400_BAD_REQUEST, content=dict(completed=False, **self.response, lang=self.lang, data=data), ) class EndpointUnauthorizedResponse(BaseEndpointResponse): # 401 Unauthorized def as_dict(self): return JSONResponse( status_code=status.HTTP_401_UNAUTHORIZED, content=dict(completed=False, **self.response, lang=self.lang), ) class EndpointForbiddenResponse(BaseEndpointResponse): # 403 Forbidden def as_dict(self): return JSONResponse( status_code=status.HTTP_403_FORBIDDEN, content=dict(completed=False, **self.response, lang=self.lang), ) class EndpointNotFoundResponse(BaseEndpointResponse): # 404 Not Found def as_dict(self): return JSONResponse( status_code=status.HTTP_404_NOT_FOUND, content=dict(completed=False, **self.response, lang=self.lang), ) class EndpointMethodNotAllowedResponse(BaseEndpointResponse): # 405 Method Not Allowed def as_dict(self): return JSONResponse( status_code=status.HTTP_405_METHOD_NOT_ALLOWED, content=dict(completed=False, **self.response, lang=self.lang), ) class EndpointNotAcceptableResponse(BaseEndpointResponse): # 406 Not Acceptable def as_dict(self, data: Optional[dict] = None): return JSONResponse( status_code=status.HTTP_406_NOT_ACCEPTABLE, content=dict(completed=False, data=data, **self.response, lang=self.lang), ) class EndpointConflictResponse(BaseEndpointResponse): # 409 Conflict def as_dict(self): return JSONResponse( status_code=status.HTTP_409_CONFLICT, content=dict(completed=False, **self.response, lang=self.lang), ) class EndpointUnprocessableEntityResponse( BaseEndpointResponse ): # 422 Unprocessable Entity def as_dict(self, data: Optional[dict] = None): return JSONResponse( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, content=dict(completed=False, **self.response, lang=self.lang, data=data), ) class EndpointTooManyRequestsResponse(BaseEndpointResponse): # 429 Too Many Requests def __init__(self, retry_after: int, lang: str, code: str): super().__init__(lang=lang, code=code) self.retry_after = retry_after def as_dict(self): return JSONResponse( status_code=status.HTTP_429_TOO_MANY_REQUESTS, headers={"Retry-After": str(self.retry_after)}, content=dict(completed=False, **self.response, lang=self.lang), ) class EndpointInternalErrorResponse(BaseEndpointResponse): # 500 Internal Server Error def as_dict(self): return JSONResponse( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content=dict(completed=False, **self.response, lang=self.lang), )