Skip to content

Commit 2e14fe1

Browse files
authored
Remove usage of pkg_resources (#3047)
* Remove usage of pkg_resources Fixes #2927 * WIP * WIP * Add test case for _load_providers * Fix test case for 3.9 * Fix lint * Fix 3.7 sdk tests * Fix lint * Fix lint * Fix mypy again * WIP * WIP * WIP * WIP * Move to module * Fix SDK * Fix mypy * Refactor load call * Fix mypy * Fix lint * Fix opencensus exporter * Refactor implementation * Add missing dependency * Undo changes in shim * Fix dependency * Revert "Undo changes in shim" This reverts commit bd82b8f. * Update dependencies * Update dependency for opencensus exporter * Add descriptive error
1 parent 1d25153 commit 2e14fe1

File tree

43 files changed

+637
-181
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+637
-181
lines changed

exporter/opentelemetry-exporter-opencensus/pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ classifiers = [
2828
dependencies = [
2929
"grpcio >= 1.0.0, < 2.0.0",
3030
"opencensus-proto >= 0.1.0, < 1.0.0",
31-
"opentelemetry-api ~= 1.3",
32-
"opentelemetry-sdk ~= 1.3",
31+
"opentelemetry-api >= 1.16.0.dev",
32+
"opentelemetry-sdk >= 1.15",
3333
"protobuf ~= 3.13",
3434
"setuptools >= 16.0",
3535
]

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

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
import os
16-
import socket
17-
import time
15+
from os import getpid
16+
from socket import gethostname
17+
from time import time
1818

19-
import pkg_resources
19+
# pylint: disable=wrong-import-position
2020
from google.protobuf.timestamp_pb2 import Timestamp
2121
from opencensus.proto.agent.common.v1 import common_pb2
2222
from opencensus.proto.trace.v1 import trace_pb2
@@ -25,10 +25,9 @@
2525
__version__ as opencensusexporter_exporter_version,
2626
)
2727
from opentelemetry.trace import SpanKind
28+
from opentelemetry.util._importlib_metadata import version
2829

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

3332

3433
def proto_timestamp_from_time_ns(time_ns):
@@ -88,11 +87,9 @@ def get_node(service_name, host_name):
8887
"""
8988
return common_pb2.Node(
9089
identifier=common_pb2.ProcessIdentifier(
91-
host_name=socket.gethostname() if host_name is None else host_name,
92-
pid=os.getpid(),
93-
start_timestamp=proto_timestamp_from_time_ns(
94-
int(time.time() * 1e9)
95-
),
90+
host_name=gethostname() if host_name is None else host_name,
91+
pid=getpid(),
92+
start_timestamp=proto_timestamp_from_time_ns(int(time() * 1e9)),
9693
),
9794
library_info=common_pb2.LibraryInfo(
9895
language=common_pb2.LibraryInfo.Language.Value("PYTHON"),

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/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ classifiers = [
2727
dependencies = [
2828
"Deprecated >= 1.2.6",
2929
"setuptools >= 16.0",
30+
"importlib-metadata >= 5.0.0; python_version=='3.7'"
3031
]
3132
dynamic = [
3233
"version",

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
from os import environ
2020
from uuid import uuid4
2121

22-
from pkg_resources import iter_entry_points
23-
24-
from opentelemetry.context.context import Context, _RuntimeContext
22+
# pylint: disable=wrong-import-position
23+
from opentelemetry.context.context import Context, _RuntimeContext # noqa
2524
from opentelemetry.environment_variables import OTEL_PYTHON_CONTEXT
25+
from opentelemetry.util._importlib_metadata import entry_points
2626

2727
logger = logging.getLogger(__name__)
2828
_RUNTIME_CONTEXT = None # type: typing.Optional[_RuntimeContext]
@@ -41,27 +41,33 @@ def _load_runtime_context(func: _F) -> _F:
4141
@wraps(func) # type: ignore[misc]
4242
def wrapper( # type: ignore[misc]
4343
*args: typing.Tuple[typing.Any, typing.Any],
44-
**kwargs: typing.Dict[typing.Any, typing.Any]
44+
**kwargs: typing.Dict[typing.Any, typing.Any],
4545
) -> typing.Optional[typing.Any]:
4646
global _RUNTIME_CONTEXT # pylint: disable=global-statement
4747

4848
with _RUNTIME_CONTEXT_LOCK:
4949
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
50+
# FIXME use a better implementation of a configuration manager
51+
# to avoid having to get configuration values straight from
52+
# environment variables
5253
default_context = "contextvars_context"
5354

5455
configured_context = environ.get(
5556
OTEL_PYTHON_CONTEXT, default_context
5657
) # type: str
5758
try:
58-
_RUNTIME_CONTEXT = next(
59-
iter_entry_points(
60-
"opentelemetry_context", 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,
65+
)
6166
)
6267
).load()()
68+
6369
except Exception: # pylint: disable=broad-except
64-
logger.error(
70+
logger.exception(
6571
"Failed to load context: %s", configured_context
6672
)
6773
return func(*args, **kwargs) # type: ignore[misc]

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: 16 additions & 7 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-
75-
from pkg_resources import iter_entry_points
73+
from typing import Optional
7674

7775
from opentelemetry.context.context import Context
7876
from opentelemetry.environment_variables import OTEL_PROPAGATORS
7977
from opentelemetry.propagators import composite, textmap
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.
@@ -129,20 +128,30 @@ def inject(
129128
"tracecontext,baggage",
130129
)
131130

131+
132132
for propagator in environ_propagators.split(","):
133133
propagator = propagator.strip()
134+
134135
try:
136+
135137
propagators.append( # type: ignore
136138
next( # type: ignore
137-
iter_entry_points("opentelemetry_propagator", propagator)
139+
iter( # type: ignore
140+
entry_points( # type: ignore
141+
group="opentelemetry_propagator",
142+
name=propagator,
143+
)
144+
)
138145
).load()()
139146
)
147+
140148
except Exception: # pylint: disable=broad-except
141149
logger.exception(
142-
"Failed to load configured propagator `%s`", propagator
150+
"Failed to load configured propagator: %s", propagator
143151
)
144152
raise
145153

154+
146155
_HTTP_TEXT_FORMAT = composite.CompositePropagator(propagators) # type: ignore
147156

148157

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
"""

0 commit comments

Comments
 (0)