Skip to content

Commit 9aeea47

Browse files
authored
ref: Use deque for breadcrumbs (#71)
* ref: Use deque for breadcrumbs * fix: Python 2 compat
1 parent 838fa87 commit 9aeea47

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

sentry_sdk/hub.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ def add_breadcrumb(self, crumb=None, hint=None, **kwargs):
206206
else:
207207
logger.info("before breadcrumb dropped breadcrumb (%s)", original_crumb)
208208
while len(scope._breadcrumbs) > client.options["max_breadcrumbs"]:
209-
scope._breadcrumbs.pop(0)
209+
scope._breadcrumbs.popleft()
210210

211211
def push_scope(self, callback=None):
212212
"""Pushes a new layer on the scope stack. Returns a context manager

sentry_sdk/scope.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from copy import copy
2+
from collections import deque
3+
14
from sentry_sdk.utils import logger, capture_internal_exceptions
25

36

@@ -84,7 +87,7 @@ def clear(self):
8487
self._contexts = {}
8588
self._extras = {}
8689

87-
self._breadcrumbs = []
90+
self._breadcrumbs = deque()
8891

8992
def add_event_processor(self, func):
9093
""""Register a scope local event processor on the scope.
@@ -170,7 +173,7 @@ def __copy__(self):
170173
rv._contexts = dict(self._contexts)
171174
rv._extras = dict(self._extras)
172175

173-
rv._breadcrumbs = list(self._breadcrumbs)
176+
rv._breadcrumbs = copy(self._breadcrumbs)
174177
rv._event_processors = list(self._event_processors)
175178
rv._error_processors = list(self._error_processors)
176179

tests/test_basics.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,18 +141,32 @@ def test_push_scope_null_client(sentry_init, capture_events):
141141
assert len(events) == 0
142142

143143

144-
def test_breadcrumbs_overflow(sentry_init, capture_events):
144+
def test_breadcrumbs(sentry_init, capture_events):
145145
sentry_init(max_breadcrumbs=10)
146+
events = capture_events()
146147

147148
for i in range(20):
148149
add_breadcrumb(
149150
category="auth", message="Authenticated user %s" % i, level="info"
150151
)
151152

152-
events = capture_events()
153-
154153
capture_exception(ValueError())
155-
156154
event, = events
157155

158156
assert len(event["breadcrumbs"]) == 10
157+
assert "user 10" in event["breadcrumbs"][0]["message"]
158+
assert "user 19" in event["breadcrumbs"][-1]["message"]
159+
160+
del events[:]
161+
162+
for i in range(2):
163+
add_breadcrumb(
164+
category="auth", message="Authenticated user %s" % i, level="info"
165+
)
166+
167+
with configure_scope() as scope:
168+
scope.clear()
169+
170+
capture_exception(ValueError())
171+
event, = events
172+
assert len(event["breadcrumbs"]) == 0

0 commit comments

Comments
 (0)