Skip to content

Commit 983c39a

Browse files
committed
Remove usage of pkg_resources
Fixes #2927
1 parent 5574f7e commit 983c39a

File tree

39 files changed

+811
-230
lines changed

39 files changed

+811
-230
lines changed

exporter/opentelemetry-exporter-opencensus/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ dependencies = [
3232
"opentelemetry-sdk ~= 1.3",
3333
"protobuf ~= 3.13",
3434
"setuptools >= 16.0",
35+
"importlib-metadata >= 5.0.0; python_version=='3.7'"
3536
]
3637

3738
[project.optional-dependencies]

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,16 @@
1515
import os
1616
import socket
1717
import time
18+
from sys import version_info
1819

19-
import pkg_resources
20+
# FIXME remove when support for 3.7 is dropped.
21+
if version_info.minor == 7:
22+
# pylint: disable=import-error
23+
from importlib_metadata import version
24+
else:
25+
from importlib.metadata import version
26+
27+
# pylint: disable=wrong-import-position
2028
from google.protobuf.timestamp_pb2 import Timestamp
2129
from opencensus.proto.agent.common.v1 import common_pb2
2230
from opencensus.proto.trace.v1 import trace_pb2
@@ -26,9 +34,7 @@
2634
)
2735
from opentelemetry.trace import SpanKind
2836

29-
OPENTELEMETRY_VERSION = pkg_resources.get_distribution(
30-
"opentelemetry-api"
31-
).version
37+
OPENTELEMETRY_VERSION = version("opentelemetry-api")
3238

3339

3440
def proto_timestamp_from_time_ns(time_ns):

exporter/opentelemetry-exporter-zipkin-json/tests/encoder/test_v1_json.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
)
2929
from opentelemetry.trace import TraceFlags, format_span_id, format_trace_id
3030

31-
from .common_tests import TEST_SERVICE_NAME, CommonEncoderTestCases
31+
from .common_tests import ( # pylint: disable=import-error
32+
TEST_SERVICE_NAME,
33+
CommonEncoderTestCases,
34+
)
3235

3336

3437
# pylint: disable=protected-access

exporter/opentelemetry-exporter-zipkin-json/tests/encoder/test_v2_json.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
)
2929
from opentelemetry.trace import SpanKind, TraceFlags
3030

31-
from .common_tests import TEST_SERVICE_NAME, CommonEncoderTestCases
31+
from .common_tests import ( # pylint: disable=import-error
32+
TEST_SERVICE_NAME,
33+
CommonEncoderTestCases,
34+
)
3235

3336

3437
# pylint: disable=protected-access

exporter/opentelemetry-exporter-zipkin-proto-http/tests/encoder/test_v2_protobuf.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
)
2929
from opentelemetry.trace import SpanKind
3030

31-
from .common_tests import TEST_SERVICE_NAME, CommonEncoderTestCases
31+
from .common_tests import ( # pylint: disable=import-error
32+
TEST_SERVICE_NAME,
33+
CommonEncoderTestCases,
34+
)
3235

3336

3437
# pylint: disable=protected-access

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

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

22-
from pkg_resources import iter_entry_points
23+
# FIXME remove when support for 3.7 is dropped.
24+
if version_info.minor == 7:
25+
# pylint: disable=import-error
26+
from importlib_metadata import entry_points # type: ignore
27+
else:
28+
from importlib.metadata import entry_points
2329

30+
# pylint: disable=wrong-import-position
2431
from opentelemetry.context.context import Context, _RuntimeContext
2532
from opentelemetry.environment_variables import OTEL_PYTHON_CONTEXT
2633

@@ -41,25 +48,38 @@ def _load_runtime_context(func: _F) -> _F:
4148
@wraps(func) # type: ignore[misc]
4249
def wrapper( # type: ignore[misc]
4350
*args: typing.Tuple[typing.Any, typing.Any],
44-
**kwargs: typing.Dict[typing.Any, typing.Any]
51+
**kwargs: typing.Dict[typing.Any, typing.Any],
4552
) -> typing.Optional[typing.Any]:
4653
global _RUNTIME_CONTEXT # pylint: disable=global-statement
4754

4855
with _RUNTIME_CONTEXT_LOCK:
4956
if _RUNTIME_CONTEXT is None:
50-
# FIXME use a better implementation of a configuration manager to avoid having
51-
# to get configuration values straight from environment variables
57+
# FIXME use a better implementation of a configuration manager
58+
# to avoid having to get configuration values straight from
59+
# environment variables
5260
default_context = "contextvars_context"
5361

5462
configured_context = environ.get(
5563
OTEL_PYTHON_CONTEXT, default_context
5664
) # type: str
5765
try:
58-
_RUNTIME_CONTEXT = next(
59-
iter_entry_points(
60-
"opentelemetry_context", configured_context
61-
)
62-
).load()()
66+
if version_info.minor <= 9:
67+
for entry_point in entry_points()[ # type: ignore
68+
"opentelemetry_context"
69+
]:
70+
if entry_point.name == configured_context: # type: ignore
71+
_RUNTIME_CONTEXT = entry_point.load()() # type: ignore
72+
break
73+
else:
74+
raise Exception(
75+
f"No entry point found for configured_context:"
76+
f" {configured_context}"
77+
)
78+
else:
79+
_RUNTIME_CONTEXT = entry_points( # type: ignore
80+
group="opentelemetry_context",
81+
name=configured_context,
82+
)[0].load()()
6383
except Exception: # pylint: disable=broad-except
6484
logger.error(
6585
"Failed to load context: %s", configured_context

opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def get_meter(
119119
120120
version: Optional. The version string of the
121121
instrumenting library. Usually this should be the same as
122-
``pkg_resources.get_distribution(instrumenting_library_name).version``.
122+
``importlib.metadata.version(instrumenting_library_name)``.
123123
124124
schema_url: Optional. Specifies the Schema URL of the emitted telemetry.
125125
"""

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

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,19 @@ def example_route():
7171
import typing
7272
from logging import getLogger
7373
from os import environ
74-
75-
from pkg_resources import iter_entry_points
74+
from sys import version_info
7675

7776
from opentelemetry.context.context import Context
7877
from opentelemetry.environment_variables import OTEL_PROPAGATORS
7978
from opentelemetry.propagators import composite, textmap
8079

80+
# FIXME remove when support for 3.7 is dropped.
81+
if version_info.minor == 7:
82+
# pylint: disable=import-error
83+
from importlib_metadata import entry_points # type: ignore
84+
else:
85+
from importlib.metadata import entry_points
86+
8187
logger = getLogger(__name__)
8288

8389

@@ -129,14 +135,26 @@ def inject(
129135
"tracecontext,baggage",
130136
)
131137

138+
132139
for propagator in environ_propagators.split(","):
133140
propagator = propagator.strip()
134141
try:
135-
propagators.append( # type: ignore
136-
next( # type: ignore
137-
iter_entry_points("opentelemetry_propagator", propagator)
138-
).load()()
139-
)
142+
143+
if version_info.minor <= 9:
144+
145+
for entry_point in entry_points().get( # type: ignore
146+
"opentelemetry_propagator", []
147+
):
148+
if entry_point.name == propagator: # type: ignore
149+
propagators.append(entry_point.load()()) # type: ignore
150+
else:
151+
152+
propagators.append( # type: ignore
153+
entry_points( # type: ignore
154+
group="opentelemetry_propagator", name=propagator
155+
)[0].load()()
156+
)
157+
140158
except Exception: # pylint: disable=broad-except
141159
logger.exception(
142160
"Failed to load configured propagator `%s`", propagator

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ def get_tracer(
216216
217217
instrumenting_library_version: Optional. The version string of the
218218
instrumenting library. Usually this should be the same as
219-
``pkg_resources.get_distribution(instrumenting_library_name).version``.
219+
``importlib.metadata.version(instrumenting_library_name)``.
220220
221221
schema_url: Optional. Specifies the Schema URL of the emitted telemetry.
222222
"""

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

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,15 @@
1414

1515
from logging import getLogger
1616
from os import environ
17+
from sys import version_info
1718
from typing import TYPE_CHECKING, TypeVar, cast
1819

19-
from pkg_resources import iter_entry_points
20+
# FIXME remove when support for 3.7 is dropped.
21+
if version_info.minor == 7:
22+
# pylint: disable=import-error
23+
from importlib_metadata import entry_points # type: ignore
24+
else:
25+
from importlib.metadata import entry_points
2026

2127
if TYPE_CHECKING:
2228
from opentelemetry.metrics import MeterProvider
@@ -30,23 +36,36 @@
3036
def _load_provider(
3137
provider_environment_variable: str, provider: str
3238
) -> Provider:
39+
3340
try:
34-
entry_point = next(
35-
iter_entry_points(
36-
f"opentelemetry_{provider}",
41+
42+
if version_info.minor <= 9:
43+
44+
provider_name = cast(
45+
str,
46+
environ.get(
47+
provider_environment_variable, f"default_{provider}"
48+
),
49+
)
50+
51+
for entry_point in entry_points()[f"opentelemetry_{provider}"]: # type: ignore
52+
if entry_point.name == provider_name: # type: ignore
53+
return cast(Provider, entry_point.load()()) # type: ignore
54+
raise Exception(f"Provider {provider_name} not found")
55+
56+
return cast(
57+
Provider,
58+
entry_points( # type: ignore
59+
group=f"opentelemetry_{provider}",
3760
name=cast(
3861
str,
3962
environ.get(
4063
provider_environment_variable,
4164
f"default_{provider}",
4265
),
4366
),
44-
)
45-
)
46-
return cast(
47-
Provider,
48-
entry_point.load()(),
67+
)[0].load()(),
4968
)
5069
except Exception: # pylint: disable=broad-except
51-
logger.error("Failed to load configured provider %s", provider)
70+
logger.exception("Failed to load configured provider %s", provider)
5271
raise

0 commit comments

Comments
 (0)