@@ -23,6 +23,10 @@ class ThreadLocalRuntimeContext(RuntimeContext):
23
23
implementation is available for usage with Python 3.4.
24
24
"""
25
25
26
+ class _Token :
27
+ def __init__ (self , context : Context ) -> None :
28
+ self .context = context
29
+
26
30
_CONTEXT_KEY = "current_context"
27
31
28
32
def __init__ (self ) -> None :
@@ -31,9 +35,8 @@ def __init__(self) -> None:
31
35
def set_current (self , context : Context ) -> object :
32
36
"""See `opentelemetry.context.RuntimeContext.set_current`."""
33
37
current = self .get_current ()
34
- setattr (self ._current_context , str (id (current )), current )
35
38
setattr (self ._current_context , self ._CONTEXT_KEY , context )
36
- return str ( id ( current ) )
39
+ return self . _Token ( current )
37
40
38
41
def get_current (self ) -> Context :
39
42
"""See `opentelemetry.context.RuntimeContext.get_current`."""
@@ -48,10 +51,9 @@ def get_current(self) -> Context:
48
51
49
52
def reset (self , token : object ) -> None :
50
53
"""See `opentelemetry.context.RuntimeContext.reset`."""
51
- if not hasattr ( self . _current_context , str ( token ) ):
54
+ if not isinstance ( token , self . _Token ):
52
55
raise ValueError ("invalid token" )
53
- context = getattr (self ._current_context , str (token )) # type: Context
54
- setattr (self ._current_context , self ._CONTEXT_KEY , context )
56
+ setattr (self ._current_context , self ._CONTEXT_KEY , token .context )
55
57
56
58
57
59
__all__ = ["ThreadLocalRuntimeContext" ]
0 commit comments