Use dict for HTTP status code → exception mapping.
This commit is contained in:
@@ -143,35 +143,15 @@ class Api(object):
|
|||||||
"""Check HTTP response codes
|
"""Check HTTP response codes
|
||||||
"""
|
"""
|
||||||
status = response.status_code
|
status = response.status_code
|
||||||
if status in (301, 302, 303, 307):
|
|
||||||
raise exceptions.Redirection(response, content)
|
if 200 <= status <= 299:
|
||||||
elif 200 <= status <= 299:
|
|
||||||
return json.loads(content) if content else {}
|
return json.loads(content) if content else {}
|
||||||
elif status == 400:
|
|
||||||
raise exceptions.BadRequest(response, content)
|
exception = exceptions.exception_for_status(status)
|
||||||
elif status == 401:
|
if exception:
|
||||||
raise exceptions.UnauthorizedAccess(response, content)
|
raise exception(response, content)
|
||||||
elif status == 403:
|
|
||||||
raise exceptions.ForbiddenAccess(response, content)
|
raise exceptions.ConnectionError(response, content, "Unknown response code: %s" % status)
|
||||||
elif status == 404:
|
|
||||||
raise exceptions.ResourceNotFound(response, content)
|
|
||||||
elif status == 405:
|
|
||||||
raise exceptions.MethodNotAllowed(response, content)
|
|
||||||
elif status == 409:
|
|
||||||
raise exceptions.ResourceConflict(response, content)
|
|
||||||
elif status == 410:
|
|
||||||
raise exceptions.ResourceGone(response, content)
|
|
||||||
elif status == 412:
|
|
||||||
raise exceptions.PreconditionFailed(response, content)
|
|
||||||
elif status == 422:
|
|
||||||
raise exceptions.ResourceInvalid(response, content)
|
|
||||||
elif 401 <= status <= 499:
|
|
||||||
raise exceptions.ClientError(response, content)
|
|
||||||
elif 500 <= status <= 599:
|
|
||||||
raise exceptions.ServerError(response, content)
|
|
||||||
else:
|
|
||||||
raise exceptions.ConnectionError(response,
|
|
||||||
content, "Unknown response code: #{response.code}")
|
|
||||||
|
|
||||||
def headers(self):
|
def headers(self):
|
||||||
"""Default HTTP headers
|
"""Default HTTP headers
|
||||||
|
|||||||
@@ -101,3 +101,36 @@ class MethodNotAllowed(ClientError):
|
|||||||
|
|
||||||
def allowed_methods(self):
|
def allowed_methods(self):
|
||||||
return self.response['Allow']
|
return self.response['Allow']
|
||||||
|
|
||||||
|
|
||||||
|
_exception_map = {
|
||||||
|
301: Redirection,
|
||||||
|
302: Redirection,
|
||||||
|
303: Redirection,
|
||||||
|
307: Redirection,
|
||||||
|
400: BadRequest,
|
||||||
|
401: UnauthorizedAccess,
|
||||||
|
403: ForbiddenAccess,
|
||||||
|
404: ResourceNotFound,
|
||||||
|
405: MethodNotAllowed,
|
||||||
|
409: ResourceConflict,
|
||||||
|
410: ResourceGone,
|
||||||
|
412: PreconditionFailed,
|
||||||
|
422: ResourceInvalid,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def exception_for_status(status_code):
|
||||||
|
"""Returns the exception class for the given status code."""
|
||||||
|
|
||||||
|
try:
|
||||||
|
return _exception_map[status_code]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if 400 <= status_code <= 499:
|
||||||
|
return ClientError
|
||||||
|
elif 500 <= status_code <= 599:
|
||||||
|
return ServerError
|
||||||
|
|
||||||
|
return None
|
||||||
|
|||||||
Reference in New Issue
Block a user