| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- # (c) Nelen & Schuurmans
 
- from typing import List
 
- from typing import Union
 
- from fastapi.encoders import jsonable_encoder
 
- from fastapi.requests import Request
 
- from fastapi.responses import JSONResponse
 
- from starlette import status
 
- from clean_python import BadRequest
 
- from clean_python import Conflict
 
- from clean_python import DoesNotExist
 
- from clean_python import PermissionDenied
 
- from clean_python import Unauthorized
 
- from clean_python import ValueObject
 
- __all__ = [
 
-     "ValidationErrorResponse",
 
-     "DefaultErrorResponse",
 
-     "not_found_handler",
 
-     "conflict_handler",
 
-     "validation_error_handler",
 
-     "not_implemented_handler",
 
-     "permission_denied_handler",
 
-     "unauthorized_handler",
 
- ]
 
- class ValidationErrorEntry(ValueObject):
 
-     loc: List[Union[str, int]]
 
-     msg: str
 
-     type: str
 
- class ValidationErrorResponse(ValueObject):
 
-     detail: List[ValidationErrorEntry]
 
- class DefaultErrorResponse(ValueObject):
 
-     message: str
 
- async def not_found_handler(request: Request, exc: DoesNotExist):
 
-     return JSONResponse(
 
-         status_code=status.HTTP_404_NOT_FOUND,
 
-         content={"message": f"Could not find {exc.name} with id={exc.id}"},
 
-     )
 
- async def conflict_handler(request: Request, exc: Conflict):
 
-     return JSONResponse(
 
-         status_code=status.HTTP_409_CONFLICT,
 
-         content={"message": str(exc)},
 
-     )
 
- async def validation_error_handler(request: Request, exc: BadRequest):
 
-     return JSONResponse(
 
-         status_code=status.HTTP_400_BAD_REQUEST,
 
-         content=jsonable_encoder({"detail": exc.errors()}),
 
-     )
 
- async def not_implemented_handler(request: Request, exc: NotImplementedError):
 
-     return JSONResponse(
 
-         status_code=status.HTTP_501_NOT_IMPLEMENTED,
 
-         content={"message": str(exc)},
 
-     )
 
- async def unauthorized_handler(request: Request, exc: Unauthorized):
 
-     return JSONResponse(
 
-         status_code=status.HTTP_401_UNAUTHORIZED,
 
-         content={"message": "Unauthorized"},
 
-         headers={"WWW-Authenticate": "Bearer"},
 
-     )
 
- async def permission_denied_handler(request: Request, exc: PermissionDenied):
 
-     return JSONResponse(
 
-         status_code=status.HTTP_403_FORBIDDEN,
 
-         content={"message": "Permission denied", "detail": str(exc)},
 
-     )
 
 
  |