mirror of
https://github.com/python/cpython.git
synced 2025-12-23 09:19:18 +00:00
[3.10] gh-99130: Apply bugfixes from importlib_metadata 4.11.4. (#99132)
This commit is contained in:
parent
e6f066af2e
commit
9a5ca31af0
4 changed files with 49 additions and 9 deletions
|
|
@ -17,7 +17,7 @@ import collections
|
|||
from . import _adapters, _meta
|
||||
from ._meta import PackageMetadata
|
||||
from ._collections import FreezableDefaultDict, Pair
|
||||
from ._functools import method_cache
|
||||
from ._functools import method_cache, pass_none
|
||||
from ._itertools import unique_everseen
|
||||
from ._meta import PackageMetadata, SimplePath
|
||||
|
||||
|
|
@ -938,13 +938,25 @@ class PathDistribution(Distribution):
|
|||
normalized name from the file system path.
|
||||
"""
|
||||
stem = os.path.basename(str(self._path))
|
||||
return self._name_from_stem(stem) or super()._normalized_name
|
||||
return (
|
||||
pass_none(Prepared.normalize)(self._name_from_stem(stem))
|
||||
or super()._normalized_name
|
||||
)
|
||||
|
||||
def _name_from_stem(self, stem):
|
||||
name, ext = os.path.splitext(stem)
|
||||
@staticmethod
|
||||
def _name_from_stem(stem):
|
||||
"""
|
||||
>>> PathDistribution._name_from_stem('foo-3.0.egg-info')
|
||||
'foo'
|
||||
>>> PathDistribution._name_from_stem('CherryPy-3.0.dist-info')
|
||||
'CherryPy'
|
||||
>>> PathDistribution._name_from_stem('face.egg-info')
|
||||
'face'
|
||||
"""
|
||||
filename, ext = os.path.splitext(stem)
|
||||
if ext not in ('.dist-info', '.egg-info'):
|
||||
return
|
||||
name, sep, rest = stem.partition('-')
|
||||
name, sep, rest = filename.partition('-')
|
||||
return name
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -83,3 +83,22 @@ def method_cache(method, cache_wrapper=None):
|
|||
wrapper.cache_clear = lambda: None
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
# From jaraco.functools 3.3
|
||||
def pass_none(func):
|
||||
"""
|
||||
Wrap func so it's not called if its first param is None
|
||||
|
||||
>>> print_text = pass_none(print)
|
||||
>>> print_text('text')
|
||||
text
|
||||
>>> print_text(None)
|
||||
"""
|
||||
|
||||
@functools.wraps(func)
|
||||
def wrapper(param, *args, **kwargs):
|
||||
if param is not None:
|
||||
return func(param, *args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
|
|
|
|||
|
|
@ -89,13 +89,15 @@ class APITests(
|
|||
self.assertIn(ep.dist.name, ('distinfo-pkg', 'egginfo-pkg'))
|
||||
self.assertEqual(ep.dist.version, "1.0.0")
|
||||
|
||||
def test_entry_points_unique_packages(self):
|
||||
# Entry points should only be exposed for the first package
|
||||
# on sys.path with a given name.
|
||||
def test_entry_points_unique_packages_normalized(self):
|
||||
"""
|
||||
Entry points should only be exposed for the first package
|
||||
on sys.path with a given name (even when normalized).
|
||||
"""
|
||||
alt_site_dir = self.fixtures.enter_context(fixtures.tempdir())
|
||||
self.fixtures.enter_context(self.add_sys_path(alt_site_dir))
|
||||
alt_pkg = {
|
||||
"distinfo_pkg-1.1.0.dist-info": {
|
||||
"DistInfo_pkg-1.1.0.dist-info": {
|
||||
"METADATA": """
|
||||
Name: distinfo-pkg
|
||||
Version: 1.1.0
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
Apply bugfixes from `importlib_metadata 4.11.4
|
||||
<https://importlib-metadata.readthedocs.io/en/latest/history.html#v4-11-4>`_,
|
||||
namely: In ``PathDistribution._name_from_stem``, avoid including parts of
|
||||
the extension in the result. In ``PathDistribution._normalized_name``,
|
||||
ensure names loaded from the stem of the filename are also normalized,
|
||||
ensuring duplicate entry points by packages varying only by non-normalized
|
||||
name are hidden.
|
||||
Loading…
Add table
Add a link
Reference in a new issue