Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
63 lines
1.9 KiB
Python
Executable File
63 lines
1.9 KiB
Python
Executable File
from django.http import response
|
|
|
|
from core import exceptions
|
|
|
|
|
|
class ExceptionMiddleware:
|
|
"""
|
|
This class is used to handle exceptions that occur during the request/response cycle.
|
|
It is a middleware that is added to the Django middleware pipeline.
|
|
"""
|
|
|
|
def __init__(self, get_response):
|
|
"""
|
|
Initialize the middleware.
|
|
|
|
Args:
|
|
get_response: The next middleware in the pipeline.
|
|
"""
|
|
self.get_response = get_response
|
|
|
|
def __call__(self, request):
|
|
"""
|
|
This method is called for each request.
|
|
It retrieves the response from the next middleware in the pipeline,
|
|
and handles any exceptions that occur.
|
|
|
|
Args:
|
|
request: The incoming request.
|
|
|
|
Returns:
|
|
The response from the next middleware in the pipeline.
|
|
"""
|
|
try:
|
|
response = self.get_response(request)
|
|
except exceptions.BreakException as e:
|
|
return self.process_exception(request, e)
|
|
return response
|
|
|
|
def process_exception(self, request, e):
|
|
"""
|
|
Process an exception that occurred during the request/response cycle.
|
|
|
|
Args:
|
|
request: The incoming request.
|
|
e: The exception that occurred.
|
|
|
|
Returns:
|
|
A JSON response containing information about the exception.
|
|
"""
|
|
if isinstance(e, exceptions.BreakException):
|
|
"""
|
|
If the exception is a BreakException, construct a JSON response containing the error message, data, and
|
|
any additional arguments passed to the BreakException.
|
|
"""
|
|
error_data = {
|
|
"message": e.message,
|
|
"data": e.data,
|
|
"errors": [
|
|
e.args.__str__(),
|
|
],
|
|
}
|
|
return response.JsonResponse(error_data)
|