Skip to content

remove logic that uses import importlib_metadata #13809

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 9 commits into
base: main
Choose a base branch
from
10 changes: 2 additions & 8 deletions ddtrace/contrib/internal/elasticsearch/patch.py
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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(
Expand Down
8 changes: 2 additions & 6 deletions ddtrace/contrib/internal/pyramid/patch.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__))

Expand Down
8 changes: 2 additions & 6 deletions ddtrace/contrib/internal/pytest_bdd/patch.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,8 @@


# ddtrace/_monkey.py expects all integrations to define get_version in <integration>/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"))

Expand Down
8 changes: 2 additions & 6 deletions ddtrace/internal/gitmetadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 []:
Expand Down
33 changes: 7 additions & 26 deletions ddtrace/internal/packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert these changes

   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

for dist in importlib_metadata.distributions():
Expand All @@ -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"):
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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] = {}

Expand Down Expand Up @@ -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)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check to see if . distribution is supported or changed from 3.8 -> 3.10

Expand All @@ -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():
Expand Down
17 changes: 11 additions & 6 deletions ddtrace/internal/products.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)

Expand Down
5 changes: 2 additions & 3 deletions tests/appsec/integrations/flask_tests/utils.py
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 1 addition & 5 deletions tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Loading