Coverage for src\zapy\api\exceptions.py: 26%
17 statements
« prev ^ index » next coverage.py v7.3.4, created at 2023-12-20 14:17 -0500
« prev ^ index » next coverage.py v7.3.4, created at 2023-12-20 14:17 -0500
1from pydantic import ValidationError
3import traceback
5from zapy.base.exceptions import ZapyException, HandledException
7from fastapi import Request
8from fastapi.responses import JSONResponse
11def global_error_handler(request: Request, exception: Exception):
12 traceback.print_exc()
13 status_code = getattr(exception, "status_code", 500)
14 if isinstance(exception, HandledException):
15 status_code = 400
16 if isinstance(exception, ValidationError):
17 status_code = 400
18 exception.error_type = 'validation:json'
19 response = {
20 "error": str(exception),
21 "class": exception.__class__.__name__,
22 "error_type": getattr(exception, "error_type", "error:unhandled"),
23 }
24 if isinstance(exception, ZapyException):
25 response.update({
26 "class": "ZapyException",
27 "context": exception.context
28 })
29 return JSONResponse(response, status_code=status_code)