exceptions.py 994 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. from django.utils.translation import gettext_lazy as _
  2. from rest_framework import exceptions, status
  3. class TokenError(Exception):
  4. pass
  5. class TokenBackendError(Exception):
  6. pass
  7. class DetailDictMixin:
  8. def __init__(self, detail=None, code=None):
  9. """
  10. Builds a detail dictionary for the error to give more information to API
  11. users.
  12. """
  13. detail_dict = {'detail': self.default_detail, 'code': self.default_code}
  14. if isinstance(detail, dict):
  15. detail_dict.update(detail)
  16. elif detail is not None:
  17. detail_dict['detail'] = detail
  18. if code is not None:
  19. detail_dict['code'] = code
  20. super().__init__(detail_dict)
  21. class AuthenticationFailed(DetailDictMixin, exceptions.AuthenticationFailed):
  22. pass
  23. class InvalidToken(AuthenticationFailed):
  24. status_code = status.HTTP_401_UNAUTHORIZED
  25. default_detail = _('Token is invalid or expired')
  26. default_code = 'token_not_valid'