-
Notifications
You must be signed in to change notification settings - Fork 1
/
exceptions.py
155 lines (124 loc) · 4.31 KB
/
exceptions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
"""
Application exceptions are found in this file.
All HTTP exceptions sets the content-type to JSON by default.
All HTTP exceptions are derived from the Bottle HTTPResponse class.
"""
import json
from bottle import HTTPResponse, HTTPError
# HTTP responses.
class BaseResponse(HTTPResponse):
"""Base HTTPResponse class.
Sets the content-type header and standardizes the error message.
"""
def __init__(self, body='', status=400, headers=None, **more_headers):
"""Base response exception.
All exception responses should be derived from this base class.
:param body: The body of the response.
:type body: str|dict
:param status: The HTTP status. Defaults to 400 Bad Request.
:type status: int
:param headers: Response headers.
:type headers: dict
:param more_headers: Additional headers.
:type more_headers: dict
"""
if headers is None:
headers = dict()
if 'Content-type' not in headers:
headers = {'Content-type': 'application/json'}
_body = {
'error': {
'status': status,
'message': body
}
}
super(BaseResponse, self).__init__(
json.dumps(_body), status, headers, **more_headers
)
class ValidationFailed(BaseResponse):
"""Validation exception.
If the validation of arguments fails, this exception is raised.
"""
def __init__(self, body='', status=422, headers=None, **more_headers):
"""Validation failed response.
:param body: The body of the response.
:type body: str|dict
:param status: The HTTP status.
:type status: int
:param headers: Response headers.
:type headers: dict
:param more_headers: Additional headers.
:type more_headers: dict
"""
super(ValidationFailed, self).__init__(
body, status, headers, **more_headers
)
class NotFound(BaseResponse):
"""Not found exception.
If a record is not found in the database, this exception is raised.
"""
def __init__(self, body='', status=404, headers=None, **more_headers):
"""Not Found response.
:param body: The body of the response.
:type body: str|dict
:param status: The HTTP status.
:type status: int
:param headers: Response headers.
:type headers: dict
:param more_headers: Additional headers.
:type more_headers: dict
"""
super(NotFound, self).__init__(
body, status, headers, **more_headers
)
# HTTP Errors
class ValidationError(HTTPError):
"""Validation error.
If a validation error occurs, this exception is raised.
"""
def __init__(self,
body='',
status=422,
exception=None,
traceback=None,
**options):
"""Validation error.
:param body: The body/message of the error.
:type body: str|dict
:param status: The HTTP status.
:type status: int
:param exception: The exception.
:type exception: Exception
:param traceback: The backtrace of the exception.
:type traceback: str
:param options: Additional options.
:type options: dict
"""
super(ValidationError, self).__init__(
status, body, exception, traceback, **options
)
class MissingRequiredHeaderError(HTTPError):
"""Required header missing error.
If a required header is missing, this exception is raised.
"""
def __init__(self,
body='',
status=422,
exception=None,
traceback=None,
**options):
"""Missing required header error.
:param body: The body/message of the error.
:type body: str|dict
:param status: The HTTP status.
:type status: int
:param exception: The exception.
:type exception: Exception
:param traceback: The backtrace of the exception.
:type traceback: str
:param options: Additional options.
:type options: dict
"""
super(MissingRequiredHeaderError, self).__init__(
status, body, exception, traceback, **options
)