74
74
"""
75
75
76
76
77
- import abc
78
- import enum
79
- import typing
77
+ from abc import ABC , abstractmethod
80
78
from contextlib import contextmanager
79
+ from enum import Enum
81
80
from logging import getLogger
81
+ from typing import Iterator , Optional , Sequence , cast
82
82
83
83
from opentelemetry .context .context import Context
84
+ from opentelemetry .environment_variables import OTEL_PYTHON_TRACER_PROVIDER
84
85
from opentelemetry .trace .propagation import (
85
86
get_current_span ,
86
87
set_span_in_context ,
102
103
)
103
104
from opentelemetry .trace .status import Status
104
105
from opentelemetry .util import types
105
- from opentelemetry .util .providers import _load_trace_provider
106
+ from opentelemetry .util ._providers import _load_provider
106
107
107
108
logger = getLogger (__name__ )
108
109
109
110
110
- class LinkBase (abc . ABC ):
111
+ class LinkBase (ABC ):
111
112
def __init__ (self , context : "SpanContext" ) -> None :
112
113
self ._context = context
113
114
@@ -116,7 +117,7 @@ def context(self) -> "SpanContext":
116
117
return self ._context
117
118
118
119
@property
119
- @abc . abstractmethod
120
+ @abstractmethod
120
121
def attributes (self ) -> types .Attributes :
121
122
pass
122
123
@@ -140,10 +141,10 @@ def attributes(self) -> types.Attributes:
140
141
return self ._attributes
141
142
142
143
143
- _Links = typing . Optional [typing . Sequence [Link ]]
144
+ _Links = Optional [Sequence [Link ]]
144
145
145
146
146
- class SpanKind (enum . Enum ):
147
+ class SpanKind (Enum ):
147
148
"""Specifies additional details on how this span relates to its parent span.
148
149
149
150
Note that this enumeration is experimental and likely to change. See
@@ -172,8 +173,8 @@ class SpanKind(enum.Enum):
172
173
CONSUMER = 4
173
174
174
175
175
- class TracerProvider (abc . ABC ):
176
- @abc . abstractmethod
176
+ class TracerProvider (ABC ):
177
+ @abstractmethod
177
178
def get_tracer (
178
179
self ,
179
180
instrumenting_module_name : str ,
@@ -217,7 +218,7 @@ def get_tracer(
217
218
return DefaultTracer ()
218
219
219
220
220
- class Tracer (abc . ABC ):
221
+ class Tracer (ABC ):
221
222
"""Handles span creation and in-process context propagation.
222
223
223
224
This class provides methods for manipulating the context, creating spans,
@@ -228,15 +229,15 @@ class Tracer(abc.ABC):
228
229
# This is the default behavior when creating spans.
229
230
CURRENT_SPAN = DefaultSpan (INVALID_SPAN_CONTEXT )
230
231
231
- @abc . abstractmethod
232
+ @abstractmethod
232
233
def start_span (
233
234
self ,
234
235
name : str ,
235
- context : typing . Optional [Context ] = None ,
236
+ context : Optional [Context ] = None ,
236
237
kind : SpanKind = SpanKind .INTERNAL ,
237
238
attributes : types .Attributes = None ,
238
239
links : _Links = None ,
239
- start_time : typing . Optional [int ] = None ,
240
+ start_time : Optional [int ] = None ,
240
241
record_exception : bool = True ,
241
242
set_status_on_exception : bool = True ,
242
243
) -> "Span" :
@@ -283,19 +284,19 @@ def start_span(
283
284
"""
284
285
285
286
@contextmanager # type: ignore
286
- @abc . abstractmethod
287
+ @abstractmethod
287
288
def start_as_current_span (
288
289
self ,
289
290
name : str ,
290
- context : typing . Optional [Context ] = None ,
291
+ context : Optional [Context ] = None ,
291
292
kind : SpanKind = SpanKind .INTERNAL ,
292
293
attributes : types .Attributes = None ,
293
294
links : _Links = None ,
294
- start_time : typing . Optional [int ] = None ,
295
+ start_time : Optional [int ] = None ,
295
296
record_exception : bool = True ,
296
297
set_status_on_exception : bool = True ,
297
298
end_on_exit : bool = True ,
298
- ) -> typing . Iterator ["Span" ]:
299
+ ) -> Iterator ["Span" ]:
299
300
"""Context manager for creating a new span and set it
300
301
as the current span in this tracer's context.
301
302
@@ -350,10 +351,10 @@ def start_as_current_span(
350
351
"""
351
352
352
353
@contextmanager # type: ignore
353
- @abc . abstractmethod
354
+ @abstractmethod
354
355
def use_span (
355
356
self , span : "Span" , end_on_exit : bool = False ,
356
- ) -> typing . Iterator [None ]:
357
+ ) -> Iterator [None ]:
357
358
"""Context manager for setting the passed span as the
358
359
current span in the context, as well as resetting the
359
360
context back upon exiting the context manager.
@@ -381,11 +382,11 @@ class DefaultTracer(Tracer):
381
382
def start_span (
382
383
self ,
383
384
name : str ,
384
- context : typing . Optional [Context ] = None ,
385
+ context : Optional [Context ] = None ,
385
386
kind : SpanKind = SpanKind .INTERNAL ,
386
387
attributes : types .Attributes = None ,
387
388
links : _Links = None ,
388
- start_time : typing . Optional [int ] = None ,
389
+ start_time : Optional [int ] = None ,
389
390
record_exception : bool = True ,
390
391
set_status_on_exception : bool = True ,
391
392
) -> "Span" :
@@ -396,22 +397,22 @@ def start_span(
396
397
def start_as_current_span (
397
398
self ,
398
399
name : str ,
399
- context : typing . Optional [Context ] = None ,
400
+ context : Optional [Context ] = None ,
400
401
kind : SpanKind = SpanKind .INTERNAL ,
401
402
attributes : types .Attributes = None ,
402
403
links : _Links = None ,
403
- start_time : typing . Optional [int ] = None ,
404
+ start_time : Optional [int ] = None ,
404
405
record_exception : bool = True ,
405
406
set_status_on_exception : bool = True ,
406
407
end_on_exit : bool = True ,
407
- ) -> typing . Iterator ["Span" ]:
408
+ ) -> Iterator ["Span" ]:
408
409
# pylint: disable=unused-argument,no-self-use
409
410
yield INVALID_SPAN
410
411
411
412
@contextmanager # type: ignore
412
413
def use_span (
413
414
self , span : "Span" , end_on_exit : bool = False ,
414
- ) -> typing . Iterator [None ]:
415
+ ) -> Iterator [None ]:
415
416
# pylint: disable=unused-argument,no-self-use
416
417
yield
417
418
@@ -422,7 +423,7 @@ def use_span(
422
423
def get_tracer (
423
424
instrumenting_module_name : str ,
424
425
instrumenting_library_version : str = "" ,
425
- tracer_provider : typing . Optional [TracerProvider ] = None ,
426
+ tracer_provider : Optional [TracerProvider ] = None ,
426
427
) -> "Tracer" :
427
428
"""Returns a `Tracer` for use by the given instrumentation library.
428
429
@@ -458,8 +459,10 @@ def get_tracer_provider() -> TracerProvider:
458
459
global _TRACER_PROVIDER # pylint: disable=global-statement
459
460
460
461
if _TRACER_PROVIDER is None :
461
- _TRACER_PROVIDER = _load_trace_provider ("tracer_provider" )
462
-
462
+ _TRACER_PROVIDER = cast ( # type: ignore
463
+ "TracerProvider" ,
464
+ _load_provider (OTEL_PYTHON_TRACER_PROVIDER , "tracer_provider" ),
465
+ )
463
466
return _TRACER_PROVIDER
464
467
465
468
0 commit comments