From a26d67784ac014c009c18b154e008a56e60922c8 Mon Sep 17 00:00:00 2001 From: Matt Davis Date: Tue, 28 May 2024 23:19:59 -0400 Subject: [PATCH] check pt progress (working on power shell, but pyenv thing needs work for git bash). --- pipenv/vendor/pythonfinder/models/path.py | 13 +++++++++---- pipenv/vendor/pythonfinder/models/python.py | 18 +++++++++++------- pipenv/vendor/pythonfinder/utils.py | 2 +- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/pipenv/vendor/pythonfinder/models/path.py b/pipenv/vendor/pythonfinder/models/path.py index 2962a5e6b..6a15dcdfd 100644 --- a/pipenv/vendor/pythonfinder/models/path.py +++ b/pipenv/vendor/pythonfinder/models/path.py @@ -216,7 +216,7 @@ def _get_last_instance(self, path) -> int: reversed_paths = reversed(self.path_order) paths = [resolve_path(p) for p in reversed_paths] normalized_target = resolve_path(path) - last_instance = next(iter(p for p in paths if normalized_target in p), None) + last_instance = next(iter(p for p in paths if normalized_target == p), None) if last_instance is None: raise ValueError(f"No instance found on path for target: {path!s}") path_index = self.path_order.index(last_instance) @@ -263,15 +263,20 @@ def _remove_path(self, path) -> SystemPath: def _setup_windows_launcher(self) -> SystemPath: if os.name == "nt": - windows_finder = PythonFinder.create() + windows_finder = PythonFinder.create( + root=Path("."), # Use appropriate root directory for Windows launcher + sort_function=None, # Provide a sorting function if needed + version_glob_path="python*", # Adjust the glob pattern if necessary + ignore_unsupported=True, + ) for launcher_entry in windows_finder.find_python_versions_from_windows_launcher(): version = PythonVersion.from_windows_launcher(launcher_entry) - windows_finder.versions[version.version_tuple] = PathEntry.create( + path_entry = PathEntry.create( path=launcher_entry.install_path, is_root=True, only_python=True, - pythons={launcher_entry.install_path: version}, ) + windows_finder._versions[version.version_tuple] = path_entry self._register_finder("windows", windows_finder) return self diff --git a/pipenv/vendor/pythonfinder/models/python.py b/pipenv/vendor/pythonfinder/models/python.py index 60b4417c7..ac5656078 100644 --- a/pipenv/vendor/pythonfinder/models/python.py +++ b/pipenv/vendor/pythonfinder/models/python.py @@ -39,13 +39,18 @@ logger = logging.getLogger(__name__) +@dataclasses.dataclass class WindowsLauncherEntry: - def __init__(self, version: Version, install_path: str, executable_path: str, company: str, architecture: Optional[str]): - self.version = version - self.install_path = install_path - self.executable_path = executable_path - self.company = company - self.architecture = architecture + version: Version + install_path: str + executable_path: str + windowed_executable_path: str + company: str + architecture: Optional[str] + display_name: Optional[str] + support_url: Optional[str] + tag: Optional[str] + @dataclasses.dataclass @@ -162,7 +167,6 @@ def _iter_versions(self) -> Iterator[tuple[Path, PathEntry, tuple]]: ) yield (base_path, entry, version_tuple) - @cached_property def versions(self) -> DefaultDict[tuple, PathEntry]: if not self._versions: for _, entry, version_tuple in self._iter_versions(): diff --git a/pipenv/vendor/pythonfinder/utils.py b/pipenv/vendor/pythonfinder/utils.py index 4c4e0bd58..f4845a7c6 100644 --- a/pipenv/vendor/pythonfinder/utils.py +++ b/pipenv/vendor/pythonfinder/utils.py @@ -339,7 +339,7 @@ def split_version_and_name( def is_in_path(path, parent): - return resolve_path(str(path)).startswith(resolve_path(str(parent))) + return str(resolve_path(str(path))).startswith(str(resolve_path(str(parent)))) def expand_paths(path, only_python=True) -> Iterator: