Skip to content

Commit 47a8480

Browse files
sbidoulpradyunsg
authored andcommitted
Upgrade vendored packaging lib
1 parent e8e592a commit 47a8480

31 files changed

+2662
-1143
lines changed

news/packaging.vendor.rst

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Upgrade packaging to 23.2

src/pip/_internal/commands/check.py

-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from pip._internal.operations.check import (
88
check_package_set,
99
create_package_set_from_installed,
10-
warn_legacy_versions_and_specifiers,
1110
)
1211
from pip._internal.utils.misc import write_output
1312

@@ -22,7 +21,6 @@ class CheckCommand(Command):
2221

2322
def run(self, options: Values, args: List[str]) -> int:
2423
package_set, parsing_probs = create_package_set_from_installed()
25-
warn_legacy_versions_and_specifiers(package_set)
2624
missing, conflicting = check_package_set(package_set)
2725

2826
for project_name in missing:

src/pip/_internal/commands/download.py

-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ def run(self, options: Values, args: List[str]) -> int:
139139
downloaded.append(req.name)
140140

141141
preparer.prepare_linked_requirements_more(requirement_set.requirements.values())
142-
requirement_set.warn_legacy_versions_and_specifiers()
143142

144143
if downloaded:
145144
write_output("Successfully downloaded %s", " ".join(downloaded))

src/pip/_internal/commands/index.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import logging
22
from optparse import Values
3-
from typing import Any, Iterable, List, Optional, Union
3+
from typing import Any, Iterable, List, Optional
44

5-
from pip._vendor.packaging.version import LegacyVersion, Version
5+
from pip._vendor.packaging.version import Version
66

77
from pip._internal.cli import cmdoptions
88
from pip._internal.cli.req_command import IndexGroupCommand
@@ -115,7 +115,7 @@ def get_available_package_versions(self, options: Values, args: List[Any]) -> No
115115
ignore_requires_python=options.ignore_requires_python,
116116
)
117117

118-
versions: Iterable[Union[LegacyVersion, Version]] = (
118+
versions: Iterable[Version] = (
119119
candidate.version for candidate in finder.find_all_candidates(query)
120120
)
121121

src/pip/_internal/commands/install.py

-3
Original file line numberDiff line numberDiff line change
@@ -387,9 +387,6 @@ def run(self, options: Values, args: List[str]) -> int:
387387
json.dump(report.to_dict(), f, indent=2, ensure_ascii=False)
388388

389389
if options.dry_run:
390-
# In non dry-run mode, the legacy versions and specifiers check
391-
# will be done as part of conflict detection.
392-
requirement_set.warn_legacy_versions_and_specifiers()
393390
would_install_items = sorted(
394391
(r.metadata["name"], r.metadata["version"])
395392
for r in requirement_set.requirements_to_install

src/pip/_internal/commands/list.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import TYPE_CHECKING, Generator, List, Optional, Sequence, Tuple, cast
55

66
from pip._vendor.packaging.utils import canonicalize_name
7+
from pip._vendor.packaging.version import Version
78

89
from pip._internal.cli import cmdoptions
910
from pip._internal.cli.req_command import IndexGroupCommand
@@ -18,7 +19,6 @@
1819
from pip._internal.utils.misc import tabulate, write_output
1920

2021
if TYPE_CHECKING:
21-
from pip._internal.metadata.base import DistributionVersion
2222

2323
class _DistWithLatestInfo(BaseDistribution):
2424
"""Give the distribution object a couple of extra fields.
@@ -27,7 +27,7 @@ class _DistWithLatestInfo(BaseDistribution):
2727
makes the rest of the code much cleaner.
2828
"""
2929

30-
latest_version: DistributionVersion
30+
latest_version: Version
3131
latest_filetype: str
3232

3333
_ProcessedDists = Sequence[_DistWithLatestInfo]

src/pip/_internal/commands/wheel.py

-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,6 @@ def run(self, options: Values, args: List[str]) -> int:
154154
reqs_to_build.append(req)
155155

156156
preparer.prepare_linked_requirements_more(requirement_set.requirements.values())
157-
requirement_set.warn_legacy_versions_and_specifiers()
158157

159158
# build wheels
160159
build_successes, build_failures = build(

src/pip/_internal/metadata/base.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from pip._vendor.packaging.requirements import Requirement
2626
from pip._vendor.packaging.specifiers import InvalidSpecifier, SpecifierSet
2727
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
28-
from pip._vendor.packaging.version import LegacyVersion, Version
28+
from pip._vendor.packaging.version import Version
2929

3030
from pip._internal.exceptions import NoneMetadataError
3131
from pip._internal.locations import site_packages, user_site
@@ -41,8 +41,6 @@
4141

4242
from ._json import msg_to_json
4343

44-
DistributionVersion = Union[LegacyVersion, Version]
45-
4644
InfoPath = Union[str, pathlib.PurePath]
4745

4846
logger = logging.getLogger(__name__)
@@ -274,7 +272,7 @@ def canonical_name(self) -> NormalizedName:
274272
raise NotImplementedError()
275273

276274
@property
277-
def version(self) -> DistributionVersion:
275+
def version(self) -> Version:
278276
raise NotImplementedError()
279277

280278
@property

src/pip/_internal/metadata/importlib/_dists.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616

1717
from pip._vendor.packaging.requirements import Requirement
1818
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
19+
from pip._vendor.packaging.version import Version
1920
from pip._vendor.packaging.version import parse as parse_version
2021

2122
from pip._internal.exceptions import InvalidWheel, UnsupportedWheel
2223
from pip._internal.metadata.base import (
2324
BaseDistribution,
2425
BaseEntryPoint,
25-
DistributionVersion,
2626
InfoPath,
2727
Wheel,
2828
)
@@ -171,7 +171,7 @@ def canonical_name(self) -> NormalizedName:
171171
return canonicalize_name(name)
172172

173173
@property
174-
def version(self) -> DistributionVersion:
174+
def version(self) -> Version:
175175
return parse_version(self._dist.version)
176176

177177
def is_file(self, path: InfoPath) -> bool:

src/pip/_internal/metadata/pkg_resources.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from pip._vendor import pkg_resources
99
from pip._vendor.packaging.requirements import Requirement
1010
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
11+
from pip._vendor.packaging.version import Version
1112
from pip._vendor.packaging.version import parse as parse_version
1213

1314
from pip._internal.exceptions import InvalidWheel, NoneMetadataError, UnsupportedWheel
@@ -19,7 +20,6 @@
1920
BaseDistribution,
2021
BaseEntryPoint,
2122
BaseEnvironment,
22-
DistributionVersion,
2323
InfoPath,
2424
Wheel,
2525
)
@@ -168,7 +168,7 @@ def canonical_name(self) -> NormalizedName:
168168
return canonicalize_name(self._dist.project_name)
169169

170170
@property
171-
def version(self) -> DistributionVersion:
171+
def version(self) -> Version:
172172
return parse_version(self._dist.version)
173173

174174
def is_file(self, path: InfoPath) -> bool:

src/pip/_internal/operations/check.py

+3-41
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,25 @@
55
from typing import Callable, Dict, List, NamedTuple, Optional, Set, Tuple
66

77
from pip._vendor.packaging.requirements import Requirement
8-
from pip._vendor.packaging.specifiers import LegacySpecifier
98
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
10-
from pip._vendor.packaging.version import LegacyVersion
9+
from pip._vendor.packaging.version import Version
1110

1211
from pip._internal.distributions import make_distribution_for_install_requirement
1312
from pip._internal.metadata import get_default_environment
14-
from pip._internal.metadata.base import DistributionVersion
1513
from pip._internal.req.req_install import InstallRequirement
16-
from pip._internal.utils.deprecation import deprecated
1714

1815
logger = logging.getLogger(__name__)
1916

2017

2118
class PackageDetails(NamedTuple):
22-
version: DistributionVersion
19+
version: Version
2320
dependencies: List[Requirement]
2421

2522

2623
# Shorthands
2724
PackageSet = Dict[NormalizedName, PackageDetails]
2825
Missing = Tuple[NormalizedName, Requirement]
29-
Conflicting = Tuple[NormalizedName, DistributionVersion, Requirement]
26+
Conflicting = Tuple[NormalizedName, Version, Requirement]
3027

3128
MissingDict = Dict[NormalizedName, List[Missing]]
3229
ConflictingDict = Dict[NormalizedName, List[Conflicting]]
@@ -60,8 +57,6 @@ def check_package_set(
6057
package name and returns a boolean.
6158
"""
6259

63-
warn_legacy_versions_and_specifiers(package_set)
64-
6560
missing = {}
6661
conflicting = {}
6762

@@ -152,36 +147,3 @@ def _create_whitelist(
152147
break
153148

154149
return packages_affected
155-
156-
157-
def warn_legacy_versions_and_specifiers(package_set: PackageSet) -> None:
158-
for project_name, package_details in package_set.items():
159-
if isinstance(package_details.version, LegacyVersion):
160-
deprecated(
161-
reason=(
162-
f"{project_name} {package_details.version} "
163-
f"has a non-standard version number."
164-
),
165-
replacement=(
166-
f"to upgrade to a newer version of {project_name} "
167-
f"or contact the author to suggest that they "
168-
f"release a version with a conforming version number"
169-
),
170-
issue=12063,
171-
gone_in="24.1",
172-
)
173-
for dep in package_details.dependencies:
174-
if any(isinstance(spec, LegacySpecifier) for spec in dep.specifier):
175-
deprecated(
176-
reason=(
177-
f"{project_name} {package_details.version} "
178-
f"has a non-standard dependency specifier {dep}."
179-
),
180-
replacement=(
181-
f"to upgrade to a newer version of {project_name} "
182-
f"or contact the author to suggest that they "
183-
f"release a version with a conforming dependency specifiers"
184-
),
185-
issue=12063,
186-
gone_in="24.1",
187-
)

src/pip/_internal/req/req_set.py

-37
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@
22
from collections import OrderedDict
33
from typing import Dict, List
44

5-
from pip._vendor.packaging.specifiers import LegacySpecifier
65
from pip._vendor.packaging.utils import canonicalize_name
7-
from pip._vendor.packaging.version import LegacyVersion
86

97
from pip._internal.req.req_install import InstallRequirement
10-
from pip._internal.utils.deprecation import deprecated
118

129
logger = logging.getLogger(__name__)
1310

@@ -83,37 +80,3 @@ def requirements_to_install(self) -> List[InstallRequirement]:
8380
for install_req in self.all_requirements
8481
if not install_req.constraint and not install_req.satisfied_by
8582
]
86-
87-
def warn_legacy_versions_and_specifiers(self) -> None:
88-
for req in self.requirements_to_install:
89-
version = req.get_dist().version
90-
if isinstance(version, LegacyVersion):
91-
deprecated(
92-
reason=(
93-
f"pip has selected the non standard version {version} "
94-
f"of {req}. In the future this version will be "
95-
f"ignored as it isn't standard compliant."
96-
),
97-
replacement=(
98-
"set or update constraints to select another version "
99-
"or contact the package author to fix the version number"
100-
),
101-
issue=12063,
102-
gone_in="24.1",
103-
)
104-
for dep in req.get_dist().iter_dependencies():
105-
if any(isinstance(spec, LegacySpecifier) for spec in dep.specifier):
106-
deprecated(
107-
reason=(
108-
f"pip has selected {req} {version} which has non "
109-
f"standard dependency specifier {dep}. "
110-
f"In the future this version of {req} will be "
111-
f"ignored as it isn't standard compliant."
112-
),
113-
replacement=(
114-
"set or update constraints to select another version "
115-
"or contact the package author to fix the version number"
116-
),
117-
issue=12063,
118-
gone_in="24.1",
119-
)

src/pip/_internal/resolution/resolvelib/base.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
from dataclasses import dataclass
2-
from typing import FrozenSet, Iterable, Optional, Tuple, Union
2+
from typing import FrozenSet, Iterable, Optional, Tuple
33

44
from pip._vendor.packaging.specifiers import SpecifierSet
55
from pip._vendor.packaging.utils import NormalizedName
6-
from pip._vendor.packaging.version import LegacyVersion, Version
6+
from pip._vendor.packaging.version import Version
77

88
from pip._internal.models.link import Link, links_equivalent
99
from pip._internal.req.req_install import InstallRequirement
1010
from pip._internal.utils.hashes import Hashes
1111

1212
CandidateLookup = Tuple[Optional["Candidate"], Optional[InstallRequirement]]
13-
CandidateVersion = Union[LegacyVersion, Version]
1413

1514

1615
def format_name(project: NormalizedName, extras: FrozenSet[NormalizedName]) -> str:
@@ -115,7 +114,7 @@ def name(self) -> str:
115114
raise NotImplementedError("Override in subclass")
116115

117116
@property
118-
def version(self) -> CandidateVersion:
117+
def version(self) -> Version:
119118
raise NotImplementedError("Override in subclass")
120119

121120
@property

src/pip/_internal/resolution/resolvelib/candidates.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from pip._internal.utils.direct_url_helpers import direct_url_from_link
2222
from pip._internal.utils.misc import normalize_version_info
2323

24-
from .base import Candidate, CandidateVersion, Requirement, format_name
24+
from .base import Candidate, Requirement, format_name
2525

2626
if TYPE_CHECKING:
2727
from .factory import Factory
@@ -145,7 +145,7 @@ def __init__(
145145
ireq: InstallRequirement,
146146
factory: "Factory",
147147
name: Optional[NormalizedName] = None,
148-
version: Optional[CandidateVersion] = None,
148+
version: Optional[Version] = None,
149149
) -> None:
150150
self._link = link
151151
self._source_link = source_link
@@ -190,7 +190,7 @@ def name(self) -> str:
190190
return self.project_name
191191

192192
@property
193-
def version(self) -> CandidateVersion:
193+
def version(self) -> Version:
194194
if self._version is None:
195195
self._version = self.dist.version
196196
return self._version
@@ -257,7 +257,7 @@ def __init__(
257257
template: InstallRequirement,
258258
factory: "Factory",
259259
name: Optional[NormalizedName] = None,
260-
version: Optional[CandidateVersion] = None,
260+
version: Optional[Version] = None,
261261
) -> None:
262262
source_link = link
263263
cache_entry = factory.get_wheel_cache_entry(source_link, name)
@@ -314,7 +314,7 @@ def __init__(
314314
template: InstallRequirement,
315315
factory: "Factory",
316316
name: Optional[NormalizedName] = None,
317-
version: Optional[CandidateVersion] = None,
317+
version: Optional[Version] = None,
318318
) -> None:
319319
super().__init__(
320320
link=link,
@@ -374,7 +374,7 @@ def name(self) -> str:
374374
return self.project_name
375375

376376
@property
377-
def version(self) -> CandidateVersion:
377+
def version(self) -> Version:
378378
if self._version is None:
379379
self._version = self.dist.version
380380
return self._version
@@ -473,7 +473,7 @@ def name(self) -> str:
473473
return format_name(self.base.project_name, self.extras)
474474

475475
@property
476-
def version(self) -> CandidateVersion:
476+
def version(self) -> Version:
477477
return self.base.version
478478

479479
def format_for_error(self) -> str:
@@ -588,7 +588,7 @@ def name(self) -> str:
588588
return REQUIRES_PYTHON_IDENTIFIER
589589

590590
@property
591-
def version(self) -> CandidateVersion:
591+
def version(self) -> Version:
592592
return self._version
593593

594594
def format_for_error(self) -> str:

0 commit comments

Comments
 (0)