Skip to content

Commit 8fbd304

Browse files
chojomokmabdinur
andauthored
chore: remove logic that uses import importlib_metadata (#13809)
Remove importlib_metadata dependency since it is no longer needed. Support for Python 3.7 has been dropped, and dd-trace-py now requires Python 3.8 or later, which includes importlib.metadata in the standard library. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Co-authored-by: Munir Abdinur <munir_abdinur@hotmail.com> Co-authored-by: Munir Abdinur <munir.abdinur@datadoghq.com>
1 parent 72a05ce commit 8fbd304

File tree

12 files changed

+30
-74
lines changed

12 files changed

+30
-74
lines changed

ddtrace/contrib/internal/elasticsearch/patch.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from importlib import import_module
2+
from importlib.metadata import PackageNotFoundError
3+
from importlib.metadata import version as get_package_version
24
from typing import Dict
35
from urllib import parse
46

@@ -23,14 +25,6 @@
2325
from ddtrace.trace import Pin
2426

2527

26-
try:
27-
from importlib.metadata import PackageNotFoundError
28-
from importlib.metadata import version as get_package_version
29-
except ImportError:
30-
from importlib_metadata import PackageNotFoundError
31-
from importlib_metadata import version as get_package_version
32-
33-
3428
log = get_logger(__name__)
3529

3630
config._add(

ddtrace/contrib/internal/pyramid/patch.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,8 @@
2424
DD_PATCH = "_datadog_patch"
2525

2626

27-
def get_version():
28-
# type: () -> str
29-
try:
30-
import importlib.metadata as importlib_metadata
31-
except ImportError:
32-
import importlib_metadata # type: ignore[no-redef]
27+
def get_version() -> str:
28+
import importlib.metadata as importlib_metadata
3329

3430
return str(importlib_metadata.version(pyramid.__package__))
3531

ddtrace/contrib/internal/pytest_bdd/patch.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,8 @@
22

33

44
# ddtrace/_monkey.py expects all integrations to define get_version in <integration>/patch.py file
5-
def get_version():
6-
# type: () -> str
7-
try:
8-
import importlib.metadata as importlib_metadata
9-
except ImportError:
10-
import importlib_metadata # type: ignore[no-redef]
5+
def get_version() -> str:
6+
import importlib.metadata as importlib_metadata
117

128
return str(importlib_metadata.version("pytest-bdd"))
139

ddtrace/internal/gitmetadata.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ def _get_tags_from_env():
6060
return filtered_git_url, commit_sha, main_package
6161

6262

63-
def _get_tags_from_package(main_package):
64-
# type: (str) -> typing.Tuple[str, str]
63+
def _get_tags_from_package(main_package: str) -> typing.Tuple[str, str]:
6564
"""
6665
Extracts git metadata from python package's medatada field Project-URL:
6766
e.g: Project-URL: source_code_link, https://github.com/user/repo#gitcommitsha&someoptions
@@ -70,10 +69,7 @@ def _get_tags_from_package(main_package):
7069
if not main_package:
7170
return "", ""
7271
try:
73-
try:
74-
import importlib.metadata as importlib_metadata
75-
except ImportError:
76-
import importlib_metadata # type: ignore[no-redef]
72+
import importlib.metadata as importlib_metadata
7773

7874
source_code_link = ""
7975
for val in importlib_metadata.metadata(main_package).get_all("Project-URL") or []:

ddtrace/internal/packages.py

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@
2525
@callonce
2626
def get_distributions() -> t.Mapping[str, str]:
2727
"""returns the mapping from distribution name to version for all distributions in a python path"""
28-
try:
29-
import importlib.metadata as importlib_metadata
30-
except ImportError:
31-
import importlib_metadata # type: ignore[no-redef]
28+
import importlib.metadata as importlib_metadata
3229

3330
pkgs = {}
3431
for dist in importlib_metadata.distributions():
@@ -47,10 +44,7 @@ def get_package_distributions() -> t.Mapping[str, t.List[str]]:
4744
"""a mapping of importable package names to their distribution name(s)"""
4845
global _PACKAGE_DISTRIBUTIONS
4946
if _PACKAGE_DISTRIBUTIONS is None:
50-
try:
51-
import importlib.metadata as importlib_metadata
52-
except ImportError:
53-
import importlib_metadata # type: ignore[no-redef]
47+
import importlib.metadata as importlib_metadata
5448

5549
# Prefer the official API if available, otherwise fallback to the vendored version
5650
if hasattr(importlib_metadata, "packages_distributions"):
@@ -89,13 +83,9 @@ def get_module_distribution_versions(module_name: str) -> t.Optional[t.Tuple[str
8983

9084

9185
@cached(maxsize=1024)
92-
def get_version_for_package(name):
93-
# type: (str) -> str
86+
def get_version_for_package(name: str) -> str:
9487
"""returns the version of a package"""
95-
try:
96-
import importlib.metadata as importlib_metadata
97-
except ImportError:
98-
import importlib_metadata # type: ignore[no-redef]
88+
import importlib.metadata as importlib_metadata
9989

10090
try:
10191
return importlib_metadata.version(name)
@@ -149,10 +139,7 @@ def _root_module(path: Path) -> str:
149139

150140
@callonce
151141
def _package_for_root_module_mapping() -> t.Optional[t.Dict[str, Distribution]]:
152-
try:
153-
import importlib.metadata as importlib_metadata
154-
except ImportError:
155-
import importlib_metadata as importlib_metadata # type: ignore[no-redef]
142+
import importlib.metadata as importlib_metadata
156143

157144
namespaces: t.Dict[str, bool] = {}
158145

@@ -290,10 +277,7 @@ def _(path: str) -> bool:
290277
@cached(maxsize=256)
291278
def is_distribution_available(name: str) -> bool:
292279
"""Determine if a distribution is available in the current environment."""
293-
try:
294-
import importlib.metadata as importlib_metadata
295-
except ImportError:
296-
import importlib_metadata # type: ignore[no-redef]
280+
import importlib.metadata as importlib_metadata
297281

298282
try:
299283
importlib_metadata.distribution(name)
@@ -317,10 +301,7 @@ def _packages_distributions() -> t.Mapping[str, t.List[str]]:
317301
>>> all(isinstance(dist, collections.abc.Sequence) for dist in pkgs.values())
318302
True
319303
"""
320-
try:
321-
import importlib.metadata as importlib_metadata
322-
except ImportError:
323-
import importlib_metadata # type: ignore[no-redef]
304+
import importlib.metadata as importlib_metadata
324305

325306
pkg_to_dist = collections.defaultdict(list)
326307
for dist in importlib_metadata.distributions():

ddtrace/internal/products.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import atexit
22
from collections import defaultdict
33
from collections import deque
4+
from importlib.metadata import entry_points
45
from itertools import chain
56
import sys
67
import typing as t
@@ -17,10 +18,17 @@
1718

1819
log = get_logger(__name__)
1920

20-
if sys.version_info < (3, 10):
21-
from importlib_metadata import entry_points
21+
22+
if sys.version_info >= (3, 10):
23+
24+
def get_product_entry_points() -> t.List[t.Any]:
25+
return list(entry_points(group="ddtrace.products"))
26+
2227
else:
23-
from importlib.metadata import entry_points
28+
29+
def get_product_entry_points() -> t.List[t.Any]:
30+
return [ep for _, eps in entry_points().items() for ep in eps if ep.group == "ddtrace.products"]
31+
2432

2533
try:
2634
from typing import Protocol # noqa:F401
@@ -55,7 +63,7 @@ def __init__(self) -> None:
5563
self._failed: t.Set[str] = set()
5664

5765
def _load_products(self) -> None:
58-
for product_plugin in entry_points(group="ddtrace.products"):
66+
for product_plugin in get_product_entry_points():
5967
name = product_plugin.name
6068
log.debug("Discovered product plugin '%s'", name)
6169

lib-injection/sources/requirements.csv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ bytecode,>=0.15.1,python_version~='3.12.0'
44
bytecode,>=0.14.0,python_version~='3.11.0'
55
bytecode,>=0.13.0,python_version<'3.11'
66
envier,~=0.6.1,
7-
importlib_metadata,<=6.5.0,python_version<'3.8'
87
legacy-cgi,>=2.0.0,python_version>='3.13.0'
98
opentelemetry-api,>=1,
109
protobuf,>=3,

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ dependencies = [
3636
"bytecode>=0.14.0; python_version~='3.11.0'",
3737
"bytecode>=0.13.0; python_version<'3.11'",
3838
"envier~=0.6.1",
39-
"importlib_metadata<=6.5.0; python_version<'3.8'",
4039
"legacy-cgi>=2.0.0; python_version>='3.13.0'",
4140
"opentelemetry-api>=1",
4241
"protobuf>=3",

requirements.csv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ bytecode,>=0.15.1,python_version~='3.12.0'
44
bytecode,>=0.14.0,python_version~='3.11.0'
55
bytecode,>=0.13.0,python_version<'3.11'
66
envier,~=0.6.1,
7-
importlib_metadata,<=6.5.0,python_version<'3.8'
87
legacy-cgi,>=2.0.0,python_version>='3.13.0'
98
opentelemetry-api,>=1,
109
protobuf,>=3,

tests/appsec/integrations/flask_tests/utils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1+
from importlib.metadata import PackageNotFoundError
2+
from importlib.metadata import version
13
from multiprocessing.pool import ThreadPool
24
import time
35

4-
from importlib_metadata import PackageNotFoundError
5-
from importlib_metadata import version
6-
76

87
_PORT = 8040
98
try:

0 commit comments

Comments
 (0)