exceptionhandler.py 815 B

12345678910111213141516171819202122232425
  1. from rest_framework.views import exception_handler as drf_exception_handler
  2. from django.core.exceptions import PermissionDenied
  3. from django.http import Http404
  4. from django.utils import six
  5. from misago.core.exceptions import Banned
  6. def handle_api_exception(exception, context):
  7. response = drf_exception_handler(exception, context)
  8. if response:
  9. if isinstance(exception, Banned):
  10. response.data = exception.ban.get_serialized_message()
  11. elif isinstance(exception, PermissionDenied) and exception.args:
  12. response.data = {
  13. 'detail': six.text_type(exception),
  14. }
  15. elif isinstance(exception, Http404):
  16. response.data = {
  17. 'detail': 'NOT FOUND',
  18. }
  19. return response
  20. else:
  21. return None