From 06ac3a4742228b0230981720060248a7425b2486 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 26 May 2021 13:40:05 -0400 Subject: [PATCH] bpo-44241: Incorporate changes from importlib_metadata 4.1. (#26382) --- Lib/importlib/metadata/__init__.py | 17 +++++++++-------- Lib/importlib/metadata/_adapters.py | 1 + Lib/importlib/metadata/_meta.py | 18 ++++++++++++++++++ .../2021-05-26-13-15-51.bpo-44241.TBqej8.rst | 2 ++ 4 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-05-26-13-15-51.bpo-44241.TBqej8.rst diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py index e2f2e47f390..9637a828c52 100644 --- a/Lib/importlib/metadata/__init__.py +++ b/Lib/importlib/metadata/__init__.py @@ -19,6 +19,7 @@ from ._meta import PackageMetadata from ._collections import FreezableDefaultDict, Pair from ._functools import method_cache from ._itertools import unique_everseen +from ._meta import PackageMetadata, SimplePath from contextlib import suppress from importlib import import_module @@ -612,10 +613,11 @@ class DistributionFinder(MetaPathFinder): @property def path(self): """ - The path that a distribution finder should search. + The sequence of directory path that a distribution finder + should search. - Typically refers to Python package paths and defaults - to ``sys.path``. + Typically refers to Python installed package paths such as + "site-packages" directories and defaults to ``sys.path``. """ return vars(self).get('path', sys.path) @@ -772,11 +774,10 @@ class MetadataPathFinder(DistributionFinder): class PathDistribution(Distribution): - def __init__(self, path): - """Construct a distribution from a path to the metadata directory. + def __init__(self, path: SimplePath): + """Construct a distribution. - :param path: A pathlib.Path or similar object supporting - .joinpath(), __div__, .parent, and .read_text(). + :param path: SimplePath indicating the metadata directory. """ self._path = path @@ -870,7 +871,7 @@ def requires(distribution_name): Return a list of requirements for the named package. :return: An iterator of requirements, suitable for - packaging.requirement.Requirement. + packaging.requirement.Requirement. """ return distribution(distribution_name).requires diff --git a/Lib/importlib/metadata/_adapters.py b/Lib/importlib/metadata/_adapters.py index ab086180fc3..aa460d3eda5 100644 --- a/Lib/importlib/metadata/_adapters.py +++ b/Lib/importlib/metadata/_adapters.py @@ -19,6 +19,7 @@ class Message(email.message.Message): 'Requires-Dist', 'Requires-External', 'Supported-Platform', + 'Dynamic', ], ) ) diff --git a/Lib/importlib/metadata/_meta.py b/Lib/importlib/metadata/_meta.py index 04d9a023536..1a6edbf957d 100644 --- a/Lib/importlib/metadata/_meta.py +++ b/Lib/importlib/metadata/_meta.py @@ -27,3 +27,21 @@ class PackageMetadata(Protocol): """ A JSON-compatible form of the metadata. """ + + +class SimplePath(Protocol): + """ + A minimal subset of pathlib.Path required by PathDistribution. + """ + + def joinpath(self) -> 'SimplePath': + ... # pragma: no cover + + def __div__(self) -> 'SimplePath': + ... # pragma: no cover + + def parent(self) -> 'SimplePath': + ... # pragma: no cover + + def read_text(self) -> str: + ... # pragma: no cover diff --git a/Misc/NEWS.d/next/Library/2021-05-26-13-15-51.bpo-44241.TBqej8.rst b/Misc/NEWS.d/next/Library/2021-05-26-13-15-51.bpo-44241.TBqej8.rst new file mode 100644 index 00000000000..c160cf70abb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-26-13-15-51.bpo-44241.TBqej8.rst @@ -0,0 +1,2 @@ +Incorporate minor tweaks from importlib_metadata 4.1: SimplePath protocol, +support for Metadata 2.2.