Skip to content

Commit 596e97d

Browse files
authored
Merge pull request #349 from VolkaRacho/do_not_always_call_got_request_exception
Do not call got_request_exception for exceptions explicitly handled contrib: VolkaRancho, chandlernine review: j5awry
2 parents 0dc1c3c + 872cc97 commit 596e97d

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

flask_restx/api.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,8 +679,6 @@ def handle_error(self, e):
679679
:param Exception e: the raised Exception object
680680
681681
"""
682-
got_request_exception.send(current_app._get_current_object(), exception=e)
683-
684682
# When propagate_exceptions is set, do not return the exception to the
685683
# client if a handler is configured for the exception.
686684
if (
@@ -710,6 +708,10 @@ def handle_error(self, e):
710708
)
711709
break
712710
else:
711+
# Flask docs say: "This signal is not sent for HTTPException or other exceptions that have error handlers
712+
# registered, unless the exception was raised from an error handler."
713+
got_request_exception.send(current_app._get_current_object(), exception=e)
714+
713715
if isinstance(e, HTTPException):
714716
code = HTTPStatus(e.code)
715717
if include_message_in_response:

tests/test_errors.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,27 @@ def record(sender, exception):
444444
finally:
445445
got_request_exception.disconnect(record, app)
446446

447+
def test_handle_error_signal_does_not_call_got_request_exception(self, app):
448+
api = restx.Api(app)
449+
450+
exception = BadRequest()
451+
452+
recorded = []
453+
454+
def record(sender, exception):
455+
recorded.append(exception)
456+
457+
@api.errorhandler(BadRequest)
458+
def handle_bad_request(error):
459+
return {"message": str(error), "value": "test"}, 400
460+
461+
got_request_exception.connect(record, app)
462+
try:
463+
api.handle_error(exception)
464+
assert len(recorded) == 0
465+
finally:
466+
got_request_exception.disconnect(record, app)
467+
447468
def test_handle_error(self, app):
448469
api = restx.Api(app)
449470

0 commit comments

Comments
 (0)