diff --git a/ddtrace/contrib/internal/elasticsearch/patch.py b/ddtrace/contrib/internal/elasticsearch/patch.py index 2b384bcd5c7..e05779032c8 100644 --- a/ddtrace/contrib/internal/elasticsearch/patch.py +++ b/ddtrace/contrib/internal/elasticsearch/patch.py @@ -1,4 +1,6 @@ from importlib import import_module +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as get_package_version from typing import Dict from urllib import parse @@ -23,14 +25,6 @@ from ddtrace.trace import Pin -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as get_package_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as get_package_version - - log = get_logger(__name__) config._add( diff --git a/ddtrace/contrib/internal/pyramid/patch.py b/ddtrace/contrib/internal/pyramid/patch.py index 7ff61aa3e93..ded17f54666 100644 --- a/ddtrace/contrib/internal/pyramid/patch.py +++ b/ddtrace/contrib/internal/pyramid/patch.py @@ -24,12 +24,8 @@ DD_PATCH = "_datadog_patch" -def get_version(): - # type: () -> str - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata # type: ignore[no-redef] +def get_version() -> str: + import importlib.metadata as importlib_metadata return str(importlib_metadata.version(pyramid.__package__)) diff --git a/ddtrace/contrib/internal/pytest_bdd/patch.py b/ddtrace/contrib/internal/pytest_bdd/patch.py index 5827714986f..9c0329549d1 100644 --- a/ddtrace/contrib/internal/pytest_bdd/patch.py +++ b/ddtrace/contrib/internal/pytest_bdd/patch.py @@ -2,12 +2,8 @@ # ddtrace/_monkey.py expects all integrations to define get_version in /patch.py file -def get_version(): - # type: () -> str - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata # type: ignore[no-redef] +def get_version() -> str: + import importlib.metadata as importlib_metadata return str(importlib_metadata.version("pytest-bdd")) diff --git a/ddtrace/internal/gitmetadata.py b/ddtrace/internal/gitmetadata.py index 3c715c445f5..6fcc0c8b9bd 100644 --- a/ddtrace/internal/gitmetadata.py +++ b/ddtrace/internal/gitmetadata.py @@ -57,8 +57,7 @@ def _get_tags_from_env(config): return filtered_git_url, commit_sha, main_package -def _get_tags_from_package(main_package): - # type: (str) -> typing.Tuple[str, str] +def _get_tags_from_package(main_package: str) -> typing.Tuple[str, str]: """ Extracts git metadata from python package's medatada field Project-URL: e.g: Project-URL: source_code_link, https://github.com/user/repo#gitcommitsha&someoptions @@ -67,10 +66,7 @@ def _get_tags_from_package(main_package): if not main_package: return "", "" try: - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata # type: ignore[no-redef] + import importlib.metadata as importlib_metadata source_code_link = "" for val in importlib_metadata.metadata(main_package).get_all("Project-URL") or []: diff --git a/ddtrace/internal/packages.py b/ddtrace/internal/packages.py index dc553017ecd..1e061964db7 100644 --- a/ddtrace/internal/packages.py +++ b/ddtrace/internal/packages.py @@ -25,10 +25,7 @@ @callonce def get_distributions() -> t.Mapping[str, str]: """returns the mapping from distribution name to version for all distributions in a python path""" - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata # type: ignore[no-redef] + import importlib.metadata as importlib_metadata pkgs = {} for dist in importlib_metadata.distributions(): @@ -47,10 +44,7 @@ def get_package_distributions() -> t.Mapping[str, t.List[str]]: """a mapping of importable package names to their distribution name(s)""" global _PACKAGE_DISTRIBUTIONS if _PACKAGE_DISTRIBUTIONS is None: - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata # type: ignore[no-redef] + import importlib.metadata as importlib_metadata # Prefer the official API if available, otherwise fallback to the vendored version if hasattr(importlib_metadata, "packages_distributions"): @@ -89,13 +83,9 @@ def get_module_distribution_versions(module_name: str) -> t.Optional[t.Tuple[str @cached(maxsize=1024) -def get_version_for_package(name): - # type: (str) -> str +def get_version_for_package(name: str) -> str: """returns the version of a package""" - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata # type: ignore[no-redef] + import importlib.metadata as importlib_metadata try: return importlib_metadata.version(name) @@ -149,10 +139,7 @@ def _root_module(path: Path) -> str: @callonce def _package_for_root_module_mapping() -> t.Optional[t.Dict[str, Distribution]]: - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata as importlib_metadata # type: ignore[no-redef] + import importlib.metadata as importlib_metadata namespaces: t.Dict[str, bool] = {} @@ -291,10 +278,7 @@ def _(path: str) -> bool: @cached(maxsize=256) def is_distribution_available(name: str) -> bool: """Determine if a distribution is available in the current environment.""" - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata # type: ignore[no-redef] + import importlib.metadata as importlib_metadata try: importlib_metadata.distribution(name) @@ -318,10 +302,7 @@ def _packages_distributions() -> t.Mapping[str, t.List[str]]: >>> all(isinstance(dist, collections.abc.Sequence) for dist in pkgs.values()) True """ - try: - import importlib.metadata as importlib_metadata - except ImportError: - import importlib_metadata # type: ignore[no-redef] + import importlib.metadata as importlib_metadata pkg_to_dist = collections.defaultdict(list) for dist in importlib_metadata.distributions(): diff --git a/ddtrace/internal/products.py b/ddtrace/internal/products.py index af93be09bae..fcfefbfad0b 100644 --- a/ddtrace/internal/products.py +++ b/ddtrace/internal/products.py @@ -1,8 +1,9 @@ import atexit from collections import defaultdict from collections import deque +from importlib.metadata import entry_points from itertools import chain -import sys +import sys # noqa: F401 import typing as t from ddtrace.internal import forksafe @@ -17,10 +18,6 @@ log = get_logger(__name__) -if sys.version_info < (3, 10): - from importlib_metadata import entry_points -else: - from importlib.metadata import entry_points try: from typing import Protocol # noqa:F401 @@ -55,7 +52,15 @@ def __init__(self) -> None: self._failed: t.Set[str] = set() def _load_products(self) -> None: - for product_plugin in entry_points(group="ddtrace.products"): + eps = entry_points() + if hasattr(eps, "select"): # Python 3.10+ + plugins = eps.select(group="ddtrace.product") + else: # Python <3.10 + plugins = eps.get("ddtrace.product", []) + + for product_plugin in plugins: + if product_plugin.group != "ddtrace.product": + continue name = product_plugin.name log.debug("Discovered product plugin '%s'", name) diff --git a/tests/appsec/integrations/flask_tests/utils.py b/tests/appsec/integrations/flask_tests/utils.py index 3da3c018acc..3120e82b139 100644 --- a/tests/appsec/integrations/flask_tests/utils.py +++ b/tests/appsec/integrations/flask_tests/utils.py @@ -1,9 +1,8 @@ +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version from multiprocessing.pool import ThreadPool import time -from importlib_metadata import PackageNotFoundError -from importlib_metadata import version - _PORT = 8040 try: diff --git a/tests/contrib/integration_registry/registry_update_helpers/integration_registry_manager.py b/tests/contrib/integration_registry/registry_update_helpers/integration_registry_manager.py index 5eecafe042a..f5990c6c6c2 100644 --- a/tests/contrib/integration_registry/registry_update_helpers/integration_registry_manager.py +++ b/tests/contrib/integration_registry/registry_update_helpers/integration_registry_manager.py @@ -31,13 +31,6 @@ def get_cached_packages_distributions(self): if self.packages_distributions is None: try: self.packages_distributions = importlib.metadata.packages_distributions() - except AttributeError: - try: - import importlib_metadata - - self.packages_distributions = importlib_metadata.packages_distributions() - except Exception: - self.packages_distributions = {} except Exception: self.packages_distributions = {} return self.packages_distributions diff --git a/tests/utils.py b/tests/utils.py index 1327beaaff6..45491f874e3 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -3,6 +3,7 @@ import datetime as dt import http.client as httplib from http.client import RemoteDisconnected +import importlib.metadata as importlib_metadata import inspect import json import os @@ -53,11 +54,6 @@ from tests.subprocesstest import SubprocessTestCase -try: - import importlib.metadata as importlib_metadata -except ImportError: - import importlib_metadata - NO_CHILDREN = object() DDTRACE_PATH = Path(__file__).resolve().parents[1] FILE_PATH = Path(__file__).resolve().parent