iii-sdk 0.11.0.dev3__tar.gz → 0.11.0.dev5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/PKG-INFO +3 -6
  2. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/pyproject.toml +3 -7
  3. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/iii.py +25 -45
  4. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/logger.py +2 -5
  5. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/telemetry.py +62 -122
  6. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/.gitignore +0 -0
  7. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/README.md +0 -0
  8. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/__init__.py +0 -0
  9. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/channels.py +0 -0
  10. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/format_utils.py +0 -0
  11. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/iii_constants.py +0 -0
  12. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/iii_types.py +0 -0
  13. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/otel_worker_gauges.py +0 -0
  14. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/state.py +0 -0
  15. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/stream.py +0 -0
  16. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/telemetry_exporters.py +0 -0
  17. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/telemetry_types.py +0 -0
  18. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/triggers.py +0 -0
  19. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/types.py +0 -0
  20. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/utils.py +0 -0
  21. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/src/iii/worker_metrics.py +0 -0
  22. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/conftest.py +0 -0
  23. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_api_triggers.py +0 -0
  24. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_async_api.py +0 -0
  25. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_bridge.py +0 -0
  26. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_channel_close_delay.py +0 -0
  27. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_context_propagation.py +0 -0
  28. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_data_channels.py +0 -0
  29. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_format_utils.py +0 -0
  30. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_healthcheck.py +0 -0
  31. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_hold_process.py +0 -0
  32. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_http_external_functions_integration.py +0 -0
  33. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_iii_registration_dedup.py +0 -0
  34. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_init_api.py +0 -0
  35. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_invocation_exception.py +0 -0
  36. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_logger_function_ids.py +0 -0
  37. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_logger_otel.py +0 -0
  38. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_middleware.py +0 -0
  39. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_pubsub.py +0 -0
  40. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_queue_integration.py +0 -0
  41. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_rbac_workers.py +0 -0
  42. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_register_function_args.py +0 -0
  43. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_state.py +0 -0
  44. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_streams.py +0 -0
  45. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_streams_runtime_annotations.py +0 -0
  46. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_sync_api.py +0 -0
  47. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_telemetry.py +0 -0
  48. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_telemetry_exporters.py +0 -0
  49. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_telemetry_types.py +0 -0
  50. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_trace_helpers.py +0 -0
  51. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_trigger_metadata.py +0 -0
  52. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_utils.py +0 -0
  53. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/tests/test_worker_metrics.py +0 -0
  54. {iii_sdk-0.11.0.dev3 → iii_sdk-0.11.0.dev5}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iii-sdk
3
- Version: 0.11.0.dev3
3
+ Version: 0.11.0.dev5
4
4
  Summary: III SDK for Python
5
5
  Project-URL: Homepage, https://github.com/iii-hq/sdk
6
6
  Project-URL: Repository, https://github.com/iii-hq/sdk
@@ -14,6 +14,8 @@ Classifier: Programming Language :: Python :: 3.10
14
14
  Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
16
  Requires-Python: >=3.10
17
+ Requires-Dist: opentelemetry-api>=1.25
18
+ Requires-Dist: opentelemetry-sdk>=1.25
17
19
  Requires-Dist: pydantic>=2.0
18
20
  Requires-Dist: websockets>=12.0
19
21
  Provides-Extra: dev
@@ -21,15 +23,10 @@ Requires-Dist: aiohttp>=3.9; extra == 'dev'
21
23
  Requires-Dist: anyio>=4.0; extra == 'dev'
22
24
  Requires-Dist: griffe>=1.0; extra == 'dev'
23
25
  Requires-Dist: mypy>=1.8; extra == 'dev'
24
- Requires-Dist: opentelemetry-api>=1.25; extra == 'dev'
25
- Requires-Dist: opentelemetry-sdk>=1.25; extra == 'dev'
26
26
  Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
27
27
  Requires-Dist: pytest-cov>=6.0; extra == 'dev'
28
28
  Requires-Dist: pytest>=8.0; extra == 'dev'
29
29
  Requires-Dist: ruff>=0.2; extra == 'dev'
30
- Provides-Extra: otel
31
- Requires-Dist: opentelemetry-api>=1.25; extra == 'otel'
32
- Requires-Dist: opentelemetry-sdk>=1.25; extra == 'otel'
33
30
  Description-Content-Type: text/markdown
34
31
 
35
32
  # iii-sdk
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "iii-sdk"
7
- version = "0.11.0.dev3"
7
+ version = "0.11.0.dev5"
8
8
  description = "III SDK for Python"
9
9
  authors = [{ name = "III" }]
10
10
  license = { text = "Apache-2.0" }
@@ -22,6 +22,8 @@ classifiers = [
22
22
  dependencies = [
23
23
  "websockets>=12.0",
24
24
  "pydantic>=2.0",
25
+ "opentelemetry-api>=1.25",
26
+ "opentelemetry-sdk>=1.25",
25
27
  ]
26
28
 
27
29
  [project.urls]
@@ -29,10 +31,6 @@ Homepage = "https://github.com/iii-hq/sdk"
29
31
  Repository = "https://github.com/iii-hq/sdk"
30
32
 
31
33
  [project.optional-dependencies]
32
- otel = [
33
- "opentelemetry-api>=1.25",
34
- "opentelemetry-sdk>=1.25",
35
- ]
36
34
  dev = [
37
35
  "pytest>=8.0",
38
36
  "pytest-asyncio>=0.23",
@@ -41,8 +39,6 @@ dev = [
41
39
  "aiohttp>=3.9",
42
40
  "mypy>=1.8",
43
41
  "ruff>=0.2",
44
- "opentelemetry-api>=1.25",
45
- "opentelemetry-sdk>=1.25",
46
42
  "griffe>=1.0",
47
43
  ]
48
44
 
@@ -186,20 +186,17 @@ class III:
186
186
  from an async context.
187
187
  """
188
188
  self._running = True
189
- try:
190
- from .telemetry import attach_event_loop, init_otel
191
-
192
- loop = asyncio.get_running_loop()
193
- otel_cfg: OtelConfig | None = None
194
- if self._options.otel:
195
- if isinstance(self._options.otel, OtelConfig):
196
- otel_cfg = self._options.otel
197
- else:
198
- otel_cfg = OtelConfig(**self._options.otel)
199
- init_otel(config=otel_cfg, loop=loop)
200
- attach_event_loop(loop)
201
- except ImportError:
202
- log.debug("OpenTelemetry not available")
189
+ from .telemetry import attach_event_loop, init_otel
190
+
191
+ loop = asyncio.get_running_loop()
192
+ otel_cfg: OtelConfig | None = None
193
+ if self._options.otel:
194
+ if isinstance(self._options.otel, OtelConfig):
195
+ otel_cfg = self._options.otel
196
+ else:
197
+ otel_cfg = OtelConfig(**self._options.otel)
198
+ init_otel(config=otel_cfg, loop=loop)
199
+ attach_event_loop(loop)
203
200
  self._set_connection_state("connecting")
204
201
  await self._do_connect()
205
202
 
@@ -238,12 +235,9 @@ class III:
238
235
 
239
236
  self._set_connection_state("disconnected")
240
237
 
241
- try:
242
- from .telemetry import shutdown_otel_async
238
+ from .telemetry import shutdown_otel_async
243
239
 
244
- await shutdown_otel_async()
245
- except ImportError:
246
- log.debug("OpenTelemetry not available")
240
+ await shutdown_otel_async()
247
241
 
248
242
  # Schedule the event loop to stop on the next iteration so the
249
243
  # non-daemon background thread exits and the process can terminate.
@@ -418,26 +412,20 @@ class III:
418
412
  future.set_result(result)
419
413
 
420
414
  def _inject_traceparent(self) -> str | None:
421
- try:
422
- from opentelemetry import context as otel_context
423
- from opentelemetry import propagate
415
+ from opentelemetry import context as otel_context
416
+ from opentelemetry import propagate
424
417
 
425
- carrier: dict[str, str] = {}
426
- propagate.inject(carrier, context=otel_context.get_current())
427
- return carrier.get("traceparent")
428
- except ImportError:
429
- return None
418
+ carrier: dict[str, str] = {}
419
+ propagate.inject(carrier, context=otel_context.get_current())
420
+ return carrier.get("traceparent")
430
421
 
431
422
  def _inject_baggage(self) -> str | None:
432
- try:
433
- from opentelemetry import context as otel_context
434
- from opentelemetry import propagate
423
+ from opentelemetry import context as otel_context
424
+ from opentelemetry import propagate
435
425
 
436
- carrier: dict[str, str] = {}
437
- propagate.inject(carrier, context=otel_context.get_current())
438
- return carrier.get("baggage")
439
- except ImportError:
440
- return None
426
+ carrier: dict[str, str] = {}
427
+ propagate.inject(carrier, context=otel_context.get_current())
428
+ return carrier.get("baggage")
441
429
 
442
430
  async def _invoke_with_otel_context(
443
431
  self,
@@ -446,16 +434,8 @@ class III:
446
434
  traceparent: str | None,
447
435
  baggage: str | None,
448
436
  ) -> tuple[Any, str | None]:
449
- try:
450
- from opentelemetry import context as otel_context
451
- from opentelemetry import propagate, trace
452
-
453
- otel_available = True
454
- except ImportError:
455
- otel_available = False
456
-
457
- if not otel_available:
458
- return await handler(data), None
437
+ from opentelemetry import context as otel_context
438
+ from opentelemetry import propagate, trace
459
439
 
460
440
  carrier: dict[str, str] = {}
461
441
  if traceparent:
@@ -18,12 +18,9 @@ _SEVERITY_MAP = {
18
18
 
19
19
  def is_initialized() -> bool:
20
20
  """Return True if OTel has been initialized (importable without circular dep)."""
21
- try:
22
- from .telemetry import is_initialized as _is_init
21
+ from .telemetry import is_initialized as _is_init
23
22
 
24
- return _is_init()
25
- except ImportError:
26
- return False
23
+ return _is_init()
27
24
 
28
25
 
29
26
  class Logger:
@@ -55,15 +55,10 @@ def init_otel(
55
55
  if not enabled:
56
56
  return
57
57
 
58
- try:
59
- from opentelemetry import trace
60
- from opentelemetry.sdk.resources import SERVICE_NAME, SERVICE_VERSION, Resource
61
- from opentelemetry.sdk.trace import TracerProvider
62
- from opentelemetry.sdk.trace.export import BatchSpanProcessor
63
- except ImportError as exc:
64
- raise ImportError(
65
- "opentelemetry-api and opentelemetry-sdk are required. Install with: pip install 'iii-sdk[otel]'"
66
- ) from exc
58
+ from opentelemetry import trace
59
+ from opentelemetry.sdk.resources import SERVICE_NAME, SERVICE_VERSION, Resource
60
+ from opentelemetry.sdk.trace import TracerProvider
61
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
67
62
 
68
63
  service_name = cfg.service_name or os.environ.get("OTEL_SERVICE_NAME") or _DEFAULT_SERVICE_NAME
69
64
  service_version = cfg.service_version or os.environ.get("SERVICE_VERSION") or "unknown"
@@ -119,15 +114,11 @@ def _configure_meter_provider(
119
114
  ) -> None:
120
115
  """Set up a global MeterProvider with EngineMetricsExporter."""
121
116
  global _meter, _meter_provider
122
- try:
123
- from opentelemetry import metrics
124
- from opentelemetry.sdk.metrics import MeterProvider
125
- from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
117
+ from opentelemetry import metrics
118
+ from opentelemetry.sdk.metrics import MeterProvider
119
+ from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
126
120
 
127
- from .telemetry_exporters import EngineMetricsExporter
128
- except ImportError:
129
- logging.getLogger("iii.telemetry").warning("opentelemetry-sdk metrics not available; metrics export skipped.")
130
- return
121
+ from .telemetry_exporters import EngineMetricsExporter
131
122
 
132
123
  metrics_exporter = EngineMetricsExporter(connection)
133
124
  metric_reader = PeriodicExportingMetricReader(
@@ -168,15 +159,11 @@ def _resolve_int(
168
159
  def _configure_log_provider(resource: Any, connection: Any, cfg: OtelConfig) -> None:
169
160
  """Set up a global SdkLoggerProvider with EngineLogExporter."""
170
161
  global _log_provider
171
- try:
172
- from opentelemetry import _logs
173
- from opentelemetry.sdk._logs import LoggerProvider as SdkLoggerProvider
174
- from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
162
+ from opentelemetry import _logs
163
+ from opentelemetry.sdk._logs import LoggerProvider as SdkLoggerProvider
164
+ from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
175
165
 
176
- from .telemetry_exporters import EngineLogExporter
177
- except ImportError:
178
- logging.getLogger("iii.telemetry").warning("opentelemetry-sdk logs not available; log export skipped.")
179
- return
166
+ from .telemetry_exporters import EngineLogExporter
180
167
 
181
168
  log_exporter = EngineLogExporter(connection)
182
169
 
@@ -222,20 +209,14 @@ def _enable_fetch_instrumentation() -> None:
222
209
  """
223
210
  global _fetch_patched, _original_opener_open
224
211
 
225
- try:
226
- from opentelemetry import context as otel_ctx
227
- from opentelemetry.propagate import inject as otel_inject
228
- from opentelemetry.trace import SpanKind, StatusCode
229
- except ImportError:
230
- logging.getLogger("iii.telemetry").warning(
231
- "opentelemetry-api not installed; urllib auto-instrumentation skipped."
232
- )
233
- return
234
-
235
212
  import socket
236
213
  import urllib.request
237
214
  from urllib.parse import urlparse
238
215
 
216
+ from opentelemetry import context as otel_ctx
217
+ from opentelemetry.propagate import inject as otel_inject
218
+ from opentelemetry.trace import SpanKind, StatusCode
219
+
239
220
  _original_opener_open = urllib.request.OpenerDirector.open
240
221
  original = _original_opener_open
241
222
 
@@ -396,27 +377,21 @@ def get_meter() -> Any:
396
377
 
397
378
  def current_trace_id() -> str | None:
398
379
  """Return current active trace_id as 32-char hex, or None when unavailable."""
399
- try:
400
- from opentelemetry import trace
380
+ from opentelemetry import trace
401
381
 
402
- span_ctx = trace.get_current_span().get_span_context()
403
- if span_ctx.is_valid:
404
- return format(span_ctx.trace_id, "032x")
405
- except ImportError:
406
- return None
382
+ span_ctx = trace.get_current_span().get_span_context()
383
+ if span_ctx.is_valid:
384
+ return format(span_ctx.trace_id, "032x")
407
385
  return None
408
386
 
409
387
 
410
388
  def current_span_id() -> str | None:
411
389
  """Return current active span_id as 16-char hex, or None when unavailable."""
412
- try:
413
- from opentelemetry import trace
390
+ from opentelemetry import trace
414
391
 
415
- span_ctx = trace.get_current_span().get_span_context()
416
- if span_ctx.is_valid:
417
- return format(span_ctx.span_id, "016x")
418
- except ImportError:
419
- return None
392
+ span_ctx = trace.get_current_span().get_span_context()
393
+ if span_ctx.is_valid:
394
+ return format(span_ctx.span_id, "016x")
420
395
  return None
421
396
 
422
397
 
@@ -429,12 +404,9 @@ def get_logger() -> Any:
429
404
  """Return the active OTel logger, or None if OTel has not been initialized."""
430
405
  if not _initialized:
431
406
  return None
432
- try:
433
- from opentelemetry import _logs
407
+ from opentelemetry import _logs
434
408
 
435
- return _logs.get_logger("iii-python-sdk")
436
- except ImportError:
437
- return None
409
+ return _logs.get_logger("iii-python-sdk")
438
410
 
439
411
 
440
412
  async def with_span(
@@ -476,14 +448,10 @@ async def with_span(
476
448
 
477
449
  return await fn(_NoopSpan())
478
450
 
479
- try:
480
- from opentelemetry import context as otel_ctx
481
- from opentelemetry.propagate import extract as otel_extract
482
- from opentelemetry.trace import SpanKind as _SpanKind
483
- from opentelemetry.trace import StatusCode
484
-
485
- except ImportError:
486
- return await fn(None)
451
+ from opentelemetry import context as otel_ctx
452
+ from opentelemetry.propagate import extract as otel_extract
453
+ from opentelemetry.trace import SpanKind as _SpanKind
454
+ from opentelemetry.trace import StatusCode
487
455
 
488
456
  span_kind = kind if kind is not None else _SpanKind.INTERNAL
489
457
  parent_context = otel_ctx.get_current()
@@ -503,103 +471,75 @@ async def with_span(
503
471
 
504
472
  def inject_traceparent() -> str | None:
505
473
  """Inject the current trace context into a W3C traceparent header string."""
506
- try:
507
- from opentelemetry import context as otel_ctx
508
- from opentelemetry.propagate import inject as otel_inject
474
+ from opentelemetry import context as otel_ctx
475
+ from opentelemetry.propagate import inject as otel_inject
509
476
 
510
- carrier: dict[str, str] = {}
511
- otel_inject(carrier, context=otel_ctx.get_current())
512
- return carrier.get("traceparent")
513
- except ImportError:
514
- return None
477
+ carrier: dict[str, str] = {}
478
+ otel_inject(carrier, context=otel_ctx.get_current())
479
+ return carrier.get("traceparent")
515
480
 
516
481
 
517
482
  def extract_traceparent(traceparent: str) -> Any:
518
483
  """Extract a trace context from a W3C traceparent header string."""
519
- try:
520
- from opentelemetry.propagate import extract as otel_extract
484
+ from opentelemetry.propagate import extract as otel_extract
521
485
 
522
- return otel_extract({"traceparent": traceparent})
523
- except ImportError:
524
- return None
486
+ return otel_extract({"traceparent": traceparent})
525
487
 
526
488
 
527
489
  def inject_baggage() -> str | None:
528
490
  """Inject the current baggage into a W3C baggage header string."""
529
- try:
530
- from opentelemetry import context as otel_ctx
531
- from opentelemetry.propagate import inject as otel_inject
491
+ from opentelemetry import context as otel_ctx
492
+ from opentelemetry.propagate import inject as otel_inject
532
493
 
533
- carrier: dict[str, str] = {}
534
- otel_inject(carrier, context=otel_ctx.get_current())
535
- return carrier.get("baggage")
536
- except ImportError:
537
- return None
494
+ carrier: dict[str, str] = {}
495
+ otel_inject(carrier, context=otel_ctx.get_current())
496
+ return carrier.get("baggage")
538
497
 
539
498
 
540
499
  def extract_baggage(baggage: str) -> Any:
541
500
  """Extract baggage from a W3C baggage header string."""
542
- try:
543
- from opentelemetry.propagate import extract as otel_extract
501
+ from opentelemetry.propagate import extract as otel_extract
544
502
 
545
- return otel_extract({"baggage": baggage})
546
- except ImportError:
547
- return None
503
+ return otel_extract({"baggage": baggage})
548
504
 
549
505
 
550
506
  def extract_context(traceparent: str | None = None, baggage: str | None = None) -> Any:
551
507
  """Extract both trace context and baggage from their respective headers."""
552
- try:
553
- from opentelemetry.propagate import extract as otel_extract
554
-
555
- carrier: dict[str, str] = {}
556
- if traceparent:
557
- carrier["traceparent"] = traceparent
558
- if baggage:
559
- carrier["baggage"] = baggage
560
- return otel_extract(carrier)
561
- except ImportError:
562
- return None
508
+ from opentelemetry.propagate import extract as otel_extract
509
+
510
+ carrier: dict[str, str] = {}
511
+ if traceparent:
512
+ carrier["traceparent"] = traceparent
513
+ if baggage:
514
+ carrier["baggage"] = baggage
515
+ return otel_extract(carrier)
563
516
 
564
517
 
565
518
  def get_baggage_entry(key: str) -> str | None:
566
519
  """Get a baggage entry value from the current context."""
567
- try:
568
- from opentelemetry import baggage as otel_baggage
520
+ from opentelemetry import baggage as otel_baggage
569
521
 
570
- val = otel_baggage.get_baggage(key)
571
- return str(val) if val is not None else None
572
- except ImportError:
573
- return None
522
+ val = otel_baggage.get_baggage(key)
523
+ return str(val) if val is not None else None
574
524
 
575
525
 
576
526
  def set_baggage_entry(key: str, value: str) -> Any:
577
527
  """Set a baggage entry in the current context. Returns the new context."""
578
- try:
579
- from opentelemetry import baggage as otel_baggage
528
+ from opentelemetry import baggage as otel_baggage
580
529
 
581
- ctx = otel_baggage.set_baggage(key, value)
582
- return ctx
583
- except ImportError:
584
- return None
530
+ return otel_baggage.set_baggage(key, value)
585
531
 
586
532
 
587
533
  def remove_baggage_entry(key: str) -> Any:
588
534
  """Remove a baggage entry from the current context. Returns the new context."""
589
- try:
590
- from opentelemetry import baggage as otel_baggage
535
+ from opentelemetry import baggage as otel_baggage
591
536
 
592
- return otel_baggage.remove_baggage(key)
593
- except ImportError:
594
- return None
537
+ return otel_baggage.remove_baggage(key)
595
538
 
596
539
 
597
540
  def get_all_baggage() -> dict[str, str]:
598
541
  """Get all baggage entries from the current context."""
599
- try:
600
- from opentelemetry import baggage as otel_baggage
542
+ from opentelemetry import baggage as otel_baggage
601
543
 
602
- entries = otel_baggage.get_all()
603
- return {k: str(v) for k, v in entries.items()} if entries else {}
604
- except ImportError:
605
- return {}
544
+ entries = otel_baggage.get_all()
545
+ return {k: str(v) for k, v in entries.items()} if entries else {}
File without changes
File without changes
File without changes