diff options
| author | Xavier Ordoquy | 2014-04-13 00:05:57 +0200 | 
|---|---|---|
| committer | Xavier Ordoquy | 2014-04-13 00:05:57 +0200 | 
| commit | d08536ad9d026fb7126c430f6d9c18f8540aacd6 (patch) | |
| tree | a8a1d36ce76867e57da23379694ea0609801990b /rest_framework/exceptions.py | |
| parent | 2911cd64ad67ba193e3d37322ee71692cb482623 (diff) | |
| parent | 93b9245b8714287a440023451ff7880a2f6e5b32 (diff) | |
| download | django-rest-framework-d08536ad9d026fb7126c430f6d9c18f8540aacd6.tar.bz2 | |
Merge remote-tracking branch 'origin/master' into 2.4.0
Conflicts:
	.travis.yml
	docs/api-guide/fields.md
	docs/api-guide/routers.md
	docs/topics/release-notes.md
	rest_framework/authentication.py
	rest_framework/serializers.py
	rest_framework/templatetags/rest_framework.py
	rest_framework/tests/test_authentication.py
	rest_framework/tests/test_filters.py
	rest_framework/tests/test_hyperlinkedserializers.py
	rest_framework/tests/test_serializer.py
	rest_framework/tests/test_testing.py
	rest_framework/utils/encoders.py
	tox.ini
Diffstat (limited to 'rest_framework/exceptions.py')
| -rw-r--r-- | rest_framework/exceptions.py | 37 | 
1 files changed, 16 insertions, 21 deletions
| diff --git a/rest_framework/exceptions.py b/rest_framework/exceptions.py index 425a7214..5f774a9f 100644 --- a/rest_framework/exceptions.py +++ b/rest_framework/exceptions.py @@ -6,47 +6,42 @@ In addition Django's built in 403 and 404 exceptions are handled.  """  from __future__ import unicode_literals  from rest_framework import status +import math  class APIException(Exception):      """      Base class for REST framework exceptions. -    Subclasses should provide `.status_code` and `.detail` properties. +    Subclasses should provide `.status_code` and `.default_detail` properties.      """ -    pass +    status_code = status.HTTP_500_INTERNAL_SERVER_ERROR +    default_detail = '' +    def __init__(self, detail=None): +        self.detail = detail or self.default_detail + +    def __str__(self): +        return self.detail  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 AuthenticationFailed(APIException):      status_code = status.HTTP_401_UNAUTHORIZED      default_detail = 'Incorrect authentication credentials.' -    def __init__(self, detail=None): -        self.detail = detail or self.default_detail -  class NotAuthenticated(APIException):      status_code = status.HTTP_401_UNAUTHORIZED      default_detail = 'Authentication credentials were not provided.' -    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 MethodNotAllowed(APIException):      status_code = status.HTTP_405_METHOD_NOT_ALLOWED @@ -75,14 +70,14 @@ class UnsupportedMediaType(APIException):  class Throttled(APIException):      status_code = status.HTTP_429_TOO_MANY_REQUESTS -    default_detail = "Request was throttled." +    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: +        if wait is None:              self.detail = detail or self.default_detail +            self.wait = None +        else: +            format = (detail or self.default_detail) + self.extra_detail +            self.detail = format % (wait, wait != 1 and 's' or '') +            self.wait = math.ceil(wait) | 
