From: Jason R. Coombs Date: Sun, 13 Mar 2022 21:30:07 +0000 (-0400) Subject: [3.9] bpo-47004: Sync with importlib_metadata 4.11.3. (GH-31854). (GH-31859) X-Git-Tag: v3.9.11~15 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=177be52517da9a876a3f9e670f88c4731b906986;p=thirdparty%2FPython%2Fcpython.git [3.9] bpo-47004: Sync with importlib_metadata 4.11.3. (GH-31854). (GH-31859) (cherry picked from commit b1e286860742e7ba6fadc75e3ddb6c2899a56919) Co-authored-by: Jason R. Coombs --- diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 1f73017e05ce..7652d501d9d9 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -199,6 +199,8 @@ function:: ["pytest (>=3.0.0) ; extra == 'test'", "pytest-cov ; extra == 'test'"] +.. _distributions: + Distributions ============= diff --git a/Lib/importlib/metadata.py b/Lib/importlib/metadata.py index 7b8038fd63a8..647fd3e4dbf8 100644 --- a/Lib/importlib/metadata.py +++ b/Lib/importlib/metadata.py @@ -45,6 +45,15 @@ class EntryPoint( See `the packaging docs on entry points `_ for more information. + + >>> ep = EntryPoint( + ... name=None, group=None, value='package.module:attr [extra1, extra2]') + >>> ep.module + 'package.module' + >>> ep.attr + 'attr' + >>> ep.extras + ['extra1', 'extra2'] """ pattern = re.compile( @@ -91,7 +100,7 @@ class EntryPoint( @property def extras(self): match = self.pattern.match(self.value) - return list(re.finditer(r'\w+', match.group('extras') or '')) + return re.findall(r'\w+', match.group('extras') or '') @classmethod def _from_config(cls, config): @@ -308,7 +317,7 @@ class Distribution: def _read_egg_info_reqs(self): source = self.read_text('requires.txt') - return source and self._deps_from_requires_text(source) + return None if source is None else self._deps_from_requires_text(source) @classmethod def _deps_from_requires_text(cls, source): diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index 420fbfeb3a70..cba920ab02c8 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -104,6 +104,16 @@ class APITests( for dep in deps ) + def test_requires_egg_info_empty(self): + fixtures.build_files( + { + 'requires.txt': '', + }, + self.site_dir.joinpath('egginfo_pkg.egg-info'), + ) + deps = requires('egginfo-pkg') + assert deps == [] + def test_requires_dist_info(self): deps = requires('distinfo-pkg') assert len(deps) == 2 diff --git a/Misc/NEWS.d/next/Library/2022-03-13-15-04-05.bpo-47004.SyYpxd.rst b/Misc/NEWS.d/next/Library/2022-03-13-15-04-05.bpo-47004.SyYpxd.rst new file mode 100644 index 000000000000..3cb3b212d89e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-03-13-15-04-05.bpo-47004.SyYpxd.rst @@ -0,0 +1,3 @@ +Apply bugfixes from importlib_metadata 4.11.3, including bugfix for +EntryPoint.extras, which was returning match objects and not the extras +strings.