diff --git a/importlib_metadata/__init__.py b/importlib_metadata/__init__.py index 6962eee2..0933d433 100644 --- a/importlib_metadata/__init__.py +++ b/importlib_metadata/__init__.py @@ -35,8 +35,9 @@ install, localize_dist, localize_metadata, + localize_package_path, ) -from ._functools import apply, method_cache, pass_none +from ._functools import apply, compose, method_cache, pass_none from ._itertools import always_iterable, bucket, unique_everseen from ._meta import PackageMetadata, SimplePath from .compat import py39, py311 @@ -529,6 +530,7 @@ def entry_points(self) -> EntryPoints: return EntryPoints._from_text_for(self.read_text('entry_points.txt'), self) @property + @apply(pass_none(compose(list, functools.partial(map, localize_package_path)))) def files(self) -> Optional[List[PackagePath]]: """Files in this distribution. diff --git a/importlib_metadata/_compat.py b/importlib_metadata/_compat.py index a6daefcd..deb58dc0 100644 --- a/importlib_metadata/_compat.py +++ b/importlib_metadata/_compat.py @@ -91,3 +91,13 @@ def localize_metadata( if isinstance(input, importlib_metadata._adapters.Message): return input return importlib_metadata._adapters.Message(input) + + +def localize_package_path( + input: importlib_metadata.PackagePath | importlib.metadata.PackagePath, +) -> importlib_metadata.PackagePath: + if isinstance(input, importlib_metadata.PackagePath): + return input + replacement = importlib_metadata.PackagePath(input) + vars(replacement).update(vars(input)) + return replacement