Skip to content

Commit 95e887f

Browse files
committed
Use importlib_metadata for 3.8 and 3.9 only
1 parent d0fb920 commit 95e887f

File tree

6 files changed

+73
-15
lines changed

6 files changed

+73
-15
lines changed

opentelemetry-api/pyproject.toml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ classifiers = [
2727
]
2828
dependencies = [
2929
"Deprecated >= 1.2.6",
30-
# FIXME This should be able to be removed after 3.12 is released if there is a reliable API
31-
# in importlib.metadata.
32-
"importlib-metadata >= 6.0, <= 8.4.0",
30+
"importlib-metadata >= 6.0, <= 8.4.0; python_version >= '3.8' and python_version <= '3.9'",
3331
]
3432
dynamic = [
3533
"version",

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

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

15-
# FIXME: Use importlib.metadata when support for 3.11 is dropped if the rest of
16-
# the supported versions at that time have the same API.
17-
from importlib_metadata import ( # type: ignore
18-
EntryPoint,
19-
EntryPoints,
20-
entry_points,
21-
version,
22-
)
23-
2415
# The importlib-metadata library has introduced breaking changes before to its
2516
# API, this module is kept just to act as a layer between the
2617
# importlib-metadata library and our project if in any case it is necessary to
2718
# do so.
2819

20+
from sys import version_info
21+
22+
if version_info.minor < 10:
23+
24+
# pylint: disable=import-error
25+
from importlib_metadata import ( # type: ignore
26+
EntryPoint,
27+
EntryPoints,
28+
entry_points,
29+
version,
30+
)
31+
32+
else:
33+
34+
from importlib.metadata import (
35+
EntryPoint,
36+
EntryPoints,
37+
entry_points,
38+
version,
39+
)
40+
2941
__all__ = ["entry_points", "version", "EntryPoint", "EntryPoints"]
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
asgiref==3.7.2
2+
Deprecated==1.2.14
3+
iniconfig==2.0.0
4+
packaging==24.0
5+
pluggy==1.5.0
6+
py-cpuinfo==9.0.0
7+
pytest==7.4.4
8+
tomli==2.0.1
9+
typing_extensions==4.10.0
10+
wrapt==1.16.0
11+
zipp==3.19.2
12+
-e opentelemetry-sdk
13+
-e opentelemetry-semantic-conventions
14+
-e tests/opentelemetry-test-utils
15+
-e opentelemetry-api

opentelemetry-api/tests/util/test__importlib_metadata.py

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

15+
from sys import version_info
1516
from unittest import TestCase
1617

1718
from opentelemetry.metrics import MeterProvider
@@ -21,6 +22,37 @@
2122
)
2223

2324

25+
class TestDependencies(TestCase):
26+
27+
def test_dependencies(self):
28+
29+
# pylint: disable=import-outside-toplevel
30+
# pylint: disable=unused-import
31+
# pylint: disable=import-error
32+
if version_info.minor < 10:
33+
try:
34+
import importlib_metadata
35+
36+
except ImportError:
37+
self.fail(
38+
"importlib_metadata not installed when testing with "
39+
f"{version_info.major}.{version_info.minor}"
40+
)
41+
42+
else:
43+
try:
44+
import importlib_metadata # noqa
45+
46+
except ImportError:
47+
pass
48+
49+
else:
50+
self.fail(
51+
"importlib_metadata installed when testing with "
52+
f"{version_info.major}.{version_info.minor}"
53+
)
54+
55+
2456
class TestEntryPoints(TestCase):
2557
def test_entry_points(self):
2658

@@ -44,8 +76,6 @@ def test_uniform_behavior(self):
4476

4577
entry_points = importlib_metadata_entry_points()
4678

47-
self.assertIsInstance(entry_points, EntryPoints)
48-
4979
entry_points = entry_points.select(group="opentelemetry_propagator")
5080
self.assertIsInstance(entry_points, EntryPoints)
5181

tox.ini

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,10 @@ commands_pre =
134134

135135
mypy,mypyinstalled: pip install -r {toxinidir}/mypy-requirements.txt
136136

137-
api: pip install -r {toxinidir}/opentelemetry-api/test-requirements.txt
137+
py3{8,9}-test-opentelemetry-api: pip install -r {toxinidir}/opentelemetry-api/test-requirements-0.txt
138+
pypy3-test-opentelemetry-api: pip install -r {toxinidir}/opentelemetry-api/test-requirements-0.txt
139+
py3{10,11,12}-test-opentelemetry-api: pip install -r {toxinidir}/opentelemetry-api/test-requirements-1.txt
140+
lint-opentelemetry-api: pip install -r {toxinidir}/opentelemetry-api/test-requirements-1.txt
138141

139142
sdk: pip install -r {toxinidir}/opentelemetry-sdk/test-requirements.txt
140143
benchmark-opentelemetry-sdk: pip install -r {toxinidir}/opentelemetry-sdk/benchmark-requirements.txt

0 commit comments

Comments
 (0)