90
90
import opentracing
91
91
from deprecated import deprecated
92
92
93
- import opentelemetry .trace as trace_api
94
93
from opentelemetry import propagators
94
+ from opentelemetry .context import Context
95
+ from opentelemetry .correlationcontext import get_correlation , set_correlation
95
96
from opentelemetry .ext .opentracing_shim import util
96
97
from opentelemetry .ext .opentracing_shim .version import __version__
97
- from opentelemetry .trace import DefaultSpan , set_span_in_context
98
+ from opentelemetry .trace import (
99
+ INVALID_SPAN_CONTEXT ,
100
+ DefaultSpan ,
101
+ Link ,
102
+ get_current_span ,
103
+ set_span_in_context ,
104
+ )
98
105
99
106
logger = logging .getLogger (__name__ )
100
107
@@ -130,6 +137,8 @@ class SpanContextShim(opentracing.SpanContext):
130
137
131
138
def __init__ (self , otel_context ):
132
139
self ._otel_context = otel_context
140
+ # Context is being used here since it must be immutable.
141
+ self ._baggage = Context ()
133
142
134
143
def unwrap (self ):
135
144
"""Returns the wrapped :class:`opentelemetry.trace.SpanContext`
@@ -144,17 +153,9 @@ def unwrap(self):
144
153
145
154
@property
146
155
def baggage (self ):
147
- """Implements the ``baggage`` property from the base class.
156
+ """Implements the ``baggage`` property from the base class."""
148
157
149
- Warning:
150
- Not implemented yet.
151
- """
152
-
153
- logger .warning (
154
- "Using unimplemented property baggage on class %s." ,
155
- self .__class__ .__name__ ,
156
- )
157
- # TODO: Implement.
158
+ return self ._baggage
158
159
159
160
160
161
class SpanShim (opentracing .Span ):
@@ -270,31 +271,17 @@ def log(self, **kwargs):
270
271
def log_event (self , event , payload = None ):
271
272
super ().log_event (event , payload = payload )
272
273
273
- def set_baggage_item (self , key , value ): # pylint:disable=unused-argument
274
- """Implements the ``set_baggage_item()`` method from the base class.
275
-
276
- Warning:
277
- Not implemented yet.
278
- """
279
-
280
- logger .warning (
281
- "Calling unimplemented method set_baggage_item() on class %s" ,
282
- self .__class__ .__name__ ,
274
+ def set_baggage_item (self , key , value ):
275
+ """Implements the ``set_baggage_item`` method from the base class."""
276
+ # pylint: disable=protected-access
277
+ self ._context ._baggage = set_correlation (
278
+ key , value , context = self ._context ._baggage
283
279
)
284
- # TODO: Implement.
285
-
286
- def get_baggage_item (self , key ): # pylint:disable=unused-argument
287
- """Implements the ``get_baggage_item()`` method from the base class.
288
-
289
- Warning:
290
- Not implemented yet.
291
- """
292
280
293
- logger .warning (
294
- "Calling unimplemented method get_baggage_item() on class %s" ,
295
- self .__class__ .__name__ ,
296
- )
297
- # TODO: Implement.
281
+ def get_baggage_item (self , key ):
282
+ """Implements the ``get_baggage_item`` method from the base class."""
283
+ # pylint: disable=protected-access
284
+ return get_correlation (key , context = self ._context ._baggage )
298
285
299
286
300
287
class ScopeShim (opentracing .Scope ):
@@ -469,8 +456,8 @@ def active(self):
469
456
shim and is likely to be handled in future versions.
470
457
"""
471
458
472
- span = trace_api . get_current_span ()
473
- if span .get_context () == trace_api . INVALID_SPAN_CONTEXT :
459
+ span = get_current_span ()
460
+ if span .get_context () == INVALID_SPAN_CONTEXT :
474
461
return None
475
462
476
463
span_context = SpanContextShim (span .get_context ())
@@ -643,7 +630,7 @@ def start_span(
643
630
links = []
644
631
if references :
645
632
for ref in references :
646
- links .append (trace_api . Link (ref .referenced_context .unwrap ()))
633
+ links .append (Link (ref .referenced_context .unwrap ()))
647
634
648
635
# The OpenTracing API expects time values to be `float` values which
649
636
# represent the number of seconds since the epoch. OpenTelemetry
@@ -699,10 +686,10 @@ def get_as_list(dict_object, key):
699
686
700
687
propagator = propagators .get_global_httptextformat ()
701
688
ctx = propagator .extract (get_as_list , carrier )
702
- span = trace_api . get_current_span (ctx )
689
+ span = get_current_span (ctx )
703
690
if span is not None :
704
691
otel_context = span .get_context ()
705
692
else :
706
- otel_context = trace_api . INVALID_SPAN_CONTEXT
693
+ otel_context = INVALID_SPAN_CONTEXT
707
694
708
695
return SpanContextShim (otel_context )
0 commit comments