Skip to content

Commit 04ed353

Browse files
committed
[carriers] add env carrier
1 parent 12bcd45 commit 04ed353

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import os
2+
import typing
3+
from opentelemetry.propagators.textmap import Getter, Setter
4+
5+
class EnvironmentGetter(Getter[dict]):
6+
"""This class decorates Getter to enable extracting from context and baggage
7+
from environment variables.
8+
"""
9+
10+
KEY_MAPPING = {
11+
"TRACEPARENT": "traceparent",
12+
"TRACESTATE": "tracestate",
13+
"BAGGAGE": "baggage"
14+
}
15+
16+
def __init__(self):
17+
self.env_copy = dict(os.environ)
18+
self.carrier = {}
19+
20+
for env_key, env_value in self.env_copy.items():
21+
if env_key in self.KEY_MAPPING:
22+
self.carrier[self.KEY_MAPPING[env_key]] = env_value
23+
else:
24+
self.carrier[env_key] = env_value
25+
26+
def get(self, carrier: dict, key: str) -> typing.Optional[typing.List[str]]:
27+
"""Get a value from the carrier for the given key"""
28+
val = self.carrier.get(key, None)
29+
if val is None:
30+
return None
31+
if isinstance(val, typing.Iterable) and not isinstance(val, str):
32+
return list(val)
33+
return [val]
34+
35+
def keys(self, carrier: dict) -> typing.List[str]:
36+
"""Get all keys from the carrier"""
37+
return list(self.carrier.keys())
38+
39+
class EnvironmentSetter(Setter[dict]):
40+
"""This class decorates Setter to enable setting context and baggage
41+
to environment variables.
42+
"""
43+
44+
KEY_MAPPING = {
45+
"TRACEPARENT": "traceparent",
46+
"TRACESTATE": "tracestate",
47+
"BAGGAGE": "baggage"
48+
}
49+
50+
def set(self, carrier: typing.Optional[dict], key: str, value: str) -> None:
51+
"""Set a value in the environment for the given key.
52+
53+
Args:
54+
carrier: Not used for environment setter, but kept for interface compatibility
55+
key: The key to set
56+
value: The value to set
57+
"""
58+
env_key = self.KEY_MAPPING.get(key, key.upper())
59+
60+
os.environ[env_key] = value

0 commit comments

Comments
 (0)