File tree Expand file tree Collapse file tree 2 files changed +26
-1
lines changed
Expand file tree Collapse file tree 2 files changed +26
-1
lines changed Original file line number Diff line number Diff line change 3333from ._compat import (
3434 NullFinder ,
3535 install ,
36+ localize_dist ,
3637)
37- from ._functools import method_cache , pass_none
38+ from ._functools import apply , method_cache , pass_none
3839from ._itertools import always_iterable , bucket , unique_everseen
3940from ._meta import PackageMetadata , SimplePath
4041from .compat import py39 , py311
@@ -409,6 +410,7 @@ def locate_file(self, path: str | os.PathLike[str]) -> SimplePath:
409410 """
410411
411412 @classmethod
413+ @apply (localize_dist )
412414 def from_name (cls , name : str ) -> Distribution :
413415 """Return the Distribution for the given package name.
414416
@@ -427,6 +429,7 @@ def from_name(cls, name: str) -> Distribution:
427429 raise PackageNotFoundError (name )
428430
429431 @classmethod
432+ @apply (functools .partial (map , localize_dist ))
430433 def discover (
431434 cls , * , context : Optional [DistributionFinder .Context ] = None , ** kwargs
432435 ) -> Iterable [Distribution ]:
Original file line number Diff line number Diff line change 1+ from __future__ import annotations
2+
3+ import importlib .metadata
14import platform
25import sys
6+ import warnings
7+ from typing import cast
8+
9+ import importlib_metadata
10+
311
412__all__ = ['install' , 'NullFinder' ]
513
@@ -54,3 +62,17 @@ def pypy_partial(val):
5462 """
5563 is_pypy = platform .python_implementation () == 'PyPy'
5664 return val + is_pypy
65+
66+
67+ def localize_dist (
68+ dist : importlib_metadata .Distribution | importlib .metadata .Distribution ,
69+ ) -> importlib_metadata .Distribution :
70+ """
71+ Ensure dist is an :class:`importlib_metadata.Distribution`.
72+ """
73+ if isinstance (dist , importlib_metadata .Distribution ):
74+ return dist
75+ if isinstance (dist , importlib .metadata .PathDistribution ):
76+ return importlib_metadata .PathDistribution (dist ._path )
77+ warnings .warn (f"Unrecognized distribution subclass { dist .__class__ } " )
78+ return cast (importlib_metadata .Distribution , dist )
You can’t perform that action at this time.
0 commit comments