Skip to content

Commit 73f0ab1

Browse files
authored
refactor: make opentelemetry a required dependency in Python SDK (#1434)
1 parent e178682 commit 73f0ab1

4 files changed

Lines changed: 91 additions & 178 deletions

File tree

sdk/packages/python/iii/pyproject.toml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,15 @@ classifiers = [
2222
dependencies = [
2323
"websockets>=12.0",
2424
"pydantic>=2.0",
25+
"opentelemetry-api>=1.25",
26+
"opentelemetry-sdk>=1.25",
2527
]
2628

2729
[project.urls]
2830
Homepage = "https://github.com/iii-hq/sdk"
2931
Repository = "https://github.com/iii-hq/sdk"
3032

3133
[project.optional-dependencies]
32-
otel = [
33-
"opentelemetry-api>=1.25",
34-
"opentelemetry-sdk>=1.25",
35-
]
3634
dev = [
3735
"pytest>=8.0",
3836
"pytest-asyncio>=0.23",
@@ -41,8 +39,6 @@ dev = [
4139
"aiohttp>=3.9",
4240
"mypy>=1.8",
4341
"ruff>=0.2",
44-
"opentelemetry-api>=1.25",
45-
"opentelemetry-sdk>=1.25",
4642
"griffe>=1.0",
4743
]
4844

sdk/packages/python/iii/src/iii/iii.py

Lines changed: 25 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -186,20 +186,17 @@ async def connect_async(self) -> None:
186186
from an async context.
187187
"""
188188
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)
203200
self._set_connection_state("connecting")
204201
await self._do_connect()
205202

@@ -238,12 +235,9 @@ async def shutdown_async(self) -> None:
238235

239236
self._set_connection_state("disconnected")
240237

241-
try:
242-
from .telemetry import shutdown_otel_async
238+
from .telemetry import shutdown_otel_async
243239

244-
await shutdown_otel_async()
245-
except ImportError:
246-
log.debug("OpenTelemetry not available")
240+
await shutdown_otel_async()
247241

248242
# Schedule the event loop to stop on the next iteration so the
249243
# non-daemon background thread exits and the process can terminate.
@@ -418,26 +412,20 @@ def _handle_result(self, invocation_id: str, result: Any, error: Any) -> None:
418412
future.set_result(result)
419413

420414
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
424417

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")
430421

431422
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
435425

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")
441429

442430
async def _invoke_with_otel_context(
443431
self,
@@ -446,16 +434,8 @@ async def _invoke_with_otel_context(
446434
traceparent: str | None,
447435
baggage: str | None,
448436
) -> 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
459439

460440
carrier: dict[str, str] = {}
461441
if traceparent:

sdk/packages/python/iii/src/iii/logger.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@
1818

1919
def is_initialized() -> bool:
2020
"""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
2322

24-
return _is_init()
25-
except ImportError:
26-
return False
23+
return _is_init()
2724

2825

2926
class Logger:

0 commit comments

Comments
 (0)