Add code property to Permission

This commit is contained in:
jun0jang 2019-11-06 15:54:07 +09:00
parent e7eff73ad5
commit d7a151a71f
3 changed files with 10 additions and 16 deletions

View File

@ -101,10 +101,8 @@ class APIException(Exception):
default_code = 'error' default_code = 'error'
def __init__(self, detail=None, code=None): def __init__(self, detail=None, code=None):
if detail is None: detail = detail or self.default_detail
detail = self.default_detail code = code or self.default_code
if code is None:
code = self.default_code
self.detail = _get_error_details(detail, code) self.detail = _get_error_details(detail, code)
@ -141,10 +139,8 @@ class ValidationError(APIException):
default_code = 'invalid' default_code = 'invalid'
def __init__(self, detail=None, code=None): def __init__(self, detail=None, code=None):
if detail is None: detail = detail or self.default_detail
detail = self.default_detail code = code or self.default_code
if code is None:
code = self.default_code
# For validation failures, we may collect many errors together, # For validation failures, we may collect many errors together,
# so the details should always be coerced to a list if not already. # so the details should always be coerced to a list if not already.

View File

@ -102,6 +102,8 @@ class BasePermission(metaclass=BasePermissionMetaclass):
""" """
A base class from which all permission classes should inherit. A base class from which all permission classes should inherit.
""" """
message = None
code = None
def has_permission(self, request, view): def has_permission(self, request, view):
""" """

View File

@ -166,13 +166,13 @@ class APIView(View):
""" """
raise exceptions.MethodNotAllowed(request.method) raise exceptions.MethodNotAllowed(request.method)
def permission_denied(self, request, message=None): def permission_denied(self, request, message=None, code=None):
""" """
If request is not permitted, determine what kind of exception to raise. If request is not permitted, determine what kind of exception to raise.
""" """
if request.authenticators and not request.successful_authenticator: if request.authenticators and not request.successful_authenticator:
raise exceptions.NotAuthenticated() raise exceptions.NotAuthenticated()
raise exceptions.PermissionDenied(detail=message) raise exceptions.PermissionDenied(detail=message, code=code)
def throttled(self, request, wait): def throttled(self, request, wait):
""" """
@ -330,9 +330,7 @@ class APIView(View):
""" """
for permission in self.get_permissions(): for permission in self.get_permissions():
if not permission.has_permission(request, self): if not permission.has_permission(request, self):
self.permission_denied( self.permission_denied(request, permission.message, permission.code)
request, message=getattr(permission, 'message', None)
)
def check_object_permissions(self, request, obj): def check_object_permissions(self, request, obj):
""" """
@ -341,9 +339,7 @@ class APIView(View):
""" """
for permission in self.get_permissions(): for permission in self.get_permissions():
if not permission.has_object_permission(request, self, obj): if not permission.has_object_permission(request, self, obj):
self.permission_denied( self.permission_denied(request, permission.message, permission.code)
request, message=getattr(permission, 'message', None)
)
def check_throttles(self, request): def check_throttles(self, request):
""" """