Skip to content

Commit aa54b5c

Browse files
committed
camel the item
1 parent a94de84 commit aa54b5c

File tree

4 files changed

+46
-26
lines changed

4 files changed

+46
-26
lines changed

sentry_sdk/_types.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,17 @@ class SDKInfo(TypedDict):
207207
]
208208

209209
Hint = Dict[str, Any]
210-
Log = Dict[str, Any]
210+
Log = TypedDict(
211+
"Log",
212+
{
213+
"severity_text": str,
214+
"severity_number": int,
215+
"body": str,
216+
"attributes": dict[str, str | bool | float | int],
217+
"time_unix_nano": int,
218+
"trace_id": Optional[str],
219+
},
220+
)
211221

212222
Breadcrumb = Dict[str, Any]
213223
BreadcrumbHint = Dict[str, Any]

sentry_sdk/client.py

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
from typing import Union
5858
from typing import TypeVar
5959

60-
from sentry_sdk._types import Event, Hint, SDKInfo
60+
from sentry_sdk._types import Event, Hint, SDKInfo, Log
6161
from sentry_sdk.integrations import Integration
6262
from sentry_sdk.metrics import MetricsAggregator
6363
from sentry_sdk.scope import Scope
@@ -862,17 +862,6 @@ def capture_log(self, scope, severity_text, severity_number, template, **kwargs)
862862
"sent_at": format_timestamp(datetime.now(timezone.utc)),
863863
} # type: dict[str, object]
864864

865-
def format_attribute(key: str, val: int | float | str | bool):
866-
if isinstance(val, int):
867-
return {"key": key, "value": {"int_value": val}}
868-
if isinstance(val, str):
869-
return {"key": key, "value": {"string_value": val}}
870-
if isinstance(val, float):
871-
return {"key": key, "value": {"double_value": val}}
872-
if isinstance(val, bool):
873-
return {"key": key, "value": {"bool_value": val}}
874-
return {"key": key, "value": {"string_value": json.dumps(val)}}
875-
876865
attrs = {
877866
"sentry.message.template": template,
878867
}
@@ -885,6 +874,7 @@ def format_attribute(key: str, val: int | float | str | bool):
885874
for k, v in kwargs.items():
886875
attrs[f"sentry.message.parameters.{k}"] = v
887876

877+
# type: Log
888878
log = {
889879
"severity_text": severity_text,
890880
"severity_number": severity_number,
@@ -901,20 +891,40 @@ def format_attribute(key: str, val: int | float | str | bool):
901891
before_send_log = self.options.get("before_send_log")
902892
if before_send_log is not None:
903893
log = before_send_log(log)
894+
if log is None:
895+
return
904896

905-
# convert to otel form - otel_log has a different schema than just 'log'
906-
log["body"] = {"string_value": log["body"]}
907-
log["attributes"] = [
908-
format_attribute(k, v) for (k, v) in log["attributes"].items()
909-
]
910-
911-
envelope.add_log(log) # TODO: batch these
897+
def format_attribute(key, val):
898+
# type: (str, int | float | str | bool) -> Any
899+
if isinstance(val, int):
900+
return {"key": key, "value": {"intValue": val}}
901+
if isinstance(val, str):
902+
return {"key": key, "value": {"stringValue": val}}
903+
if isinstance(val, float):
904+
return {"key": key, "value": {"doubleValue": val}}
905+
if isinstance(val, bool):
906+
return {"key": key, "value": {"boolValue": val}}
907+
return {"key": key, "value": {"stringValue": json.dumps(val)}}
908+
909+
otel_log = {
910+
"severityText": log["severity_text"],
911+
"severityNumber": log["severity_number"],
912+
"body": {"stringValue": log["body"]},
913+
"timeUnixNano": str(log["time_unix_nano"]),
914+
}
915+
if isinstance((attrs := log["attributes"]), dict):
916+
otel_log["attributes"] = [
917+
format_attribute(k, v) for (k, v) in attrs.items()
918+
]
919+
if "trace_id" in log:
920+
otel_log["traceId"] = log["trace_id"]
921+
922+
envelope.add_log(otel_log) # TODO: batch these
912923
if self.spotlight:
913924
self.spotlight.capture_envelope(envelope)
914925

915926
if self.transport is not None:
916927
self.transport.capture_envelope(envelope)
917-
return None
918928

919929
def capture_session(
920930
self, session # type: Session

sentry_sdk/envelope.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from typing import List
1616
from typing import Iterator
1717

18-
from sentry_sdk._types import Event, EventDataCategory, Log
18+
from sentry_sdk._types import Event, EventDataCategory
1919

2020

2121
def parse_json(data):
@@ -103,7 +103,7 @@ def add_sessions(
103103
self.add_item(Item(payload=PayloadRef(json=sessions), type="sessions"))
104104

105105
def add_log(
106-
self, log # type: Log
106+
self, log # type: Any
107107
):
108108
# type: (...) -> None
109109
self.add_item(Item(payload=PayloadRef(json=log), type="otel_log"))

sentry_sdk/logger.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
# NOTE: this is the logger sentry exposes to users, not some generic logger.
22
import functools
3-
from typing import Any, Optional
3+
from typing import Any
44

55
from sentry_sdk import get_client, get_current_scope
66

77

88
def capture_log(severity_text, severity_number, template, **kwargs):
9-
# type: (str, int, str, **Any) -> Optional[str]
9+
# type: (str, int, str, **Any) -> None
1010
client = get_client()
1111
scope = get_current_scope()
12-
return client.capture_log(scope, severity_text, severity_number, template, **kwargs)
12+
client.capture_log(scope, severity_text, severity_number, template, **kwargs)
1313

1414

1515
trace = functools.partial(capture_log, "trace", 1)

0 commit comments

Comments
 (0)