12
12
13
13
import http .client
14
14
15
- # Start Toopher-specific codes at 600 to avoid conflict/confusion with HTTP status codes
15
+
16
+ # Start DDA-specific codes at 600 to avoid conflict/confusion with HTTP status codes
16
17
import sys
17
18
18
19
logger = logging .getLogger (__name__ )
@@ -75,10 +76,8 @@ def error_code(self):
75
76
return self .__dict__ ["error_code" ]
76
77
except KeyError :
77
78
raise AttributeError (
78
- "'{}' object has no attribute '{}'" .format (
79
- ApiError .__name__ , "error_code"
80
- )
81
- )
79
+ f"'{ ApiError .__name__ } ' object has no attribute 'error_code'"
80
+ ) from None # suppress reporting the KeyError
82
81
83
82
@error_code .setter
84
83
def error_code (self , value ):
@@ -113,7 +112,7 @@ def __init__(self, additional_info=None):
113
112
http .client .responses .get (http .client .NOT_FOUND ),
114
113
)
115
114
if additional_info :
116
- error_message += " : " + additional_info
115
+ error_message += f": { additional_info } "
117
116
super ().__init__ (
118
117
error_code , error_message , http_status_code = http .client .NOT_FOUND
119
118
)
@@ -123,7 +122,7 @@ class ClientErrorForbidden(ClientError):
123
122
def __init__ (self , additional_info = None , ** kwargs ):
124
123
error_code , error_message = FORBIDDEN
125
124
if additional_info :
126
- error_message += ": %s" % additional_info
125
+ error_message += f ": { additional_info } "
127
126
super ().__init__ (
128
127
error_code , error_message , http_status_code = http .client .FORBIDDEN , ** kwargs
129
128
)
@@ -147,21 +146,25 @@ class ClientErrorExternalServiceFailure(ClientError):
147
146
def __init__ (self , additional_info = None ):
148
147
error_code , error_message = EXTERNAL_REQUEST_FAILURE
149
148
if additional_info :
150
- error_message += ": {0}" . format ( additional_info )
149
+ error_message += f ": { additional_info } "
151
150
super ().__init__ (error_code , error_message )
152
151
153
152
154
153
class ClientErrorRequestThrottled (ClientError ):
155
154
def __init__ (self ):
156
155
error_code , error_message = REQUEST_THROTTLED
157
- super ().__init__ (error_code , error_message , http_status_code = 429 )
156
+ super ().__init__ (
157
+ error_code ,
158
+ error_message ,
159
+ http_status_code = http .HTTPStatus .TOO_MANY_REQUESTS ,
160
+ )
158
161
159
162
160
163
class ClientErrorTimedOut (ClientError ):
161
164
def __init__ (self , additional_info = None ):
162
165
error_code , error_message = TIMED_OUT
163
166
if additional_info :
164
- error_message += ": %s" % additional_info
167
+ error_message += f ": { additional_info } "
165
168
super ().__init__ (
166
169
error_code , error_message , http_status_code = http .client .REQUEST_TIMEOUT
167
170
)
@@ -170,7 +173,7 @@ def __init__(self, additional_info=None):
170
173
class ClientErrorResponseWrapper (ClientError ):
171
174
def __init__ (self , response ):
172
175
error_code = response .status_code
173
- error_message = response .content
176
+ error_message = response .content . decode ()
174
177
status_code = response .status_code
175
178
super ().__init__ (error_code , error_message , http_status_code = status_code )
176
179
@@ -179,43 +182,45 @@ class ClientErrorExtraFields(ClientError):
179
182
def __init__ (self , extra_fields = None ):
180
183
error_code , error_message = EXTRA_FIELDS
181
184
if extra_fields :
182
- error_message += ": %s" % ", " .join (extra_fields )
185
+ error_message += f ": { ', ' .join (extra_fields )} "
183
186
super ().__init__ (error_code , error_message )
184
187
185
188
186
189
class ClientErrorReadOnlyFields (ClientError ):
187
190
def __init__ (self , read_only_fields = None ):
188
191
error_code , error_message = READ_ONLY_FIELDS
189
192
if read_only_fields :
190
- error_message += ": %s" % ", " .join (read_only_fields )
193
+ error_message += f ": { ', ' .join (read_only_fields )} "
191
194
super ().__init__ (error_code , error_message )
192
195
193
196
194
197
class ClientErrorMissingFields (ClientError ):
195
198
def __init__ (self , missing_fields = None , extra_message = None ):
196
199
error_code , error_message = MISSING_FIELDS
197
200
if missing_fields :
198
- error_message += ": %s" % ", " .join (missing_fields )
201
+ error_message += f ": { ', ' .join (missing_fields )} "
199
202
if extra_message :
200
- error_message += ": {0}" . format ( extra_message )
203
+ error_message += f ": { extra_message } "
201
204
super ().__init__ (error_code , error_message )
202
205
203
206
204
207
class ClientErrorInvalidFieldValues (ClientError ):
205
208
def __init__ (self , invalid_fields = None , extra_message = None ):
206
209
error_code , error_message = INVALID_FIELD_VALUES
207
210
if invalid_fields :
208
- error_message += ": %s" % ", " .join (invalid_fields )
211
+ error_message += f ": { ', ' .join (invalid_fields )} "
209
212
if extra_message :
210
- error_message += ": {0}" . format ( extra_message )
213
+ error_message += f ": { extra_message } "
211
214
super ().__init__ (error_code , error_message )
212
215
213
216
214
217
class ServerError (ApiError ):
215
- def __init__ (self ):
218
+ def __init__ (self , additional_info = None ):
216
219
error_code , error_message = LOGGED_SERVER_ERROR
217
- error_message = error_message .format (uuid .uuid4 ())
218
- logger .exception (error_message )
220
+ logged_error = error_message = error_message .format (uuid .uuid4 ())
221
+ if additional_info :
222
+ logged_error += f": { additional_info } "
223
+ logger .exception (logged_error )
219
224
220
225
self ._cause = None
221
226
0 commit comments