[Python-checkins] distutils2: add support of is_final in distutils2.version
tarek.ziade
python-checkins at python.org
Sun Jul 4 11:48:40 CEST 2010
tarek.ziade pushed df80119b94b6 to distutils2:
http://hg.python.org/distutils2/rev/df80119b94b6
changeset: 343:df80119b94b6
user: Alexis Metaireau <ametaireau at gmail.com>
date: Fri Jul 02 10:42:54 2010 +0200
summary: add support of is_final in distutils2.version
files: src/distutils2/tests/test_version.py, src/distutils2/version.py
diff --git a/src/distutils2/tests/test_version.py b/src/distutils2/tests/test_version.py
--- a/src/distutils2/tests/test_version.py
+++ b/src/distutils2/tests/test_version.py
@@ -154,6 +154,17 @@
# XXX need to silent the micro version in this case
#assert not VersionPredicate('Ho (<3.0,!=2.6)').match('2.6.3')
+ def test_is_final(self):
+ # VersionPredicate knows is a distribution is a final one or not.
+ final_versions = ('1.0', '1.0.post456')
+ other_versions = ('1.0.dev1', '1.0a2', '1.0c3')
+
+ for version in final_versions:
+ self.assertTrue(V(version).is_final)
+ for version in other_versions:
+ self.assertFalse(V(version).is_final)
+
+
def test_suite():
#README = os.path.join(os.path.dirname(__file__), 'README.txt')
#suite = [doctest.DocFileSuite(README), unittest.makeSuite(VersionTestCase)]
@@ -162,4 +173,3 @@
if __name__ == "__main__":
unittest.main(defaultTest="test_suite")
-
diff --git a/src/distutils2/version.py b/src/distutils2/version.py
--- a/src/distutils2/version.py
+++ b/src/distutils2/version.py
@@ -36,6 +36,7 @@
(?P<postdev>(\.post(?P<post>\d+))?(\.dev(?P<dev>\d+))?)?
$''', re.VERBOSE)
+
class NormalizedVersion(object):
"""A rational version.
@@ -61,7 +62,8 @@
@param error_on_huge_major_num {bool} Whether to consider an
apparent use of a year or full date as the major version number
an error. Default True. One of the observed patterns on PyPI before
- the introduction of `NormalizedVersion` was version numbers like this:
+ the introduction of `NormalizedVersion` was version numbers like
+ this:
2009.01.03
20040603
2005.01
@@ -71,6 +73,7 @@
the possibility of using a version number like "1.0" (i.e.
where the major number is less than that huge major number).
"""
+ self.is_final = True # by default, consider a version as final.
self._parse(s, error_on_huge_major_num)
@classmethod
@@ -101,6 +104,7 @@
block += self._parse_numdots(groups.get('prerelversion'), s,
pad_zeros_length=1)
parts.append(tuple(block))
+ self.is_final = False
else:
parts.append(_FINAL_MARKER)
@@ -115,6 +119,7 @@
postdev.append(_FINAL_MARKER[0])
if dev is not None:
postdev.extend(['dev', int(dev)])
+ self.is_final = False
parts.append(tuple(postdev))
else:
parts.append(_FINAL_MARKER)
@@ -204,6 +209,7 @@
# See http://docs.python.org/reference/datamodel#object.__hash__
__hash__ = object.__hash__
+
def suggest_normalized_version(s):
"""Suggest a normalized version close to the given version string.
@@ -305,7 +311,6 @@
# PyPI stats: ~21 (0.62%) better
rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs)
-
# Tcl/Tk uses "px" for their post release markers
rs = re.sub(r"p(\d+)$", r".post\1", rs)
@@ -322,6 +327,7 @@
_PLAIN_VERSIONS = re.compile(r"^\s*(.*)\s*$")
_SPLIT_CMP = re.compile(r"^\s*(<=|>=|<|>|!=|==)\s*([^\s,]+)\s*$")
+
def _split_predicate(predicate):
match = _SPLIT_CMP.match(predicate)
if match is None:
@@ -368,6 +374,7 @@
return False
return True
+
class _Versions(VersionPredicate):
def __init__(self, predicate):
predicate = predicate.strip()
@@ -379,6 +386,7 @@
self.predicates = [_split_predicate(pred.strip())
for pred in predicates.split(',')]
+
class _Version(VersionPredicate):
def __init__(self, predicate):
predicate = predicate.strip()
@@ -388,6 +396,7 @@
self.name = None
self.predicates = _split_predicate(match.groups()[0])
+
def is_valid_predicate(predicate):
try:
VersionPredicate(predicate)
@@ -396,6 +405,7 @@
else:
return True
+
def is_valid_versions(predicate):
try:
_Versions(predicate)
@@ -404,6 +414,7 @@
else:
return True
+
def is_valid_version(predicate):
try:
_Version(predicate)
@@ -411,4 +422,3 @@
return False
else:
return True
-
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list