File tree Expand file tree Collapse file tree 2 files changed +91
-0
lines changed
tests/integrations/serverless Expand file tree Collapse file tree 2 files changed +91
-0
lines changed Original file line number Diff line number Diff line change 1+ import functools
2+ import sys
3+
4+ from sentry_sdk import Hub
5+ from sentry_sdk .utils import event_from_exception
6+ from sentry_sdk ._compat import reraise
7+
8+
9+ def serverless_function (f = None , flush = True ):
10+ def wrapper (f ):
11+ @functools .wraps (f )
12+ def inner (* args , ** kwargs ):
13+ try :
14+ return f (* args , ** kwargs )
15+ except Exception :
16+ _capture_and_reraise ()
17+ finally :
18+ if flush :
19+ _flush_client ()
20+
21+ return inner
22+
23+ if f is None :
24+ return wrapper
25+ else :
26+ return wrapper (f )
27+
28+
29+ def _capture_and_reraise ():
30+ exc_info = sys .exc_info ()
31+ hub = Hub .current
32+ if hub is not None and hub .client is not None :
33+ event , hint = event_from_exception (
34+ exc_info ,
35+ client_options = hub .client .options ,
36+ mechanism = {"type" : "serverless" , "handled" : False },
37+ )
38+ hub .capture_event (event , hint = hint )
39+
40+ reraise (* exc_info )
41+
42+
43+ def _flush_client ():
44+ hub = Hub .current
45+ if hub is not None :
46+ hub .flush ()
Original file line number Diff line number Diff line change 1+ import pytest
2+
3+ from sentry_sdk .integrations .serverless import serverless_function
4+
5+
6+ def test_basic (sentry_init , capture_exceptions , monkeypatch ):
7+ sentry_init ()
8+ exceptions = capture_exceptions ()
9+
10+ flush_calls = []
11+
12+ monkeypatch .setattr ("sentry_sdk.Hub.current.flush" , lambda : flush_calls .append (1 ))
13+
14+ @serverless_function
15+ def foo ():
16+ 1 / 0
17+
18+ with pytest .raises (ZeroDivisionError ):
19+ foo ()
20+
21+ exception , = exceptions
22+ assert isinstance (exception , ZeroDivisionError )
23+
24+ assert flush_calls == [1 ]
25+
26+
27+ def test_flush_disabled (sentry_init , capture_exceptions , monkeypatch ):
28+ sentry_init ()
29+ exceptions = capture_exceptions ()
30+
31+ flush_calls = []
32+
33+ monkeypatch .setattr ("sentry_sdk.Hub.current.flush" , lambda : flush_calls .append (1 ))
34+
35+ @serverless_function (flush = False )
36+ def foo ():
37+ 1 / 0
38+
39+ with pytest .raises (ZeroDivisionError ):
40+ foo ()
41+
42+ exception , = exceptions
43+ assert isinstance (exception , ZeroDivisionError )
44+
45+ assert flush_calls == []
You can’t perform that action at this time.
0 commit comments