Skip to content

Commit 0784b92

Browse files
sentrivanaclaude
andauthored
ref(tests): Replace custom envelopes_to_x helpers with capture_items (#6233)
We had multiple `envelopes_to_x` helpers around in tests for unwrapping metrics, logs, and spans. Replace them all with `capture_items`, which has the added benefit of being more true to the actual payload leaving the SDK, unlike `envelopes_to_x`, which used to modify some fields (setting them to `None` if they were not present, for instance). Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent bd567bd commit 0784b92

7 files changed

Lines changed: 332 additions & 425 deletions

File tree

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ def append_envelope(envelope):
358358
if types and item.type not in types:
359359
continue
360360

361-
if item.type in ("metric", "log", "span"):
361+
if item.type in ("trace_metric", "log", "span"):
362362
for i in item.payload.json["items"]:
363363
t = {k: v for k, v in i.items() if k != "attributes"}
364364
t["attributes"] = {

tests/integrations/logging/test_logging.py

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
unignore_logger,
1313
unignore_logger_for_sentry_logs,
1414
)
15-
from tests.test_logs import envelopes_to_logs
1615

1716
other_logger = logging.getLogger("testfoo")
1817
logger = logging.getLogger(__name__)
@@ -271,28 +270,29 @@ def test_ignore_logger_wildcard(sentry_init, capture_events, request):
271270
assert event["logentry"]["formatted"] == "hi"
272271

273272

274-
def test_ignore_logger_does_not_affect_sentry_logs(
275-
sentry_init, capture_envelopes, request
276-
):
273+
def test_ignore_logger_does_not_affect_sentry_logs(sentry_init, capture_items, request):
277274
"""ignore_logger should suppress events/breadcrumbs but not Sentry Logs."""
278275
sentry_init(enable_logs=True)
279-
envelopes = capture_envelopes()
276+
items = capture_items("log")
280277

281278
ignore_logger("testfoo")
282279
request.addfinalizer(lambda: unignore_logger("testfoo"))
283280

284281
other_logger.error("hi")
285282
get_client().flush()
286283

287-
logs = envelopes_to_logs(envelopes)
284+
logs = [item.payload for item in items]
288285
assert len(logs) == 1
289286
assert logs[0]["body"] == "hi"
290287

291288

292-
def test_ignore_logger_for_sentry_logs(sentry_init, capture_envelopes, request):
289+
def test_ignore_logger_for_sentry_logs(
290+
sentry_init, capture_envelopes, capture_items, request
291+
):
293292
"""ignore_logger_for_sentry_logs should suppress Sentry Logs but not events."""
294293
sentry_init(enable_logs=True)
295294
envelopes = capture_envelopes()
295+
items = capture_items("log")
296296

297297
ignore_logger_for_sentry_logs("testfoo")
298298
request.addfinalizer(lambda: unignore_logger_for_sentry_logs("testfoo"))
@@ -305,7 +305,7 @@ def test_ignore_logger_for_sentry_logs(sentry_init, capture_envelopes, request):
305305
assert len(event_envelopes) == 1
306306

307307
# But no Sentry Logs
308-
logs = envelopes_to_logs(envelopes)
308+
logs = [item.payload for item in items]
309309
assert len(logs) == 0
310310

311311

@@ -347,18 +347,18 @@ def test_logging_dictionary_args(sentry_init, capture_events):
347347
assert event["logentry"]["params"] == {"foo": "bar", "bar": "baz"}
348348

349349

350-
def test_sentry_logs_warning(sentry_init, capture_envelopes):
350+
def test_sentry_logs_warning(sentry_init, capture_items):
351351
"""
352352
The python logger module should create 'warn' sentry logs if the flag is on.
353353
"""
354354
sentry_init(enable_logs=True)
355-
envelopes = capture_envelopes()
355+
items = capture_items("log")
356356

357357
python_logger = logging.Logger("test-logger")
358358
python_logger.warning("this is %s a template %s", "1", "2")
359359

360360
get_client().flush()
361-
logs = envelopes_to_logs(envelopes)
361+
logs = [item.payload for item in items]
362362
attrs = logs[0]["attributes"]
363363
assert attrs["sentry.message.template"] == "this is %s a template %s"
364364
assert "code.file.path" in attrs
@@ -368,8 +368,8 @@ def test_sentry_logs_warning(sentry_init, capture_envelopes):
368368
assert attrs["sentry.message.parameter.0"] == "1"
369369
assert attrs["sentry.message.parameter.1"] == "2"
370370
assert attrs["sentry.origin"] == "auto.log.stdlib"
371-
assert logs[0]["severity_number"] == 13
372-
assert logs[0]["severity_text"] == "warn"
371+
assert logs[0]["attributes"]["sentry.severity_number"] == 13
372+
assert logs[0]["attributes"]["sentry.severity_text"] == "warn"
373373

374374

375375
def test_sentry_logs_debug(sentry_init, capture_envelopes):
@@ -404,12 +404,13 @@ def test_no_log_infinite_loop(sentry_init, capture_envelopes):
404404
assert len(envelopes) == 1
405405

406406

407-
def test_logging_errors(sentry_init, capture_envelopes):
407+
def test_logging_errors(sentry_init, capture_envelopes, capture_items):
408408
"""
409409
The python logger module should be able to log errors without erroring
410410
"""
411411
sentry_init(enable_logs=True)
412412
envelopes = capture_envelopes()
413+
items = capture_items("log")
413414

414415
python_logger = logging.Logger("test-logger")
415416
python_logger.error(Exception("test exc 1"))
@@ -421,13 +422,13 @@ def test_logging_errors(sentry_init, capture_envelopes):
421422
error_event_2 = envelopes[1].items[0].payload.json
422423
assert error_event_2["level"] == "error"
423424

424-
logs = envelopes_to_logs(envelopes)
425-
assert logs[0]["severity_text"] == "error"
425+
logs = [item.payload for item in items]
426+
assert logs[0]["attributes"]["sentry.severity_text"] == "error"
426427
assert "sentry.message.template" not in logs[0]["attributes"]
427428
assert "sentry.message.parameter.0" not in logs[0]["attributes"]
428429
assert "code.line.number" in logs[0]["attributes"]
429430

430-
assert logs[1]["severity_text"] == "error"
431+
assert logs[1]["attributes"]["sentry.severity_text"] == "error"
431432
assert logs[1]["attributes"]["sentry.message.template"] == "error is %s"
432433
assert logs[1]["attributes"]["sentry.message.parameter.0"] in (
433434
"Exception('test exc 2')",
@@ -438,15 +439,15 @@ def test_logging_errors(sentry_init, capture_envelopes):
438439
assert len(logs) == 2
439440

440441

441-
def test_log_strips_project_root(sentry_init, capture_envelopes):
442+
def test_log_strips_project_root(sentry_init, capture_items):
442443
"""
443444
The python logger should strip project roots from the log record path
444445
"""
445446
sentry_init(
446447
enable_logs=True,
447448
project_root="/custom/test",
448449
)
449-
envelopes = capture_envelopes()
450+
items = capture_items("log")
450451

451452
python_logger = logging.Logger("test-logger")
452453
python_logger.handle(
@@ -462,18 +463,18 @@ def test_log_strips_project_root(sentry_init, capture_envelopes):
462463
)
463464
get_client().flush()
464465

465-
logs = envelopes_to_logs(envelopes)
466+
logs = [item.payload for item in items]
466467
assert len(logs) == 1
467468
attrs = logs[0]["attributes"]
468469
assert attrs["code.file.path"] == "blah/path.py"
469470

470471

471-
def test_logger_with_all_attributes(sentry_init, capture_envelopes):
472+
def test_logger_with_all_attributes(sentry_init, capture_items):
472473
"""
473474
The python logger should be able to log all attributes, including extra data.
474475
"""
475476
sentry_init(enable_logs=True)
476-
envelopes = capture_envelopes()
477+
items = capture_items("log")
477478

478479
python_logger = logging.Logger("test-logger")
479480
python_logger.warning(
@@ -483,7 +484,7 @@ def test_logger_with_all_attributes(sentry_init, capture_envelopes):
483484
)
484485
get_client().flush()
485486

486-
logs = envelopes_to_logs(envelopes)
487+
logs = [item.payload for item in items]
487488

488489
assert "span_id" in logs[0]
489490
assert logs[0]["span_id"] is None
@@ -544,12 +545,12 @@ def test_logger_with_all_attributes(sentry_init, capture_envelopes):
544545
}
545546

546547

547-
def test_sentry_logs_named_parameters(sentry_init, capture_envelopes):
548+
def test_sentry_logs_named_parameters(sentry_init, capture_items):
548549
"""
549550
The python logger module should capture named parameters from dictionary arguments in Sentry logs.
550551
"""
551552
sentry_init(enable_logs=True)
552-
envelopes = capture_envelopes()
553+
items = capture_items("log")
553554

554555
python_logger = logging.Logger("test-logger")
555556
python_logger.info(
@@ -564,7 +565,7 @@ def test_sentry_logs_named_parameters(sentry_init, capture_envelopes):
564565
)
565566

566567
get_client().flush()
567-
logs = envelopes_to_logs(envelopes)
568+
logs = [item.payload for item in items]
568569

569570
assert len(logs) == 1
570571
attrs = logs[0]["attributes"]
@@ -585,16 +586,16 @@ def test_sentry_logs_named_parameters(sentry_init, capture_envelopes):
585586
# Check other standard attributes
586587
assert attrs["logger.name"] == "test-logger"
587588
assert attrs["sentry.origin"] == "auto.log.stdlib"
588-
assert logs[0]["severity_number"] == 9 # info level
589-
assert logs[0]["severity_text"] == "info"
589+
assert logs[0]["attributes"]["sentry.severity_number"] == 9 # info level
590+
assert logs[0]["attributes"]["sentry.severity_text"] == "info"
590591

591592

592-
def test_sentry_logs_named_parameters_complex_values(sentry_init, capture_envelopes):
593+
def test_sentry_logs_named_parameters_complex_values(sentry_init, capture_items):
593594
"""
594595
The python logger module should handle complex values in named parameters using safe_repr.
595596
"""
596597
sentry_init(enable_logs=True)
597-
envelopes = capture_envelopes()
598+
items = capture_items("log")
598599

599600
python_logger = logging.Logger("test-logger")
600601
complex_object = {"nested": {"data": [1, 2, 3]}, "tuple": (4, 5, 6)}
@@ -607,7 +608,7 @@ def test_sentry_logs_named_parameters_complex_values(sentry_init, capture_envelo
607608
)
608609

609610
get_client().flush()
610-
logs = envelopes_to_logs(envelopes)
611+
logs = [item.payload for item in items]
611612

612613
assert len(logs) == 1
613614
attrs = logs[0]["attributes"]
@@ -623,18 +624,18 @@ def test_sentry_logs_named_parameters_complex_values(sentry_init, capture_envelo
623624
assert "data" in complex_param
624625

625626

626-
def test_sentry_logs_no_parameters_no_template(sentry_init, capture_envelopes):
627+
def test_sentry_logs_no_parameters_no_template(sentry_init, capture_items):
627628
"""
628629
There shouldn't be a template if there are no parameters.
629630
"""
630631
sentry_init(enable_logs=True)
631-
envelopes = capture_envelopes()
632+
items = capture_items("log")
632633

633634
python_logger = logging.Logger("test-logger")
634635
python_logger.warning("Warning about something without any parameters.")
635636

636637
get_client().flush()
637-
logs = envelopes_to_logs(envelopes)
638+
logs = [item.payload for item in items]
638639

639640
assert len(logs) == 1
640641

0 commit comments

Comments
 (0)