Skip to content

Commit e808656

Browse files
authored
feat: Addded before_breadcrumb (#43)
1 parent 6be019b commit e808656

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

sentry_sdk/consts.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"ignore_errors": [],
2525
"request_bodies": "medium",
2626
"before_send": None,
27+
"before_breadcrumb": None,
2728
"debug": False,
2829
}
2930

sentry_sdk/hub.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import sys
22
import copy
3+
from datetime import datetime
34
from contextlib import contextmanager
45

56
from ._compat import with_metaclass
@@ -158,6 +159,16 @@ def add_breadcrumb(self, *args, **kwargs):
158159
crumb = args[0]()
159160
else:
160161
crumb = dict(*args, **kwargs)
162+
if crumb is None:
163+
return
164+
165+
if crumb.get("timestamp") is None:
166+
crumb["timestamp"] = datetime.utcnow()
167+
if crumb.get("type") is None:
168+
crumb["type"] = "default"
169+
170+
if client.options["before_breadcrumb"] is not None:
171+
crumb = client.options["before_breadcrumb"](crumb)
161172

162173
if crumb is not None:
163174
scope._breadcrumbs.append(crumb)

tests/test_basics.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
from sentry_sdk import configure_scope, capture_exception, last_event_id, Hub
1+
from sentry_sdk import (
2+
configure_scope,
3+
capture_exception,
4+
add_breadcrumb,
5+
last_event_id,
6+
Hub,
7+
)
28

39

410
def test_processors(sentry_init, capture_events):
@@ -38,3 +44,43 @@ def test_event_id(sentry_init, capture_events):
3844
assert event["event_id"] == event_id
3945
assert last_event_id() == event_id
4046
assert Hub.current.last_event_id() == event_id
47+
48+
49+
def test_option_callback(sentry_init, capture_events):
50+
drop_events = False
51+
drop_breadcrumbs = False
52+
53+
def before_send(event):
54+
if not drop_events:
55+
event["extra"] = {"foo": "bar"}
56+
return event
57+
58+
def before_breadcrumb(crumb):
59+
if not drop_breadcrumbs:
60+
crumb["data"] = {"foo": "bar"}
61+
return crumb
62+
63+
sentry_init(before_send=before_send, before_breadcrumb=before_breadcrumb)
64+
events = capture_events()
65+
66+
def do_this():
67+
add_breadcrumb(message="Hello")
68+
try:
69+
raise ValueError("aha!")
70+
except Exception:
71+
capture_exception()
72+
73+
do_this()
74+
drop_breadcrumbs = True
75+
do_this()
76+
drop_events = True
77+
do_this()
78+
79+
normal, no_crumbs = events
80+
81+
assert normal["exception"]["values"][0]["type"] == "ValueError"
82+
crumb, = normal["breadcrumbs"]
83+
assert "timestamp" in crumb
84+
assert crumb["message"] == "Hello"
85+
assert crumb["data"] == {"foo": "bar"}
86+
assert crumb["type"] == "default"

0 commit comments

Comments
 (0)