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)