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

1from pydantic import ValidationError 

2 

3import traceback 

4 

5from zapy.base.exceptions import ZapyException, HandledException 

6 

7from fastapi import Request 

8from fastapi.responses import JSONResponse 

9 

10 

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)