up
This commit is contained in:
@@ -26,9 +26,9 @@ Every version number class implements the following interface:
|
||||
of the same class, thus must follow the same rules)
|
||||
"""
|
||||
|
||||
import contextlib
|
||||
import re
|
||||
import warnings
|
||||
import contextlib
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
@@ -53,13 +53,14 @@ class Version:
|
||||
if vstring:
|
||||
self.parse(vstring)
|
||||
warnings.warn(
|
||||
"distutils Version classes are deprecated. Use packaging.version instead.",
|
||||
"distutils Version classes are deprecated. "
|
||||
"Use packaging.version instead.",
|
||||
DeprecationWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.__class__.__name__} ('{self}')"
|
||||
return "{} ('{}')".format(self.__class__.__name__, str(self))
|
||||
|
||||
def __eq__(self, other):
|
||||
c = self._cmp(other)
|
||||
@@ -110,6 +111,7 @@ class Version:
|
||||
|
||||
|
||||
class StrictVersion(Version):
|
||||
|
||||
"""Version numbering for anal retentives and software idealists.
|
||||
Implements the standard interface for version number classes as
|
||||
described above. A version number consists of two or three
|
||||
@@ -152,7 +154,7 @@ class StrictVersion(Version):
|
||||
def parse(self, vstring):
|
||||
match = self.version_re.match(vstring)
|
||||
if not match:
|
||||
raise ValueError(f"invalid version number '{vstring}'")
|
||||
raise ValueError("invalid version number '%s'" % vstring)
|
||||
|
||||
(major, minor, patch, prerelease, prerelease_num) = match.group(1, 2, 4, 5, 6)
|
||||
|
||||
@@ -167,6 +169,7 @@ class StrictVersion(Version):
|
||||
self.prerelease = None
|
||||
|
||||
def __str__(self):
|
||||
|
||||
if self.version[2] == 0:
|
||||
vstring = '.'.join(map(str, self.version[0:2]))
|
||||
else:
|
||||
@@ -177,36 +180,42 @@ class StrictVersion(Version):
|
||||
|
||||
return vstring
|
||||
|
||||
def _cmp(self, other):
|
||||
def _cmp(self, other): # noqa: C901
|
||||
if isinstance(other, str):
|
||||
with suppress_known_deprecation():
|
||||
other = StrictVersion(other)
|
||||
elif not isinstance(other, StrictVersion):
|
||||
return NotImplemented
|
||||
|
||||
if self.version == other.version:
|
||||
# versions match; pre-release drives the comparison
|
||||
return self._cmp_prerelease(other)
|
||||
if self.version != other.version:
|
||||
# numeric versions don't match
|
||||
# prerelease stuff doesn't matter
|
||||
if self.version < other.version:
|
||||
return -1
|
||||
else:
|
||||
return 1
|
||||
|
||||
return -1 if self.version < other.version else 1
|
||||
# have to compare prerelease
|
||||
# case 1: neither has prerelease; they're equal
|
||||
# case 2: self has prerelease, other doesn't; other is greater
|
||||
# case 3: self doesn't have prerelease, other does: self is greater
|
||||
# case 4: both have prerelease: must compare them!
|
||||
|
||||
def _cmp_prerelease(self, other):
|
||||
"""
|
||||
case 1: self has prerelease, other doesn't; other is greater
|
||||
case 2: self doesn't have prerelease, other does: self is greater
|
||||
case 3: both or neither have prerelease: compare them!
|
||||
"""
|
||||
if self.prerelease and not other.prerelease:
|
||||
if not self.prerelease and not other.prerelease:
|
||||
return 0
|
||||
elif self.prerelease and not other.prerelease:
|
||||
return -1
|
||||
elif not self.prerelease and other.prerelease:
|
||||
return 1
|
||||
|
||||
if self.prerelease == other.prerelease:
|
||||
return 0
|
||||
elif self.prerelease < other.prerelease:
|
||||
return -1
|
||||
elif self.prerelease and other.prerelease:
|
||||
if self.prerelease == other.prerelease:
|
||||
return 0
|
||||
elif self.prerelease < other.prerelease:
|
||||
return -1
|
||||
else:
|
||||
return 1
|
||||
else:
|
||||
return 1
|
||||
assert False, "never get here"
|
||||
|
||||
|
||||
# end class StrictVersion
|
||||
@@ -278,6 +287,7 @@ class StrictVersion(Version):
|
||||
|
||||
|
||||
class LooseVersion(Version):
|
||||
|
||||
"""Version numbering for anarchists and software realists.
|
||||
Implements the standard interface for version number classes as
|
||||
described above. A version number consists of a series of numbers,
|
||||
@@ -329,7 +339,7 @@ class LooseVersion(Version):
|
||||
return self.vstring
|
||||
|
||||
def __repr__(self):
|
||||
return f"LooseVersion ('{self}')"
|
||||
return "LooseVersion ('%s')" % str(self)
|
||||
|
||||
def _cmp(self, other):
|
||||
if isinstance(other, str):
|
||||
|
||||
Reference in New Issue
Block a user