Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/python_http_client/exceptions.py: 75%

46 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1import json 

2 

3 

4class HTTPError(Exception): 

5 """ Base of all other errors""" 

6 

7 def __init__(self, *args): 

8 if len(args) == 4: 

9 self.status_code = args[0] 

10 self.reason = args[1] 

11 self.body = args[2] 

12 self.headers = args[3] 

13 else: 

14 self.status_code = args[0].code 

15 self.reason = args[0].reason 

16 self.body = args[0].read() 

17 self.headers = args[0].hdrs 

18 

19 def __reduce__(self): 

20 return ( 

21 HTTPError, 

22 (self.status_code, self.reason, self.body, self.headers) 

23 ) 

24 

25 @property 

26 def to_dict(self): 

27 """ 

28 :return: dict of response error from the API 

29 """ 

30 return json.loads(self.body.decode('utf-8')) 

31 

32 

33class BadRequestsError(HTTPError): 

34 pass 

35 

36 

37class UnauthorizedError(HTTPError): 

38 pass 

39 

40 

41class ForbiddenError(HTTPError): 

42 pass 

43 

44 

45class NotFoundError(HTTPError): 

46 pass 

47 

48 

49class MethodNotAllowedError(HTTPError): 

50 pass 

51 

52 

53class PayloadTooLargeError(HTTPError): 

54 pass 

55 

56 

57class UnsupportedMediaTypeError(HTTPError): 

58 pass 

59 

60 

61class TooManyRequestsError(HTTPError): 

62 pass 

63 

64 

65class InternalServerError(HTTPError): 

66 pass 

67 

68 

69class ServiceUnavailableError(HTTPError): 

70 pass 

71 

72 

73class GatewayTimeoutError(HTTPError): 

74 pass 

75 

76 

77err_dict = { 

78 400: BadRequestsError, 

79 401: UnauthorizedError, 

80 403: ForbiddenError, 

81 404: NotFoundError, 

82 405: MethodNotAllowedError, 

83 413: PayloadTooLargeError, 

84 415: UnsupportedMediaTypeError, 

85 429: TooManyRequestsError, 

86 500: InternalServerError, 

87 503: ServiceUnavailableError, 

88 504: GatewayTimeoutError 

89} 

90 

91 

92def handle_error(error): 

93 try: 

94 exc = err_dict[error.code](error) 

95 except KeyError: 

96 return HTTPError(error) 

97 return exc