diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2022-03-13 19:53:29 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-13 19:53:29 (GMT) |
commit | b1e286860742e7ba6fadc75e3ddb6c2899a56919 (patch) | |
tree | 9341f9fe28b546763a4ee8229d54c0fec007e4d1 /Lib/importlib | |
parent | c99ac3c364ee21be72263791b71ee8b55f64de08 (diff) | |
download | cpython-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__.py | 57 |
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) |