[Python-checkins] bpo-47004: Sync with importlib_metadata 4.11.3. (#31854)

jaraco webhook-mailer at python.org
Sun Mar 13 15:53:37 EDT 2022


https://github.com/python/cpython/commit/b1e286860742e7ba6fadc75e3ddb6c2899a56919
commit: b1e286860742e7ba6fadc75e3ddb6c2899a56919
branch: main
author: Jason R. Coombs <jaraco at jaraco.com>
committer: jaraco <jaraco at jaraco.com>
date: 2022年03月13日T15:53:29-04:00
summary:
bpo-47004: Sync with importlib_metadata 4.11.3. (#31854)
files:
A Misc/NEWS.d/next/Library/2022-03-13-15-04-05.bpo-47004.SyYpxd.rst
M Doc/library/importlib.metadata.rst
M Lib/importlib/metadata/__init__.py
M Lib/test/test_importlib/test_metadata_api.py
diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst
index 50fc904535b09..a6caa994497ba 100644
--- a/Doc/library/importlib.metadata.rst
+++ b/Doc/library/importlib.metadata.rst
@@ -264,6 +264,7 @@ Python packages or modules::
 
 .. versionadded:: 3.10
 
+.. _distributions:
 
 Distributions
 =============
diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py
index 9fd6e04ae9abf..9ceae8a0e04b5 100644
--- a/Lib/importlib/metadata/__init__.py
+++ b/Lib/importlib/metadata/__init__.py
@@ -152,6 +152,15 @@ class EntryPoint(DeprecatedTuple):
 See `the packaging docs on entry points
 <https://packaging.python.org/specifications/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(
@@ -203,7 +212,7 @@ def attr(self):
 @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 '')
 
 def _for(self, dist):
 vars(self).update(dist=dist)
@@ -221,6 +230,25 @@ def __iter__(self):
 return iter((self.name, self))
 
 def matches(self, **params):
+ """
+ EntryPoint matches the given parameters.
+
+ >>> ep = EntryPoint(group='foo', name='bar', value='bing:bong [extra1, extra2]')
+ >>> ep.matches(group='foo')
+ True
+ >>> ep.matches(name='bar', value='bing:bong [extra1, extra2]')
+ True
+ >>> ep.matches(group='foo', name='other')
+ False
+ >>> ep.matches()
+ True
+ >>> ep.matches(extras=['extra1', 'extra2'])
+ True
+ >>> ep.matches(module='bing')
+ True
+ >>> ep.matches(attr='bong')
+ True
+ """
 attrs = (getattr(self, param) for param in params)
 return all(map(operator.eq, params.values(), attrs))
 
@@ -292,21 +320,15 @@ def wrapped(self, *args, **kwargs):
 self._warn()
 return getattr(super(), method_name)(*args, **kwargs)
 
- return wrapped
-
- for method_name in [
- '__setitem__',
- '__delitem__',
- 'append',
- 'reverse',
- 'extend',
- 'pop',
- 'remove',
- '__iadd__',
- 'insert',
- 'sort',
- ]:
- locals()[method_name] = _wrap_deprecated_method(method_name)
+ return method_name, wrapped
+
+ locals().update(
+ map(
+ _wrap_deprecated_method,
+ '__setitem__ __delitem__ append reverse extend pop remove '
+ '__iadd__ insert sort'.split(),
+ )
+ )
 
 def __add__(self, other):
 if not isinstance(other, tuple):
@@ -660,7 +682,7 @@ def _read_dist_info_reqs(self):
 
 def _read_egg_info_reqs(self):
 source = self.read_text('requires.txt')
- return source and self._deps_from_requires_text(source)
+ return pass_none(self._deps_from_requires_text)(source)
 
 @classmethod
 def _deps_from_requires_text(cls, source):
@@ -765,7 +787,6 @@ def __new__(cls, root):
 
 def __init__(self, root):
 self.root = root
- self.base = os.path.basename(self.root).lower()
 
 def joinpath(self, child):
 return pathlib.Path(self.root, child)
diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py
index 78287c314ced7..b3627cbb75bd7 100644
--- a/Lib/test/test_importlib/test_metadata_api.py
+++ b/Lib/test/test_importlib/test_metadata_api.py
@@ -220,6 +220,16 @@ def test_requires_egg_info(self):
 assert len(deps) == 2
 assert any(dep == 'wheel >= 1.0; python_version >= "2.7"' 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 0000000000000..3cb3b212d89e9
--- /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.


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /