Skip to content

Commit 5de1df4

Browse files
committed
Convert outdated off pkg_resource stuff.
1 parent 201bbb8 commit 5de1df4

File tree

2 files changed

+30
-18
lines changed

2 files changed

+30
-18
lines changed

pipenv/environment.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import importlib
55
import importlib.metadata
66
import importlib.util
7-
import itertools
87
import json
98
import os
109
import site
@@ -21,6 +20,7 @@
2120
from pipenv.patched.pip._internal.req.req_install import InstallRequirement
2221
from pipenv.patched.pip._vendor.packaging.specifiers import SpecifierSet
2322
from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name
23+
from pipenv.patched.pip._vendor.packaging.version import parse as parse_version
2424
from pipenv.utils import console
2525
from pipenv.utils.fileutils import normalize_path, temp_path
2626
from pipenv.utils.funktools import chunked, unnest
@@ -575,22 +575,22 @@ def get_package_info(
575575
best_candidate_result = candidate_evaluator.compute_best_candidate(
576576
all_candidates
577577
)
578-
remote_version = best_candidate_result.best_candidate.version
578+
remote_version = parse_version(str(best_candidate_result.best_candidate.version))
579579
if best_candidate_result.best_candidate.link.is_wheel:
580580
typ = "wheel"
581581
else:
582582
typ = "sdist"
583583
# This is dirty but makes the rest of the code much cleaner
584584
dist.latest_version = remote_version
585-
dist.latest_filetype = typ
586585
yield dist
586+
587587
def get_outdated_packages(
588588
self, pre: bool = False
589589
) -> list[importlib.metadata.Distribution]:
590590
return [
591591
pkg
592592
for pkg in self.get_package_info(pre=pre)
593-
if pkg.latest_version._key > pkg.parsed_version._key
593+
if pkg.latest_version > parse_version(pkg.version)
594594
]
595595

596596
@classmethod
@@ -618,16 +618,30 @@ def _get_requirements_for_package(cls, node, key_tree, parent=None, chain=None):
618618

619619
def get_package_requirements(self, pkg=None):
620620
from itertools import chain
621-
622-
from pipenv.vendor.pipdeptree._models import PackageDAG
621+
from pipenv.vendor.pipdeptree._models.dag import PackageDAG
622+
from pipenv.vendor.pipdeptree._models.package import DistPackage, ReqPackage, InvalidRequirementError
623+
from pipenv.patched.pip._vendor.packaging.markers import UndefinedEnvironmentName
623624

624625
flatten = chain.from_iterable
625626

626627
packages = self.get_installed_packages()
627628
if pkg:
628629
packages = [p for p in packages if p.name == pkg]
629630

630-
tree = PackageDAG.from_pkgs(packages).sort()
631+
try:
632+
tree = PackageDAG.from_pkgs(packages)
633+
except InvalidRequirementError as e:
634+
console.print(f"Invalid requirement: {e}", style="yellow")
635+
tree = PackageDAG({})
636+
except UndefinedEnvironmentName:
637+
# Handle the case when 'extra' environment variable is not defined
638+
tree = PackageDAG({})
639+
except Exception as e:
640+
# Handle any other exceptions that may occur during PackageDAG initialization
641+
console.print(f"Failed to create PackageDAG: {e}", style="yellow")
642+
tree = PackageDAG({})
643+
644+
tree = tree.sort()
631645
branch_keys = {r.name for r in flatten(tree.values())}
632646
if pkg is None:
633647
nodes = [p for p in tree if p.name not in branch_keys]
@@ -681,9 +695,6 @@ def reverse_dependencies(self):
681695

682696
def get_working_set(self):
683697
"""Retrieve the working set of installed packages for the environment.
684-
685-
:return: The working set for the environment
686-
:rtype: :class:`pkg_resources.WorkingSet`
687698
"""
688699

689700
return importlib.metadata.distributions(path=self.sys_path)

pipenv/routines/outdated.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from collections.abc import Mapping
44

55
from pipenv.patched.pip._vendor.packaging.utils import canonicalize_name
6+
from pipenv.patched.pip._vendor.packaging.version import parse as parse_version
67
from pipenv.routines.lock import do_lock
78
from pipenv.utils.dependencies import (
89
as_pipfile,
@@ -19,8 +20,8 @@ def do_outdated(project, pypi_mirror=None, pre=False, clear=False):
1920

2021
installed_packages = project.environment.get_installed_packages()
2122
outdated_packages = {
22-
canonicalize_name(pkg.project_name): package_info(
23-
pkg.project_name, pkg.parsed_version, pkg.latest_version
23+
canonicalize_name(pkg.name): package_info(
24+
pkg.name, parse_version(pkg.version), pkg.latest_version
2425
)
2526
for pkg in project.environment.get_outdated_packages()
2627
}
@@ -29,9 +30,7 @@ def do_outdated(project, pypi_mirror=None, pre=False, clear=False):
2930
for name, deps in project.environment.reverse_dependencies().items()
3031
}
3132
for result in installed_packages:
32-
dep, _ = expansive_install_req_from_line(
33-
str(result.as_requirement()), expand_env=True
34-
)
33+
dep, _ = expansive_install_req_from_line(f"{result.name}=={result.version}")
3534
packages.update(as_pipfile(dep))
3635

3736
updated_packages = {}
@@ -41,7 +40,7 @@ def do_outdated(project, pypi_mirror=None, pre=False, clear=False):
4140
for category in project.get_package_categories(for_lockfile=True):
4241
for package in lockfile.get(category, []):
4342
try:
44-
updated_packages[package] = lockfile[category][package]["version"]
43+
updated_packages[package] = parse_version(lockfile[category][package]["version"])
4544
except KeyError: # noqa: PERF203
4645
pass
4746
outdated = []
@@ -51,10 +50,12 @@ def do_outdated(project, pypi_mirror=None, pre=False, clear=False):
5150
if norm_name in updated_packages:
5251
version = packages[package]
5352
if isinstance(version, Mapping):
54-
version = version.get("version")
53+
version = parse_version(version.get("version"))
54+
else:
55+
version = parse_version(version)
5556
if updated_packages[norm_name] != version:
5657
outdated.append(
57-
package_info(package, updated_packages[norm_name], packages[package])
58+
package_info(package, str(version), str(updated_packages[norm_name]))
5859
)
5960
elif canonicalize_name(package) in outdated_packages:
6061
skipped.append(outdated_packages[canonicalize_name(package)])

0 commit comments

Comments
 (0)