diff --git a/apps/api/exceptions.py b/apps/api/exceptions.py new file mode 100644 index 0000000..a6881a3 --- /dev/null +++ b/apps/api/exceptions.py @@ -0,0 +1,22 @@ +""" + +""" + +from rest_framework.views import exception_handler +from rest_framework.response import Response +from rest_framework import status + +def conflict_exception_handler(exc, context): + response = exception_handler(exc, context) + + if response is not None and isinstance(response.data, dict): + for errors in response.data.values(): + if not isinstance(errors, list): + continue + + for error in errors: + if hasattr(error, 'code') and error.code == 'unique': + response.status_code = status.HTTP_409_CONFLICT + return response + + return response \ No newline at end of file diff --git a/core/settings.py b/core/settings.py index 0ac7280..ef9400d 100644 --- a/core/settings.py +++ b/core/settings.py @@ -247,5 +247,6 @@ REST_FRAMEWORK = { 'DEFAULT_THROTTLE_RATES': { 'anon': '100/day', 'user': '1000/day' - } + }, + "EXCEPTION_HANDLER": "apps.api.exceptions.conflict_exception_handler" }