TraumaBackend / trauma /core /wrappers.py
brestok's picture
init
50553ea
raw
history blame
1.15 kB
from functools import wraps
from typing import Generic, Optional, TypeVar
from fastapi import HTTPException
from pydantic import BaseModel
from starlette.responses import JSONResponse
from trauma.core.config import settings
T = TypeVar('T')
class ErrorTraumaResponse(BaseModel):
message: str
class TraumaResponseWrapper(BaseModel, Generic[T]):
data: Optional[T] = None
successful: bool = True
error: Optional[ErrorTraumaResponse] = None
def response(self, status_code: int):
return JSONResponse(
status_code=status_code,
content={
"data": self.data,
"successful": self.successful,
"error": self.error.dict() if self.error else None
}
)
def exception_wrapper(http_error: int, error_message: str):
def decorator(func):
@wraps(func)
async def wrapper(*args, **kwargs):
try:
return await func(*args, **kwargs)
except Exception as e:
raise HTTPException(status_code=http_error, detail=error_message) from e
return wrapper
return decorator