from typing import Optional from fastapi import status from fastapi.responses import JSONResponse class BaseEndpointResponse: def __init__(self, lang: str, code: str): self.lang = lang self.code = code @property def response(self) -> Optional[dict]: from Services.Redis import RedisActions from ApiLayers.AllConfigs.Redis.configs import RedisValidationKeysAction language_model = RedisActions.get_json( list_keys=[RedisValidationKeysAction.static_response_key, self.code, self.lang] ) if language_model.status: return language_model.first return {"message": f"{self.code} -> Language model not found"} 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 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): return JSONResponse( status_code=status.HTTP_406_NOT_ACCEPTABLE, content=dict(completed=False, **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), )