Skip to content

Commit

Permalink
Call notify_honeybadger in finally block
Browse files Browse the repository at this point in the history
  • Loading branch information
sayanarijit committed Jul 25, 2024
1 parent d299efe commit 28f24f8
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 20 deletions.
4 changes: 3 additions & 1 deletion apphelpers/rest/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ def notify_honeybadger(honeybadger, error, func, args, kwargs):
},
)
except HTTPError as e:
if e.response.status_code != 403:
if e.response.status_code == 403:
# Ignore 403 Forbidden errors. We get alerted by HB anyway.
pass
else:
raise e
37 changes: 25 additions & 12 deletions apphelpers/rest/fastapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,40 +58,53 @@ def wrapper(f):

@wraps(f)
async def async_f_wrapped(*args, **kw):
err_to_report = None
try:
return await f(*args, **kw)
except BaseError as e:
if e.report:
notify_honeybadger(
honeybadger=hb, error=e, func=f, args=args, kwargs=kw
)
err_to_report = e
raise e
except Exception as e:
notify_honeybadger(
honeybadger=hb, error=e, func=f, args=args, kwargs=kw
)
err_to_report = e
raise e
finally:
if err_to_report:
notify_honeybadger(
honeybadger=hb,
error=err_to_report,
func=f,
args=args,
kwargs=kw,
)

return async_f_wrapped

else:

@wraps(f)
def f_wrapped(*args, **kw):
err_to_report = None
try:
return f(*args, **kw)
except BaseError as e:
if e.report:
notify_honeybadger(
honeybadger=hb, error=e, func=f, args=args, kwargs=kw
)
err_to_report = e
raise e
except Exception as e:
notify_honeybadger(
honeybadger=hb, error=e, func=f, args=args, kwargs=kw
)
err_to_report = e
raise e

finally:
if err_to_report:
notify_honeybadger(
honeybadger=hb,
error=err_to_report,
func=f,
args=args,
kwargs=kw,
)

return f_wrapped

return wrapper
Expand Down
19 changes: 12 additions & 7 deletions apphelpers/rest/hug.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,20 +45,25 @@ def honeybadger_wrapper(hb):
def wrapper(f):
@wraps(f)
def f_wrapped(*args, **kw):
err_to_report = None
try:
return f(*args, **kw)
except BaseError as e:
if e.report:
notify_honeybadger(
honeybadger=hb, error=e, func=f, args=args, kwargs=kw
)
err_to_report = e
raise e

except Exception as e:
notify_honeybadger(
honeybadger=hb, error=e, func=f, args=args, kwargs=kw
)
err_to_report = e
raise e
finally:
if err_to_report:
notify_honeybadger(
honeybadger=hb,
error=err_to_report,
func=f,
args=args,
kwargs=kw,
)

return f_wrapped

Expand Down
8 changes: 8 additions & 0 deletions fastapi_tests/test_rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,3 +367,11 @@ async def worst_endpoint(foo):
with pytest.raises(RuntimeError):
asyncio.run(wrapped_worst_endpoint(1))
assert mocked_honeybadger.notify.call_count == 2

mocked_honeybadger.notify.side_effect = requests.exceptions.HTTPError(
response=mock.MagicMock(status_code=403)
)
with pytest.raises(RuntimeError) as e:
asyncio.run(wrapped_worst_endpoint(1))
assert "HttpError" in str(e)
assert mocked_honeybadger.notify.call_count == 3
8 changes: 8 additions & 0 deletions tests/test_rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -364,3 +364,11 @@ def worst_endpoint(foo):
with pytest.raises(RuntimeError):
wrapped_worst_endpoint(1)
assert mocked_honeybadger.notify.call_count == 2

mocked_honeybadger.notify.side_effect = requests.exceptions.HTTPError(
response=mock.MagicMock(status_code=403)
)
with pytest.raises(RuntimeError) as e:
wrapped_worst_endpoint(1)
assert "HttpError" in str(e)
assert mocked_honeybadger.notify.call_count == 3

0 comments on commit 28f24f8

Please sign in to comment.