Skip to content

Commit 8ec609f

Browse files
committed
Remove setters and getters
Fixes open-telemetry#1644
1 parent 5dc0093 commit 8ec609f

File tree

27 files changed

+666
-909
lines changed

27 files changed

+666
-909
lines changed

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ env:
1010
# Otherwise, set variable to the commit of your branch on
1111
# opentelemetry-python-contrib which is compatible with these Core repo
1212
# changes.
13-
CONTRIB_REPO_SHA: 5bc0fa1611502be47a1f4eb550fe255e4b707ba1
13+
CONTRIB_REPO_SHA: 1300fcec899a37bb41145b602c938221c696607b
1414

1515
jobs:
1616
build:

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v0.18b0...HEAD)
88

9+
- Remove setters and getters
10+
([#1690](https://github.com/open-telemetry/opentelemetry-python/pull/1690))
11+
912
### Added
1013
- Document how to work with fork process web server models(Gunicorn, uWSGI etc...)
1114
([#1609](https://github.com/open-telemetry/opentelemetry-python/pull/1609))

docs/conf.py

-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@
104104
("py:class", "opentelemetry.trace._LinkBase",),
105105
# TODO: Understand why sphinx is not able to find this local class
106106
("py:class", "opentelemetry.propagators.textmap.TextMapPropagator",),
107-
("py:class", "opentelemetry.propagators.textmap.DictGetter",),
108107
("any", "opentelemetry.propagators.textmap.TextMapPropagator.extract",),
109108
("any", "opentelemetry.propagators.textmap.TextMapPropagator.inject",),
110109
]

docs/examples/auto-instrumentation/README.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Manually instrumented server
3737
def server_request():
3838
with tracer.start_as_current_span(
3939
"server_request",
40-
context=propagators.extract(DictGetter(), request.headers
40+
context=propagators.extract(request.headers
4141
),
4242
):
4343
print(request.args.get("param"))

docs/examples/auto-instrumentation/client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838
with tracer.start_as_current_span("client-server"):
3939
headers = {}
40-
propagators.inject(dict.__setitem__, headers)
40+
propagators.inject(headers)
4141
requested = get(
4242
"http://localhost:8082/server_request",
4343
params={"param": argv[1]},

docs/examples/auto-instrumentation/server_instrumented.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from opentelemetry import trace
1818
from opentelemetry.instrumentation.wsgi import collect_request_attributes
1919
from opentelemetry.propagate import extract
20-
from opentelemetry.propagators.textmap import DictGetter
2120
from opentelemetry.sdk.trace import TracerProvider
2221
from opentelemetry.sdk.trace.export import (
2322
ConsoleSpanExporter,
@@ -38,7 +37,7 @@
3837
def server_request():
3938
with tracer.start_as_current_span(
4039
"server_request",
41-
context=extract(DictGetter(), request.headers),
40+
context=extract(request.headers),
4241
kind=trace.SpanKind.SERVER,
4342
attributes=collect_request_attributes(request.environ),
4443
):

docs/examples/datadog_exporter/client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747

4848
with tracer.start_as_current_span("client-server"):
4949
headers = {}
50-
inject(dict.__setitem__, headers)
50+
inject(headers)
5151
requested = get(
5252
"http://localhost:8082/server_request",
5353
params={"param": argv[1]},

docs/examples/django/client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
with tracer.start_as_current_span("client-server"):
3838
headers = {}
39-
inject(dict.__setitem__, headers)
39+
inject(headers)
4040
requested = get(
4141
"http://localhost:8000",
4242
params={"param": argv[1]},

opentelemetry-api/src/opentelemetry/baggage/propagation/__init__.py

+30-54
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,26 @@
1111
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
14-
#
15-
import typing
16-
import urllib.parse
14+
15+
from typing import Dict, Optional, Set
16+
from urllib.parse import quote_plus, unquote
1717

1818
from opentelemetry import baggage
1919
from opentelemetry.context import get_current
2020
from opentelemetry.context.context import Context
21-
from opentelemetry.propagators import textmap
21+
from opentelemetry.propagators.textmap import TextMapPropagator
2222

2323

24-
class W3CBaggagePropagator(textmap.TextMapPropagator):
24+
class W3CBaggagePropagator(TextMapPropagator):
2525
"""Extracts and injects Baggage which is used to annotate telemetry."""
2626

27-
_MAX_HEADER_LENGTH = 8192
28-
_MAX_PAIR_LENGTH = 4096
29-
_MAX_PAIRS = 180
30-
_BAGGAGE_HEADER_NAME = "baggage"
27+
_baggage_header_name = "baggage"
28+
_max_header_length = 9182
29+
_max_pairs = 180
30+
_max_pair_length = 4096
3131

3232
def extract(
33-
self,
34-
getter: textmap.Getter[textmap.TextMapPropagatorT],
35-
carrier: textmap.TextMapPropagatorT,
36-
context: typing.Optional[Context] = None,
33+
self, carrier: Dict[str, str], context: Optional[Context] = None,
3734
) -> Context:
3835
"""Extract Baggage from the carrier.
3936
@@ -44,67 +41,46 @@ def extract(
4441
if context is None:
4542
context = get_current()
4643

47-
header = _extract_first_element(
48-
getter.get(carrier, self._BAGGAGE_HEADER_NAME)
49-
)
44+
header = carrier.get(self._baggage_header_name)
5045

51-
if not header or len(header) > self._MAX_HEADER_LENGTH:
46+
if header is None or len(header) > self._max_header_length:
5247
return context
5348

54-
baggage_entries = header.split(",")
55-
total_baggage_entries = self._MAX_PAIRS
56-
for entry in baggage_entries:
49+
total_baggage_entries = self._max_pairs
50+
51+
for entry in header.split(","):
5752
if total_baggage_entries <= 0:
5853
return context
5954
total_baggage_entries -= 1
60-
if len(entry) > self._MAX_PAIR_LENGTH:
55+
if len(entry) > self._max_pair_length:
6156
continue
62-
try:
57+
if "=" in entry:
6358
name, value = entry.split("=", 1)
64-
except Exception: # pylint: disable=broad-except
65-
continue
66-
context = baggage.set_baggage(
67-
urllib.parse.unquote(name).strip(),
68-
urllib.parse.unquote(value).strip(),
69-
context=context,
70-
)
59+
context = baggage.set_baggage(
60+
unquote(name).strip(),
61+
unquote(value).strip(),
62+
context=context,
63+
)
7164

7265
return context
7366

7467
def inject(
75-
self,
76-
set_in_carrier: textmap.Setter[textmap.TextMapPropagatorT],
77-
carrier: textmap.TextMapPropagatorT,
78-
context: typing.Optional[Context] = None,
68+
self, carrier: Dict[str, str], context: Optional[Context] = None,
7969
) -> None:
8070
"""Injects Baggage into the carrier.
8171
8272
See
8373
`opentelemetry.propagators.textmap.TextMapPropagator.inject`
8474
"""
8575
baggage_entries = baggage.get_all(context=context)
86-
if not baggage_entries:
87-
return
8876

89-
baggage_string = _format_baggage(baggage_entries)
90-
set_in_carrier(carrier, self._BAGGAGE_HEADER_NAME, baggage_string)
77+
if baggage_entries:
78+
carrier[self._baggage_header_name] = ",".join(
79+
key + "=" + quote_plus(str(value))
80+
for key, value in baggage_entries.items()
81+
)
9182

9283
@property
93-
def fields(self) -> typing.Set[str]:
84+
def fields(self) -> Set[str]:
9485
"""Returns a set with the fields set in `inject`."""
95-
return {self._BAGGAGE_HEADER_NAME}
96-
97-
98-
def _format_baggage(baggage_entries: typing.Mapping[str, object]) -> str:
99-
return ",".join(
100-
key + "=" + urllib.parse.quote_plus(str(value))
101-
for key, value in baggage_entries.items()
102-
)
103-
104-
105-
def _extract_first_element(
106-
items: typing.Optional[typing.Iterable[textmap.TextMapPropagatorT]],
107-
) -> typing.Optional[textmap.TextMapPropagatorT]:
108-
if items is None:
109-
return None
110-
return next(iter(items), None)
86+
return {self._baggage_header_name}

opentelemetry-api/src/opentelemetry/propagate/__init__.py

+18-35
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,12 @@
4040
PROPAGATOR = propagators.get_global_textmap()
4141
4242
43-
def get_header_from_flask_request(request, key):
44-
return request.headers.get_all(key)
45-
46-
def set_header_into_requests_request(request: requests.Request,
47-
key: str, value: str):
48-
request.headers[key] = value
49-
5043
def example_route():
51-
context = PROPAGATOR.extract(
52-
get_header_from_flask_request,
53-
flask.request
54-
)
44+
context = PROPAGATOR.extract(flask.request)
5545
request_to_downstream = requests.Request(
5646
"GET", "http://httpbin.org/get"
5747
)
5848
PROPAGATOR.inject(
59-
set_header_into_requests_request,
6049
request_to_downstream,
6150
context=context
6251
)
@@ -68,23 +57,22 @@ def example_route():
6857
https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/context/api-propagators.md
6958
"""
7059

71-
import typing
7260
from logging import getLogger
7361
from os import environ
62+
from typing import Dict, Optional
7463

7564
from pkg_resources import iter_entry_points
7665

7766
from opentelemetry.context.context import Context
7867
from opentelemetry.environment_variables import OTEL_PROPAGATORS
79-
from opentelemetry.propagators import composite, textmap
68+
from opentelemetry.propagators import composite
69+
from opentelemetry.propagators.textmap import TextMapPropagator
8070

81-
logger = getLogger(__name__)
71+
_logger = getLogger(__name__)
8272

8373

8474
def extract(
85-
getter: textmap.Getter[textmap.TextMapPropagatorT],
86-
carrier: textmap.TextMapPropagatorT,
87-
context: typing.Optional[Context] = None,
75+
carrier: Dict[str, str], context: Optional[Context] = None,
8876
) -> Context:
8977
"""Uses the configured propagator to extract a Context from the carrier.
9078
@@ -99,26 +87,21 @@ def extract(
9987
context: an optional Context to use. Defaults to current
10088
context if not set.
10189
"""
102-
return get_global_textmap().extract(getter, carrier, context)
90+
return get_global_textmap().extract(carrier, context)
10391

10492

10593
def inject(
106-
set_in_carrier: textmap.Setter[textmap.TextMapPropagatorT],
107-
carrier: textmap.TextMapPropagatorT,
108-
context: typing.Optional[Context] = None,
94+
carrier: Dict[str, str], context: Optional[Context] = None,
10995
) -> None:
11096
"""Uses the configured propagator to inject a Context into the carrier.
11197
11298
Args:
113-
set_in_carrier: A setter function that can set values
114-
on the carrier.
115-
carrier: An object that contains a representation of HTTP
116-
headers. Should be paired with set_in_carrier, which
117-
should know how to set header values on the carrier.
99+
carrier: A dict-like object that contains a representation of HTTP
100+
headers.
118101
context: an optional Context to use. Defaults to current
119102
context if not set.
120103
"""
121-
get_global_textmap().inject(set_in_carrier, carrier, context)
104+
get_global_textmap().inject(carrier, context)
122105

123106

124107
try:
@@ -138,16 +121,16 @@ def inject(
138121
)
139122

140123
except Exception: # pylint: disable=broad-except
141-
logger.exception("Failed to load configured propagators")
124+
_logger.error("Failed to load configured propagators")
142125
raise
143126

144-
_HTTP_TEXT_FORMAT = composite.CompositeHTTPPropagator(propagators) # type: ignore
127+
_textmap_propagator = composite.CompositeHTTPPropagator(propagators) # type: ignore
145128

146129

147-
def get_global_textmap() -> textmap.TextMapPropagator:
148-
return _HTTP_TEXT_FORMAT
130+
def get_global_textmap() -> TextMapPropagator:
131+
return _textmap_propagator
149132

150133

151-
def set_global_textmap(http_text_format: textmap.TextMapPropagator,) -> None:
152-
global _HTTP_TEXT_FORMAT # pylint:disable=global-statement
153-
_HTTP_TEXT_FORMAT = http_text_format # type: ignore
134+
def set_global_textmap(http_text_format: TextMapPropagator,) -> None:
135+
global _textmap_propagator # pylint:disable=global-statement
136+
_textmap_propagator = http_text_format # type: ignore

0 commit comments

Comments
 (0)