66from functools import wraps
77import re
88import sys
9+ import warnings
910
1011
1112__version__ = "2.9.1"
@@ -27,6 +28,37 @@ def cmp(a, b):
2728 return (a > b ) - (a < b )
2829
2930
31+ def deprecated (replace = None ):
32+ """
33+ Decorates a function to output a deprecation warning.
34+
35+ This function will be removed once major version 3 of semver is
36+ released.
37+ """
38+ # we can't use the 'nonlocal' keyword in Python2, so we need
39+ # to circumvent that with a dictionary:
40+ r = {"r" : replace }
41+
42+ def decorator (func ):
43+ @wraps (func )
44+ def wrapper (* args , ** kwargs ):
45+ # nonlocal replace
46+ replace = r ["r" ] if r ["r" ] is not None else func .__name__
47+ msg = (
48+ "Function 'semver.{f}' is deprecated. "
49+ "Use the respective 'semver.VersionInfo.{r}' instead."
50+ )
51+ warnings .warn (
52+ msg .format (f = func .__name__ , r = replace ), category = DeprecationWarning
53+ )
54+ return func (* args , ** kwargs )
55+
56+ return wrapper
57+
58+ return decorator
59+
60+
61+ @deprecated ()
3062def parse (version ):
3163 """
3264 Parse version to major, minor, patch, pre-release, build parts.
@@ -186,7 +218,7 @@ def bump_major(self):
186218 VersionInfo(major=4, minor=0, patch=0, prerelease=None, build=None)
187219 """
188220 cls = type (self )
189- return cls (self ._major + 1 )
221+ return cls (self ._major + 1 )
190222
191223 def bump_minor (self ):
192224 """
@@ -201,7 +233,7 @@ def bump_minor(self):
201233 VersionInfo(major=3, minor=5, patch=0, prerelease=None, build=None)
202234 """
203235 cls = type (self )
204- return cls (self ._major , self ._minor + 1 )
236+ return cls (self ._major , self ._minor + 1 )
205237
206238 def bump_patch (self ):
207239 """
@@ -216,7 +248,7 @@ def bump_patch(self):
216248 VersionInfo(major=3, minor=4, patch=6, prerelease=None, build=None)
217249 """
218250 cls = type (self )
219- return cls (self ._major , self ._minor , self ._patch + 1 )
251+ return cls (self ._major , self ._minor , self ._patch + 1 )
220252
221253 def bump_prerelease (self , token = "rc" ):
222254 """
@@ -233,9 +265,7 @@ def bump_prerelease(self, token="rc"):
233265 build=None)
234266 """
235267 cls = type (self )
236- prerelease = _increment_string (
237- self ._prerelease or (token or "rc" ) + ".0"
238- )
268+ prerelease = _increment_string (self ._prerelease or (token or "rc" ) + ".0" )
239269 return cls (self ._major , self ._minor , self ._patch , prerelease )
240270
241271 def bump_build (self , token = "build" ):
@@ -253,9 +283,7 @@ def bump_build(self, token="build"):
253283 build='build.10')
254284 """
255285 cls = type (self )
256- build = _increment_string (
257- self ._build or (token or "build" ) + ".0"
258- )
286+ build = _increment_string (self ._build or (token or "build" ) + ".0" )
259287 return cls (self ._major , self ._minor , self ._patch , self ._prerelease , build )
260288
261289 @comparator
@@ -389,6 +417,7 @@ def _to_dict(obj):
389417 return obj
390418
391419
420+ @deprecated ("parse" )
392421def parse_version_info (version ):
393422 """
394423 Parse version string to a VersionInfo instance.
@@ -569,6 +598,7 @@ def min_ver(ver1, ver2):
569598 return ver2
570599
571600
601+ @deprecated ()
572602def format_version (major , minor , patch , prerelease = None , build = None ):
573603 """
574604 Format a version according to the Semantic Versioning specification.
@@ -601,6 +631,7 @@ def _increment_string(string):
601631 return string
602632
603633
634+ @deprecated ()
604635def bump_major (version ):
605636 """
606637 Raise the major part of the version.
@@ -615,6 +646,7 @@ def bump_major(version):
615646 return str (VersionInfo .parse (version ).bump_major ())
616647
617648
649+ @deprecated ()
618650def bump_minor (version ):
619651 """
620652 Raise the minor part of the version.
@@ -629,6 +661,7 @@ def bump_minor(version):
629661 return str (VersionInfo .parse (version ).bump_minor ())
630662
631663
664+ @deprecated ()
632665def bump_patch (version ):
633666 """
634667 Raise the patch part of the version.
@@ -643,6 +676,7 @@ def bump_patch(version):
643676 return str (VersionInfo .parse (version ).bump_patch ())
644677
645678
679+ @deprecated ()
646680def bump_prerelease (version , token = "rc" ):
647681 """
648682 Raise the prerelease part of the version.
@@ -658,6 +692,7 @@ def bump_prerelease(version, token="rc"):
658692 return str (VersionInfo .parse (version ).bump_prerelease (token ))
659693
660694
695+ @deprecated ()
661696def bump_build (version , token = "build" ):
662697 """
663698 Raise the build part of the version.
@@ -673,6 +708,7 @@ def bump_build(version, token="build"):
673708 return str (VersionInfo .parse (version ).bump_build (token ))
674709
675710
711+ @deprecated ()
676712def finalize_version (version ):
677713 """
678714 Remove any prerelease and build metadata from the version.
@@ -688,6 +724,7 @@ def finalize_version(version):
688724 return VersionInfo .format_version (verinfo .major , verinfo .minor , verinfo .patch )
689725
690726
727+ @deprecated ()
691728def replace (version , ** parts ):
692729 """
693730 Replace one or more parts of a version and return the new string.
0 commit comments