diff options
Diffstat (limited to 'djangorestframework/exceptions.py')
| -rw-r--r-- | djangorestframework/exceptions.py | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/djangorestframework/exceptions.py b/djangorestframework/exceptions.py deleted file mode 100644 index a405a885..00000000 --- a/djangorestframework/exceptions.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -Handled exceptions raised by REST framework. - -In addition Django's built in 403 and 404 exceptions are handled. -(`django.http.Http404` and `django.core.exceptions.PermissionDenied`) -""" -from djangorestframework import status - - -class APIException(Exception): - """ - Base class for REST framework exceptions. - Subclasses should provide `.status_code` and `.detail` properties. - """ - pass - - -class ParseError(APIException): - status_code = status.HTTP_400_BAD_REQUEST - default_detail = 'Malformed request.' - - def __init__(self, detail=None): - self.detail = detail or self.default_detail - - -class PermissionDenied(APIException): - status_code = status.HTTP_403_FORBIDDEN - default_detail = 'You do not have permission to perform this action.' - - def __init__(self, detail=None): - self.detail = detail or self.default_detail - - -class InvalidFormat(APIException): - status_code = status.HTTP_404_NOT_FOUND - default_detail = "Format suffix '.%s' not found." - - def __init__(self, format, detail=None): - self.detail = (detail or self.default_detail) % format - - -class MethodNotAllowed(APIException): - status_code = status.HTTP_405_METHOD_NOT_ALLOWED - default_detail = "Method '%s' not allowed." - - def __init__(self, method, detail=None): - self.detail = (detail or self.default_detail) % method - - -class NotAcceptable(APIException): - status_code = status.HTTP_406_NOT_ACCEPTABLE - default_detail = "Could not satisfy the request's Accept header" - - def __init__(self, detail=None, available_renderers=None): - self.detail = detail or self.default_detail - self.available_renderers = available_renderers - - -class UnsupportedMediaType(APIException): - status_code = status.HTTP_415_UNSUPPORTED_MEDIA_TYPE - default_detail = "Unsupported media type '%s' in request." - - def __init__(self, media_type, detail=None): - self.detail = (detail or self.default_detail) % media_type - - -class Throttled(APIException): - status_code = status.HTTP_429_TOO_MANY_REQUESTS - default_detail = "Request was throttled." - extra_detail = "Expected available in %d second%s." - - def __init__(self, wait=None, detail=None): - import math - self.wait = wait and math.ceil(wait) or None - if wait is not None: - format = detail or self.default_detail + self.extra_detail - self.detail = format % (self.wait, self.wait != 1 and 's' or '') - else: - self.detail = detail or self.default_detail |
