Skip to content

Commit 3953773

Browse files
author
Kevin Hellemun
committed
Base excaption handler done.
1 parent b905e97 commit 3953773

File tree

3 files changed

+116
-43
lines changed

3 files changed

+116
-43
lines changed

bunq/sdk/client.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from bunq.sdk import context
88
from bunq.sdk import exception
9+
from bunq.sdk.exception_hanlder import ExceptionHandler
910
from bunq.sdk import security
1011
from bunq.sdk.json import converter
1112

@@ -201,11 +202,17 @@ def _assert_response_success(self, response):
201202
"""
202203

203204
if response.status_code != self._STATUS_CODE_OK:
204-
raise exception.ApiException(
205+
exception_ = ExceptionHandler.create_exception_for_response(
205206
response.status_code,
206207
self._fetch_error_messages(response)
207208
)
208209

210+
raise exception_
211+
# raise exception.ApiException(
212+
# response.status_code,
213+
# self._fetch_error_messages(response)
214+
# )
215+
209216
@classmethod
210217
def _create_bunq_response_raw(cls, response):
211218
"""

bunq/sdk/exception.py

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,52 @@
1-
class ApiException(Exception):
2-
"""
3-
:type _response_code: int
4-
"""
5-
6-
# Constants for formatting messages
7-
_FORMAT_RESPONSE_CODE_LINE = 'HTTP Response Code: {}'
8-
_GLUE_ERROR_MESSAGES = '\n'
9-
10-
def __init__(self, response_code, messages):
11-
"""
12-
:type response_code: int
13-
:type messages: list[str]
14-
"""
15-
16-
super(ApiException, self).__init__(
17-
self.generate_message_error(response_code, messages)
18-
)
1+
class BunqError(Exception):
2+
def __init__(self, message, response_code):
193
self._response_code = response_code
4+
self._message = message
205

21-
def generate_message_error(self, response_code, messages):
22-
"""
23-
:type response_code: int
24-
:type messages: list[str]
6+
super(BunqError, self).__init__(message)
257

26-
:rtype: str
27-
"""
28-
29-
line_response_code = self._FORMAT_RESPONSE_CODE_LINE \
30-
.format(response_code)
31-
32-
return self.glue_messages([line_response_code] + messages)
33-
34-
def glue_messages(self, messages):
35-
"""
36-
:type messages: list[str]
37-
38-
:rtype: str
39-
"""
40-
41-
return self._GLUE_ERROR_MESSAGES.join(messages)
8+
@property
9+
def message(self):
10+
return self._message
4211

4312
@property
4413
def response_code(self):
45-
"""
46-
:rtype: int
47-
"""
48-
4914
return self._response_code
5015

5116

5217
class BunqException(Exception):
5318
def __init__(self, message):
5419
super(BunqException, self).__init__(message)
20+
21+
22+
class ApiException(BunqError):
23+
pass
24+
25+
26+
class BadRequestException(BunqError):
27+
pass
28+
29+
30+
class UnauthorizedException(BunqError):
31+
pass
32+
33+
34+
class ForbiddenException(BunqError):
35+
pass
36+
37+
38+
class NotFoundException(BunqError):
39+
pass
40+
41+
42+
class MethodNotAllowedException(BunqError):
43+
pass
44+
45+
46+
class ToManyRequestsException(BunqError):
47+
pass
48+
49+
50+
class PleaseContactBunqException(BunqError):
51+
pass
52+

bunq/sdk/exception_hanlder.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from bunq.sdk.exception import BadRequestException
2+
from bunq.sdk.exception import UnauthorizedException
3+
from bunq.sdk.exception import ForbiddenException
4+
from bunq.sdk.exception import NotFoundException
5+
from bunq.sdk.exception import MethodNotAllowedException
6+
from bunq.sdk.exception import ToManyRequestsException
7+
from bunq.sdk.exception import PleaseContactBunqException
8+
from bunq.sdk.exception import ApiException
9+
10+
11+
class ExceptionHandler(Exception):
12+
# Error response code constants
13+
_HTTP_RESPONSE_CODE_BAD_REQUEST = 400
14+
_HTTP_RESPONSE_CODE_UNAUTHORIZED = 401
15+
_HTTP_RESPONSE_CODE_FORBIDDEN = 403
16+
_HTTP_RESPONSE_CODE_NOT_FOUND = 404
17+
_HTTP_RESPONSE_CODE_METHOD_NOT_ALLOWED = 405
18+
_HTTP_RESPONSE_CODE_TOO_MANY_REQUESTS = 429
19+
_HTTP_RESPONSE_CODE_INTERNAL_SERVER_ERROR = 500
20+
21+
# Constants for formatting messages
22+
_FORMAT_RESPONSE_CODE_LINE = 'HTTP Response Code: {}'
23+
_GLUE_ERROR_MESSAGES = '\n'
24+
25+
@classmethod
26+
def create_exception_for_response(cls, response_code, messages):
27+
error_message = cls._generate_message_error(response_code, messages)
28+
29+
if response_code == cls._HTTP_RESPONSE_CODE_BAD_REQUEST:
30+
return BadRequestException(error_message, response_code)
31+
if response_code == cls._HTTP_RESPONSE_CODE_UNAUTHORIZED:
32+
return UnauthorizedException(error_message, response_code)
33+
if response_code == cls._HTTP_RESPONSE_CODE_FORBIDDEN:
34+
return ForbiddenException(error_message, response_code)
35+
if response_code == cls._HTTP_RESPONSE_CODE_NOT_FOUND:
36+
return NotFoundException(error_message, response_code)
37+
if response_code == cls._HTTP_RESPONSE_CODE_METHOD_NOT_ALLOWED:
38+
return MethodNotAllowedException(error_message, response_code)
39+
if response_code == cls._HTTP_RESPONSE_CODE_TOO_MANY_REQUESTS:
40+
return ToManyRequestsException(error_message, response_code)
41+
if response_code == cls._HTTP_RESPONSE_CODE_INTERNAL_SERVER_ERROR:
42+
return PleaseContactBunqException(error_message, response_code)
43+
44+
return ApiException(error_message, response_code)
45+
46+
@classmethod
47+
def _generate_message_error(cls, response_code, messages):
48+
"""
49+
:type response_code: int
50+
:type messages: list[str]
51+
52+
:rtype: str
53+
"""
54+
55+
line_response_code = cls._FORMAT_RESPONSE_CODE_LINE \
56+
.format(response_code)
57+
58+
return cls._glue_messages([line_response_code] + messages)
59+
60+
@classmethod
61+
def _glue_messages(cls, messages):
62+
"""
63+
:type messages: list[str]
64+
65+
:rtype: str
66+
"""
67+
68+
return cls._GLUE_ERROR_MESSAGES.join(messages)

0 commit comments

Comments
 (0)