Skip to content

Commit

Permalink
* no need to reconstruct the traceback
Browse files Browse the repository at this point in the history
  • Loading branch information
Ori-Roza committed May 12, 2024
1 parent ccda5f9 commit 6249e35
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 22 deletions.
8 changes: 0 additions & 8 deletions drf_api_action/exceptions.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,2 @@
class ActionsAPIException(RuntimeError):
pass


class ActionsAPIExceptionMiddleware:
def __new__(cls, *args, **kwargs):
error_type = kwargs.pop('error_type', Exception)
error = error_type(*args)
error.__traceback__ = kwargs.pop('traceback', error_type.__traceback__)
return error
19 changes: 5 additions & 14 deletions drf_api_action/utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from typing import Optional
from drf_api_action.exceptions import ActionsAPIExceptionMiddleware


class CustomRequest:
Expand Down Expand Up @@ -27,19 +26,11 @@ def run_as_api(self, func, serializer_class, *args, **kw):
self.kwargs = kw # adding our enhanced kwargs into instance kwargs
self.request = request # mocking request with our arguments as data in the instance

try:
ret = func(request, **kw)
if isinstance(ret.data, list): # multiple results
results = [dict(res) for res in ret.data]
else: # only one json
results = {k.lower(): v for k, v in ret.data.items()}
except Exception as error: # pylint: disable=broad-except
error_type = type(error)
# re-constructing the error with the actual traceback
raised_exception = ActionsAPIExceptionMiddleware(*error.args,
error_type=error_type,
traceback=error.__traceback__) # fixing stack frames
raise raised_exception # pylint: disable=raising-non-exception
ret = func(request, **kw) # evaluating endpoint
if isinstance(ret.data, list): # multiple results
results = [dict(res) for res in ret.data]
else: # only one json
results = {k.lower(): v for k, v in ret.data.items()}

return results

Expand Down

0 comments on commit 6249e35

Please sign in to comment.