9090import opentracing
9191from deprecated import deprecated
9292
93- import opentelemetry .trace as trace_api
9493from opentelemetry import propagators
94+ from opentelemetry .context import Context
95+ from opentelemetry .correlationcontext import get_correlation , set_correlation
9596from opentelemetry .ext .opentracing_shim import util
9697from 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+ )
98105
99106logger = logging .getLogger (__name__ )
100107
@@ -130,6 +137,8 @@ class SpanContextShim(opentracing.SpanContext):
130137
131138 def __init__ (self , otel_context ):
132139 self ._otel_context = otel_context
140+ # Context is being used here since it must be immutable.
141+ self ._baggage = Context ()
133142
134143 def unwrap (self ):
135144 """Returns the wrapped :class:`opentelemetry.trace.SpanContext`
@@ -144,17 +153,9 @@ def unwrap(self):
144153
145154 @property
146155 def baggage (self ):
147- """Implements the ``baggage`` property from the base class.
156+ """Implements the ``baggage`` property from the base class."""
148157
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
158159
159160
160161class SpanShim (opentracing .Span ):
@@ -270,31 +271,17 @@ def log(self, **kwargs):
270271 def log_event (self , event , payload = None ):
271272 super ().log_event (event , payload = payload )
272273
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
283279 )
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- """
292280
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 )
298285
299286
300287class ScopeShim (opentracing .Scope ):
@@ -469,8 +456,8 @@ def active(self):
469456 shim and is likely to be handled in future versions.
470457 """
471458
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 :
474461 return None
475462
476463 span_context = SpanContextShim (span .get_context ())
@@ -643,7 +630,7 @@ def start_span(
643630 links = []
644631 if references :
645632 for ref in references :
646- links .append (trace_api . Link (ref .referenced_context .unwrap ()))
633+ links .append (Link (ref .referenced_context .unwrap ()))
647634
648635 # The OpenTracing API expects time values to be `float` values which
649636 # represent the number of seconds since the epoch. OpenTelemetry
@@ -699,10 +686,10 @@ def get_as_list(dict_object, key):
699686
700687 propagator = propagators .get_global_httptextformat ()
701688 ctx = propagator .extract (get_as_list , carrier )
702- span = trace_api . get_current_span (ctx )
689+ span = get_current_span (ctx )
703690 if span is not None :
704691 otel_context = span .get_context ()
705692 else :
706- otel_context = trace_api . INVALID_SPAN_CONTEXT
693+ otel_context = INVALID_SPAN_CONTEXT
707694
708695 return SpanContextShim (otel_context )
0 commit comments