Skip to content

Commit c6435b1

Browse files
committed
Refactor implementation
1 parent 994d19e commit c6435b1

File tree

13 files changed

+206
-454
lines changed

13 files changed

+206
-454
lines changed

exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
__version__ as opencensusexporter_exporter_version,
2626
)
2727
from opentelemetry.trace import SpanKind
28-
from opentelemetry.util._entry_points import version
28+
from opentelemetry.util._importlib_metadata import version
2929

3030
OPENTELEMETRY_VERSION = version("opentelemetry-api")
3131

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

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818
import uuid
1919
from functools import wraps
2020
from os import environ
21-
from sys import version_info
2221

2322
# pylint: disable=wrong-import-position
2423
from opentelemetry.context.context import Context, _RuntimeContext # noqa
2524
from opentelemetry.environment_variables import OTEL_PYTHON_CONTEXT
26-
from opentelemetry.util._entry_points import entry_points
25+
from opentelemetry.util._importlib_metadata import entry_points
2726

2827
logger = logging.getLogger(__name__)
2928
_RUNTIME_CONTEXT = None # type: typing.Optional[_RuntimeContext]
@@ -57,37 +56,15 @@ def wrapper( # type: ignore[misc]
5756
OTEL_PYTHON_CONTEXT, default_context
5857
) # type: str
5958
try:
60-
# FIXME Remove when support for 3.9 is dropped.
61-
if version_info.minor in (8, 9):
62-
for entry_point in entry_points()[ # type: ignore
63-
"opentelemetry_context"
64-
]:
65-
if entry_point.name == configured_context: # type: ignore
66-
_RUNTIME_CONTEXT = entry_point.load()() # type: ignore
67-
break
68-
else:
69-
raise Exception(
70-
f"No entry point found for configured_context:"
71-
f" {configured_context}"
72-
)
73-
else:
74-
75-
try:
76-
_RUNTIME_CONTEXT = next( # type: ignore
77-
iter( # type: ignore
78-
entry_points( # type: ignore
79-
group="opentelemetry_context",
80-
name=configured_context,
81-
)
82-
)
83-
).load()()
84-
85-
except StopIteration:
86-
87-
raise Exception(
88-
f"No entry point found for configured_context:"
89-
f" {configured_context}"
59+
60+
_RUNTIME_CONTEXT = next( # type: ignore
61+
iter( # type: ignore
62+
entry_points( # type: ignore
63+
group="opentelemetry_context",
64+
name=configured_context,
9065
)
66+
)
67+
).load()()
9168

9269
except Exception: # pylint: disable=broad-except
9370
logger.exception(

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

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -68,22 +68,21 @@ def example_route():
6868
https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/context/api-propagators.md
6969
"""
7070

71-
import typing
7271
from logging import getLogger
7372
from os import environ
74-
from sys import version_info
73+
from typing import Optional
7574

7675
from opentelemetry.context.context import Context
7776
from opentelemetry.environment_variables import OTEL_PROPAGATORS
7877
from opentelemetry.propagators import composite, textmap
79-
from opentelemetry.util._entry_points import entry_points
78+
from opentelemetry.util._importlib_metadata import entry_points
8079

8180
logger = getLogger(__name__)
8281

8382

8483
def extract(
8584
carrier: textmap.CarrierT,
86-
context: typing.Optional[Context] = None,
85+
context: Optional[Context] = None,
8786
getter: textmap.Getter[textmap.CarrierT] = textmap.default_getter,
8887
) -> Context:
8988
"""Uses the configured propagator to extract a Context from the carrier.
@@ -104,7 +103,7 @@ def extract(
104103

105104
def inject(
106105
carrier: textmap.CarrierT,
107-
context: typing.Optional[Context] = None,
106+
context: Optional[Context] = None,
108107
setter: textmap.Setter[textmap.CarrierT] = textmap.default_setter,
109108
) -> None:
110109
"""Uses the configured propagator to inject a Context into the carrier.
@@ -134,25 +133,17 @@ def inject(
134133
propagator = propagator.strip()
135134

136135
try:
137-
# FIXME Remove when support for 3.9 is dropped.
138-
if version_info.minor in (8, 9):
139-
for entry_point in entry_points().get( # type: ignore
140-
"opentelemetry_propagator", []
141-
):
142-
if entry_point.name == propagator: # type: ignore
143-
propagators.append(entry_point.load()()) # type: ignore
144-
else:
145-
146-
propagators.append( # type: ignore
147-
next( # type: ignore
148-
iter( # type: ignore
149-
entry_points( # type: ignore
150-
group="opentelemetry_propagator",
151-
name=propagator,
152-
)
136+
137+
propagators.append( # type: ignore
138+
next( # type: ignore
139+
iter( # type: ignore
140+
entry_points( # type: ignore
141+
group="opentelemetry_propagator",
142+
name=propagator,
153143
)
154-
).load()()
155-
)
144+
)
145+
).load()()
146+
)
156147

157148
except Exception: # pylint: disable=broad-except
158149
logger.exception(

opentelemetry-api/src/opentelemetry/util/_entry_points.py renamed to opentelemetry-api/src/opentelemetry/util/_importlib_metadata.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,25 @@
1414

1515
from sys import version_info
1616

17-
# FIXME remove this file when support for 3.7 is dropped.
17+
# FIXME remove this when support for 3.7 is dropped.
1818
if version_info.minor == 7:
1919
# pylint: disable=import-error
2020
from importlib_metadata import entry_points, version # type: ignore
21+
22+
# FIXME remove this file when support for 3.9 is dropped.
23+
elif version_info.minor in (8, 9):
24+
# pylint: disable=import-error
25+
from importlib.metadata import (
26+
entry_points as importlib_metadata_entry_points,
27+
)
28+
from importlib.metadata import version
29+
30+
def entry_points(group: str, name: str): # type: ignore
31+
for entry_point in importlib_metadata_entry_points()[group]:
32+
if entry_point.name == name:
33+
yield entry_point
34+
2135
else:
22-
from importlib.metadata import entry_points, version # type: ignore
36+
from importlib.metadata import entry_points, version
2337

2438
__all__ = ["entry_points", "version"]

opentelemetry-api/src/opentelemetry/util/_providers.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@
1414

1515
from logging import getLogger
1616
from os import environ
17-
from sys import version_info
1817
from typing import TYPE_CHECKING, TypeVar, cast
1918

20-
from opentelemetry.util._entry_points import entry_points
19+
from opentelemetry.util._importlib_metadata import entry_points
2120

2221
if TYPE_CHECKING:
2322
from opentelemetry.metrics import MeterProvider
@@ -39,14 +38,6 @@ def _load_provider(
3938
environ.get(provider_environment_variable, f"default_{provider}"),
4039
)
4140

42-
# FIXME remove when support for 3.9 is dropped.
43-
if version_info.minor in (8, 9):
44-
45-
for entry_point in entry_points()[f"opentelemetry_{provider}"]: # type: ignore
46-
if entry_point.name == provider_name: # type: ignore
47-
return cast(Provider, entry_point.load()()) # type: ignore
48-
raise Exception(f"Provider {provider_name} not found")
49-
5041
return cast(
5142
Provider,
5243
next( # type: ignore

opentelemetry-api/tests/propagators/test_propagators.py

Lines changed: 34 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from importlib import reload
1818
from logging import ERROR
1919
from os import environ
20-
from sys import version_info
2120
from unittest import TestCase
2221
from unittest.mock import Mock, patch
2322

@@ -54,79 +53,44 @@ def test_propagators(propagators):
5453

5554
@patch.dict(environ, {OTEL_PROPAGATORS: "a, b, c "})
5655
@patch("opentelemetry.propagators.composite.CompositePropagator")
57-
@patch("opentelemetry.util._entry_points.entry_points")
56+
@patch("opentelemetry.util._importlib_metadata.entry_points")
5857
def test_non_default_propagators(
5958
self, mock_entry_points, mock_compositehttppropagator
6059
):
6160

62-
# FIXME Remove when support for 3.9 is dropped.
63-
if version_info.minor in (8, 9):
64-
65-
mock_a = Mock()
66-
mock_a.configure_mock(
67-
**{
68-
"name": "a",
69-
"load.return_value": Mock(**{"return_value": "a"}),
70-
}
71-
)
72-
mock_b = Mock()
73-
mock_b.configure_mock(
74-
**{
75-
"name": "b",
76-
"load.return_value": Mock(**{"return_value": "b"}),
77-
}
78-
)
79-
mock_c = Mock()
80-
mock_c.configure_mock(
81-
**{
82-
"name": "c",
83-
"load.return_value": Mock(**{"return_value": "c"}),
84-
}
85-
)
86-
87-
mock_entry_points.configure_mock(
88-
**{
89-
"return_value": {
90-
"opentelemetry_propagator": [mock_a, mock_b, mock_c]
91-
}
92-
}
93-
)
94-
95-
else:
96-
97-
mock_entry_points.configure_mock(
98-
**{
99-
"side_effect": [
100-
[
101-
Mock(
102-
**{
103-
"load.return_value": Mock(
104-
**{"return_value": "a"}
105-
)
106-
}
107-
),
108-
],
109-
[
110-
Mock(
111-
**{
112-
"load.return_value": Mock(
113-
**{"return_value": "b"}
114-
)
115-
}
116-
)
117-
],
118-
[
119-
Mock(
120-
**{
121-
"load.return_value": Mock(
122-
**{"return_value": "c"}
123-
)
124-
}
125-
)
126-
],
127-
]
128-
}
129-
)
61+
mock_entry_points.configure_mock(
62+
**{
63+
"side_effect": [
64+
[
65+
Mock(
66+
**{
67+
"load.return_value": Mock(
68+
**{"return_value": "a"}
69+
)
70+
}
71+
),
72+
],
73+
[
74+
Mock(
75+
**{
76+
"load.return_value": Mock(
77+
**{"return_value": "b"}
78+
)
79+
}
80+
)
81+
],
82+
[
83+
Mock(
84+
**{
85+
"load.return_value": Mock(
86+
**{"return_value": "c"}
87+
)
88+
}
89+
)
90+
],
91+
]
92+
}
93+
)
13094

13195
def test_propagators(propagators):
13296
self.assertEqual(propagators, ["a", "b", "c"])
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Copyright The OpenTelemetry Authors
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from unittest import TestCase
16+
17+
from opentelemetry.metrics import MeterProvider
18+
from opentelemetry.util._importlib_metadata import entry_points
19+
20+
21+
class TestEntryPoints(TestCase):
22+
def test_entry_points(self):
23+
24+
self.assertIsInstance(
25+
next(
26+
iter(
27+
entry_points(
28+
group="opentelemetry_meter_provider",
29+
name="default_meter_provider",
30+
)
31+
)
32+
).load()(),
33+
MeterProvider,
34+
)

0 commit comments

Comments
 (0)