Skip to content

Commit 1da8611

Browse files
committed
fix: Prepare for timestamps in breadcrumbs
1 parent c109117 commit 1da8611

File tree

5 files changed

+28
-15
lines changed

5 files changed

+28
-15
lines changed

README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,21 @@ docs](./docs/logging.md) for more information. You can, however, also create
8282
breadcrumbs manually:
8383

8484
sentry_sdk.add_breadcrumb(
85-
# ty="log",
86-
# level="debug",
85+
timestamp=datetime.datetime.now(),
86+
ty="log",
87+
level="debug",
88+
# message="hi",
8789
# category="myapp.models",
88-
message="hi"
8990
})
9091

9192
You can also pass a callback to `add_breadcrumb` like so:
9293

9394
sentry_sdk.add_breadcrumb(lambda: {
94-
# "ty": "log",
95-
# "level": "debug",
95+
"timestamp": datetime.datetime.now(),
96+
"ty": "log",
97+
"level": "debug",
98+
# "message": "hi",
9699
# "category": "myapp.models",
97-
"message": "hi"
98100
})
99101

100102
The callback will only be called if a sentry client is configured.

sentry_sdk/client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from .utils import Dsn, SkipEvent, ContextVar
77
from .transport import Transport
88
from .consts import DEFAULT_OPTIONS, SDK_INFO
9-
from .event import strip_event, flatten_metadata, Event
9+
from .event import strip_event, flatten_metadata, convert_types, Event
1010

1111

1212
NO_DSN = object()
@@ -97,6 +97,7 @@ def _prepare_event(self, event, scope):
9797

9898
event = strip_event(event)
9999
event = flatten_metadata(event)
100+
event = convert_types(event)
100101
return event
101102

102103
def _check_should_capture(self, event):

sentry_sdk/event.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import uuid
2-
from datetime import datetime
2+
import datetime
33

44
from collections import Mapping, Sequence
55

66
from .utils import exceptions_from_error_tuple
77
from ._compat import text_type
88

99

10-
def datetime_to_json(dt):
10+
def _datetime_to_json(dt):
1111
return dt.strftime("%Y-%m-%dT%H:%M:%SZ")
1212

1313

@@ -17,7 +17,7 @@ class Event(Mapping):
1717
def __init__(self, data={}):
1818
self._data = {
1919
"event_id": uuid.uuid4().hex,
20-
"timestamp": datetime_to_json(datetime.utcnow()),
20+
"timestamp": datetime.datetime.utcnow(),
2121
"level": "error",
2222
}
2323

@@ -124,6 +124,16 @@ def strip_frame(frame):
124124
return frame, ({"vars": meta} if meta is not None else None)
125125

126126

127+
def convert_types(obj):
128+
if isinstance(obj, (datetime.datetime, datetime.date)):
129+
return _datetime_to_json(obj)
130+
if isinstance(obj, Mapping):
131+
return {k: convert_types(v) for k, v in obj.items()}
132+
if isinstance(obj, Sequence) and not isinstance(obj, (text_type, bytes)):
133+
return [convert_types(v) for v in obj]
134+
return obj
135+
136+
127137
def strip_databag(obj, remaining_depth=20):
128138
assert not isinstance(obj, bytes), "bytes should have been normalized before"
129139
if remaining_depth <= 0:

sentry_sdk/integrations/logging.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from sentry_sdk import get_current_hub, capture_event, add_breadcrumb
88
from sentry_sdk.utils import to_string, skip_internal_frames
9-
from sentry_sdk.event import Event, datetime_to_json
9+
from sentry_sdk.event import Event
1010
from sentry_sdk.hub import _internal_exceptions
1111

1212
from . import Integration
@@ -52,9 +52,7 @@ def _breadcrumb_from_record(self, record):
5252
"level": self._logging_to_event_level(record.levelname),
5353
"category": record.name,
5454
"message": record.message,
55-
"timestamp": datetime_to_json(
56-
datetime.datetime.fromtimestamp(record.created)
57-
),
55+
"timestamp": datetime.datetime.fromtimestamp(record.created),
5856
}
5957

6058
def _emit(self, record):

tests/test_client.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import pytest
44
import sys
55
import subprocess
6+
from datetime import datetime
67
from textwrap import dedent
7-
from sentry_sdk import Hub, Client, configure_scope, capture_message
8+
from sentry_sdk import Hub, Client, configure_scope, capture_message, add_breadcrumb
89
from sentry_sdk.hub import HubMeta
910
from sentry_sdk.transport import Transport
1011
from sentry_sdk.utils import Dsn
@@ -139,6 +140,7 @@ def test_transport_works(sentry_init, httpserver, request, capsys):
139140
Hub.current.bind_client(client)
140141
request.addfinalizer(lambda: Hub.current.bind_client(None))
141142

143+
add_breadcrumb(level="info", message="i like bread", timestamp=datetime.now())
142144
capture_message("löl")
143145
client.drain_events()
144146

0 commit comments

Comments
 (0)