Skip to content

Commit 09a6a68

Browse files
committed
Surface LegacyVersion and LegacySpecifier deprecation warnings
1 parent b0a8317 commit 09a6a68

File tree

4 files changed

+94
-11
lines changed

4 files changed

+94
-11
lines changed

news/12063.removal.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Deprecate legacy version and version specifiers that don't conform to `PEP 440
2+
<https://peps.python.org/pep-0440/>`_

src/pip/_vendor/packaging/specifiers.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,15 +252,18 @@ class LegacySpecifier(_IndividualSpecifier):
252252
def __init__(self, spec: str = "", prereleases: Optional[bool] = None) -> None:
253253
super().__init__(spec, prereleases)
254254

255-
warnings.warn(
256-
"Creating a LegacyVersion has been deprecated and will be "
257-
"removed in the next major release",
258-
DeprecationWarning,
255+
from pip._internal.utils.deprecation import deprecated
256+
257+
deprecated(
258+
reason=(f"This form of version specifier ({spec}) has been deprecated."),
259+
replacement="use PEP 440 compatible version specifiers",
260+
gone_in="23.3",
261+
issue=12063,
259262
)
260263

261264
def _coerce_version(self, version: UnparsedVersion) -> LegacyVersion:
262265
if not isinstance(version, LegacyVersion):
263-
version = LegacyVersion(str(version))
266+
version = LegacyVersion(str(version), silence_deprecation_warning=True)
264267
return version
265268

266269
def _compare_equal(self, prospective: LegacyVersion, spec: str) -> bool:

src/pip/_vendor/packaging/version.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,15 +104,23 @@ def __ne__(self, other: object) -> bool:
104104

105105

106106
class LegacyVersion(_BaseVersion):
107-
def __init__(self, version: str) -> None:
107+
def __init__(
108+
self,
109+
version: str,
110+
silence_deprecation_warning: bool = False,
111+
) -> None:
108112
self._version = str(version)
109113
self._key = _legacy_cmpkey(self._version)
110114

111-
warnings.warn(
112-
"Creating a LegacyVersion has been deprecated and will be "
113-
"removed in the next major release",
114-
DeprecationWarning,
115-
)
115+
if not silence_deprecation_warning:
116+
from pip._internal.utils.deprecation import deprecated
117+
118+
deprecated(
119+
reason=(f"This form of version ({version}) has been deprecated."),
120+
replacement="use PEP 440 compatible versions",
121+
gone_in="23.3",
122+
issue=12063,
123+
)
116124

117125
def __str__(self) -> str:
118126
return self._version
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
Surface LegacyVersion and LegacySpecifier deprecation warnings
2+
as pip deprecation warnings.
3+
4+
---
5+
src/pip/_vendor/packaging/specifiers.py | 12 +++++++-----
6+
src/pip/_vendor/packaging/version.py | 19 +++++++++++++------
7+
2 files changed, 20 insertions(+), 11 deletions(-)
8+
9+
diff --git a/src/pip/_vendor/packaging/specifiers.py b/src/pip/_vendor/packaging/specifiers.py
10+
index 0e218a6f9f7..b0a1cee288b 100644
11+
--- a/src/pip/_vendor/packaging/specifiers.py
12+
+++ b/src/pip/_vendor/packaging/specifiers.py
13+
@@ -252,15 +252,18 @@ class LegacySpecifier(_IndividualSpecifier):
14+
def __init__(self, spec: str = "", prereleases: Optional[bool] = None) -> None:
15+
super().__init__(spec, prereleases)
16+
17+
- warnings.warn(
18+
- "Creating a LegacyVersion has been deprecated and will be "
19+
- "removed in the next major release",
20+
- DeprecationWarning,
21+
+ from pip._internal.utils.deprecation import deprecated
22+
+
23+
+ deprecated(
24+
+ reason=(f"This form of version specifier ({spec}) has been deprecated."),
25+
+ replacement="use PEP 440 compatible version specifiers",
26+
+ gone_in="23.3",
27+
+ issue=12063,
28+
)
29+
30+
def _coerce_version(self, version: UnparsedVersion) -> LegacyVersion:
31+
if not isinstance(version, LegacyVersion):
32+
- version = LegacyVersion(str(version))
33+
+ version = LegacyVersion(str(version), silence_deprecation_warning=True)
34+
return version
35+
36+
def _compare_equal(self, prospective: LegacyVersion, spec: str) -> bool:
37+
diff --git a/src/pip/_vendor/packaging/version.py b/src/pip/_vendor/packaging/version.py
38+
index de9a09a4ed3..cc68ed67424 100644
39+
--- a/src/pip/_vendor/packaging/version.py
40+
+++ b/src/pip/_vendor/packaging/version.py
41+
@@ -104,15 +104,23 @@ def __ne__(self, other: object) -> bool:
42+
43+
44+
class LegacyVersion(_BaseVersion):
45+
- def __init__(self, version: str) -> None:
46+
+ def __init__(
47+
+ self,
48+
+ version: str,
49+
+ silence_deprecation_warning: bool = False,
50+
+ ) -> None:
51+
self._version = str(version)
52+
self._key = _legacy_cmpkey(self._version)
53+
54+
- warnings.warn(
55+
- "Creating a LegacyVersion has been deprecated and will be "
56+
- "removed in the next major release",
57+
- DeprecationWarning,
58+
- )
59+
+ if not silence_deprecation_warning:
60+
+ from pip._internal.utils.deprecation import deprecated
61+
+
62+
+ deprecated(
63+
+ reason=(f"This form of version ({version}) has been deprecated."),
64+
+ replacement="use PEP 440 compatible versions",
65+
+ gone_in="23.3",
66+
+ issue=12063,
67+
+ )
68+
69+
def __str__(self) -> str:
70+
return self._version

0 commit comments

Comments
 (0)