Skip to content

Commit 257c475

Browse files
committed
Fix #258: Keep semver._deprecated.compare
Although it breaks consistency with module level functions, it seems it's a much needed/used function. * Function is also available accessing semver.compare * Decorate semver.compare as PendingDeprecationWarning * Adapt `deprecated` decorator and use enforce keyword arguments It's still unclear if we should deprecate this function or not (that's why we use PendingDeprecationWarning). As we don't have a uniform initializer yet, this function stays in _deprecated.py for the time being until we find a better soltuion. See #258 for details
1 parent c40b6a4 commit 257c475

File tree

5 files changed

+55
-37
lines changed

5 files changed

+55
-37
lines changed

docs/api.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ Deprecated Functions in :mod:`semver._deprecated`
2727

2828
.. autofunction:: semver._deprecated.bump_prerelease
2929

30-
.. autofunction:: semver._deprecated.compare
31-
3230
.. autofunction:: semver._deprecated.deprecated
3331

3432
.. autofunction:: semver._deprecated.finalize_version
@@ -78,6 +76,7 @@ Version Handling :mod:`semver.version`
7876
--------------------------------------
7977

8078
.. automodule:: semver.version
79+
:members: compare
8180

8281
.. autoclass:: semver.version.VersionInfo
8382

docs/usage/compare-versions.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ To compare two versions depends on your type:
55

66
* **Two strings**
77

8-
Use :func:`semver.compare`::
8+
Use :func:`~semver.version.compare`::
99

1010
>>> semver.compare("1.0.0", "2.0.0")
1111
-1

src/semver/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
bump_major,
1010
bump_minor,
1111
bump_patch,
12-
bump_prerelease,
1312
compare,
13+
bump_prerelease,
1414
finalize_version,
1515
format_version,
1616
match,

src/semver/_deprecated.py

Lines changed: 52 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
def deprecated(
1818
func: Optional[F] = None,
19+
*,
1920
replace: Optional[str] = None,
2021
version: Optional[str] = None,
22+
remove: Optional[str] = None,
2123
category: Type[Warning] = DeprecationWarning,
2224
) -> Decorator:
2325
"""
@@ -34,15 +36,26 @@ def deprecated(
3436
"""
3537

3638
if func is None:
37-
return partial(deprecated, replace=replace, version=version, category=category)
39+
return partial(
40+
deprecated,
41+
replace=replace,
42+
version=version,
43+
remove=remove,
44+
category=category,
45+
)
3846

3947
@wraps(func)
4048
def wrapper(*args, **kwargs) -> Callable[..., F]:
4149
msg_list = ["Function 'semver.{f}' is deprecated."]
4250

4351
if version:
4452
msg_list.append("Deprecated since version {v}. ")
45-
msg_list.append("This function will be removed in semver 3.")
53+
54+
if not remove:
55+
msg_list.append("This function will be removed in semver 3.")
56+
else:
57+
msg_list.append(str(remove))
58+
4659
if replace:
4760
msg_list.append("Use {r!r} instead.")
4861
else:
@@ -69,6 +82,30 @@ def wrapper(*args, **kwargs) -> Callable[..., F]:
6982
return wrapper
7083

7184

85+
@deprecated(
86+
version="3.0.0",
87+
remove="Still under investigation, see #258.",
88+
category=PendingDeprecationWarning,
89+
)
90+
def compare(ver1: str, ver2: str) -> int:
91+
"""
92+
Compare two versions strings.
93+
94+
:param ver1: first version string
95+
:param ver2: second version string
96+
:return: The return value is negative if ver1 < ver2,
97+
zero if ver1 == ver2 and strictly positive if ver1 > ver2
98+
99+
>>> semver.compare("1.0.0", "2.0.0")
100+
-1
101+
>>> semver.compare("2.0.0", "1.0.0")
102+
1
103+
>>> semver.compare("2.0.0", "2.0.0")
104+
0
105+
"""
106+
return Version.parse(ver1).compare(ver2)
107+
108+
72109
@deprecated(version="2.10.0")
73110
def parse(version):
74111
"""
@@ -126,28 +163,6 @@ def parse_version_info(version):
126163
return Version.parse(version)
127164

128165

129-
@deprecated(version="2.10.0")
130-
def compare(ver1, ver2):
131-
"""
132-
Compare two versions strings.
133-
134-
:param ver1: version string 1
135-
:param ver2: version string 2
136-
:return: The return value is negative if ver1 < ver2,
137-
zero if ver1 == ver2 and strictly positive if ver1 > ver2
138-
:rtype: int
139-
140-
>>> semver.compare("1.0.0", "2.0.0")
141-
-1
142-
>>> semver.compare("2.0.0", "1.0.0")
143-
1
144-
>>> semver.compare("2.0.0", "2.0.0")
145-
0
146-
"""
147-
v1 = Version.parse(ver1)
148-
return v1.compare(ver2)
149-
150-
151166
@deprecated(version="2.10.0")
152167
def match(version, match_expr):
153168
"""
@@ -374,10 +389,16 @@ def replace(version, **parts):
374389

375390

376391
# CLI
377-
cmd_bump = deprecated(cli.cmd_bump, "semver.cli.cmd_bump", "3.0.0")
378-
cmd_check = deprecated(cli.cmd_check, "semver.cli.cmd_check", "3.0.0")
379-
cmd_compare = deprecated(cli.cmd_compare, "semver.cli.cmd_compare", "3.0.0")
380-
cmd_nextver = deprecated(cli.cmd_nextver, "semver.cli.cmd_nextver", "3.0.0")
381-
createparser = deprecated(cli.createparser, "semver.cli.createparser", "3.0.0")
382-
process = deprecated(cli.process, "semver.cli.process", "3.0.0")
383-
main = deprecated(cli.main, "semver.cli.main", "3.0.0")
392+
cmd_bump = deprecated(cli.cmd_bump, replace="semver.cli.cmd_bump", version="3.0.0")
393+
cmd_check = deprecated(cli.cmd_check, replace="semver.cli.cmd_check", version="3.0.0")
394+
cmd_compare = deprecated(
395+
cli.cmd_compare, replace="semver.cli.cmd_compare", version="3.0.0"
396+
)
397+
cmd_nextver = deprecated(
398+
cli.cmd_nextver, replace="semver.cli.cmd_nextver", version="3.0.0"
399+
)
400+
createparser = deprecated(
401+
cli.createparser, replace="semver.cli.createparser", version="3.0.0"
402+
)
403+
process = deprecated(cli.process, replace="semver.cli.process", version="3.0.0")
404+
main = deprecated(cli.main, replace="semver.cli.main", version="3.0.0")

tests/test_deprecated_functions.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from semver import (
66
parse,
77
parse_version_info,
8-
compare,
98
match,
109
max_ver,
1110
min_ver,
@@ -36,7 +35,6 @@
3635
(bump_minor, ("1.2.3",), {}),
3736
(bump_patch, ("1.2.3",), {}),
3837
(bump_prerelease, ("1.2.3",), {}),
39-
(compare, ("1.2.1", "1.2.2"), {}),
4038
(format_version, (3, 4, 5), {}),
4139
(finalize_version, ("1.2.3-rc.5",), {}),
4240
(match, ("1.0.0", ">=1.0.0"), {}),

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy