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
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1import json
4class HTTPError(Exception):
5 """ Base of all other errors"""
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
19 def __reduce__(self):
20 return (
21 HTTPError,
22 (self.status_code, self.reason, self.body, self.headers)
23 )
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'))
33class BadRequestsError(HTTPError):
34 pass
37class UnauthorizedError(HTTPError):
38 pass
41class ForbiddenError(HTTPError):
42 pass
45class NotFoundError(HTTPError):
46 pass
49class MethodNotAllowedError(HTTPError):
50 pass
53class PayloadTooLargeError(HTTPError):
54 pass
57class UnsupportedMediaTypeError(HTTPError):
58 pass
61class TooManyRequestsError(HTTPError):
62 pass
65class InternalServerError(HTTPError):
66 pass
69class ServiceUnavailableError(HTTPError):
70 pass
73class GatewayTimeoutError(HTTPError):
74 pass
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}
92def handle_error(error):
93 try:
94 exc = err_dict[error.code](error)
95 except KeyError:
96 return HTTPError(error)
97 return exc