[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