summaryrefslogtreecommitdiffstats
path: root/Lib/importlib
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2022-03-13 19:53:29 (GMT)
committerGitHub <noreply@github.com>2022-03-13 19:53:29 (GMT)
commitb1e286860742e7ba6fadc75e3ddb6c2899a56919 (patch)
tree9341f9fe28b546763a4ee8229d54c0fec007e4d1 /Lib/importlib
parentc99ac3c364ee21be72263791b71ee8b55f64de08 (diff)
downloadcpython-b1e286860742e7ba6fadc75e3ddb6c2899a56919.zip
cpython-b1e286860742e7ba6fadc75e3ddb6c2899a56919.tar.gz
cpython-b1e286860742e7ba6fadc75e3ddb6c2899a56919.tar.bz2
bpo-47004: Sync with importlib_metadata 4.11.3. (#31854)
Diffstat (limited to 'Lib/importlib')
-rw-r--r--Lib/importlib/metadata/__init__.py57
1 files changed, 39 insertions, 18 deletions
diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py
index 9fd6e04..9ceae8a 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 @@ class EntryPoint(DeprecatedTuple):
@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 @@ class EntryPoint(DeprecatedTuple):
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 @@ class DeprecatedList(list):
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 @@ class Distribution:
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 @@ class FastPath:
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)