[Python-checkins] distutils2: fixed version and the two added functions, added test cases

tarek.ziade python-checkins at python.org
Mon May 31 01:56:09 CEST 2010


tarek.ziade pushed 20ebf9c9da67 to distutils2:

http://hg.python.org/distutils2/rev/20ebf9c9da67
changeset:   177:20ebf9c9da67
user:        Josip Djolonga
date:        Thu May 27 20:45:49 2010 +0200
summary:     fixed version and the two added functions, added test cases
files:       src/distutils2/_backport/pkgutil.py, src/distutils2/_backport/tests/fake_dists/choxie-2.0.0.9.dist-info/METADATA, src/distutils2/_backport/tests/fake_dists/towel_stuff-0.1.dist-info/METADATA, src/distutils2/_backport/tests/test_pkgutil.py, src/distutils2/version.py

diff --git a/src/distutils2/_backport/pkgutil.py b/src/distutils2/_backport/pkgutil.py
--- a/src/distutils2/_backport/pkgutil.py
+++ b/src/distutils2/_backport/pkgutil.py
@@ -790,7 +790,7 @@
         obsoleted = dist.metadata['Obsoletes-Dist'] + dist.metadata['Obsoletes']
         for obs in obsoleted:
             o_components = obs.split(' ', 1)
-            if len(o_components) == 1:
+            if len(o_components) == 1 or version is None:
                 if name == o_components[0]:
                     yield dist
                     break
@@ -826,7 +826,7 @@
     if not version is None:
         try:
             predicate = VersionPredicate(name + ' (' + version + ')')
-        except ValueErorr:
+        except ValueError:
             raise DistutilsError('Invalid name or version')
 
     for dist in get_distributions():
@@ -835,7 +835,7 @@
         for p in provided:
             p_components = p.split(' ', 1)
             if len(p_components) == 1 or predicate is None:
-                if name == p:
+                if name == p_components[0]:
                     yield dist
                     break
             else:
diff --git a/src/distutils2/_backport/tests/fake_dists/choxie-2.0.0.9.dist-info/METADATA b/src/distutils2/_backport/tests/fake_dists/choxie-2.0.0.9.dist-info/METADATA
--- a/src/distutils2/_backport/tests/fake_dists/choxie-2.0.0.9.dist-info/METADATA
+++ b/src/distutils2/_backport/tests/fake_dists/choxie-2.0.0.9.dist-info/METADATA
@@ -4,3 +4,5 @@
 Summary: Chocolate with a kick!
 Requires-Dist: towel-stuff (0.1)
 Provides-Dist: truffles (1.0)
+Obsoletes-Dist: truffles (<=0.8,>=0.5)
+Obsoletes-Dist: truffles (<=0.9,>=0.6)
diff --git a/src/distutils2/_backport/tests/fake_dists/towel_stuff-0.1.dist-info/METADATA b/src/distutils2/_backport/tests/fake_dists/towel_stuff-0.1.dist-info/METADATA
--- a/src/distutils2/_backport/tests/fake_dists/towel_stuff-0.1.dist-info/METADATA
+++ b/src/distutils2/_backport/tests/fake_dists/towel_stuff-0.1.dist-info/METADATA
@@ -1,3 +1,5 @@
 Metadata-Version: 1.2
 Name: towel-stuff
 Version: 0.1
+Provides-Dist: truffles (1.1.2)
+Obsoletes-Dist: truffles (!=0.8,<1.0)
diff --git a/src/distutils2/_backport/tests/test_pkgutil.py b/src/distutils2/_backport/tests/test_pkgutil.py
--- a/src/distutils2/_backport/tests/test_pkgutil.py
+++ b/src/distutils2/_backport/tests/test_pkgutil.py
@@ -9,6 +9,8 @@
 except ImportError:
     from md5 import md5
 
+sys.path.append('/home/josip/dev/distutils2/src')
+
 from test.test_support import run_unittest, TESTFN
 
 import distutils2._backport.pkgutil
@@ -260,6 +262,52 @@
             self.assertTrue(isinstance(dist, Distribution))
             self.assertEqual(dist.name, name)
 
+    def test_provides(self):
+        """ Test for looking up distributions by what they provide """
+        from distutils2._backport.pkgutil import provides_distribution
+        from distutils2.errors import DistutilsError
+
+        l = [dist.name for dist in provides_distribution('truffles')]
+        self.assertListEqual(l, ['choxie', 'towel-stuff'])
+
+        l = [dist.name for dist in provides_distribution('truffles', '1.0')]
+        self.assertListEqual(l, ['choxie'])
+
+        l = [dist.name for dist in provides_distribution('truffles', '1.1.2')]
+        self.assertListEqual(l, ['towel-stuff'])
+
+        l = [dist.name for dist in provides_distribution('truffles', '1.1')]
+        self.assertListEqual(l, ['towel-stuff'])
+
+        l = [dist.name for dist in provides_distribution('truffles', '!=1.1,<=2.0')]
+        self.assertListEqual(l, ['choxie'])
+
+        l = [dist.name for dist in provides_distribution('truffles', '>1.0')]
+        self.assertListEqual(l, ['towel-stuff'])
+
+        l = [dist.name for dist in provides_distribution('truffles', '>=1.0')]
+        self.assertListEqual(l, ['choxie', 'towel-stuff'])
+
+    def test_obsoletes(self):
+        """ Test looking for distributions based on what they obsolete """
+        from distutils2._backport.pkgutil import obsoletes_distribution
+        from distutils2.errors import DistutilsError
+
+        l = [dist.name for dist in obsoletes_distribution('truffles', '1.0')]
+        self.assertListEqual(l, [])
+
+        l = [dist.name for dist in obsoletes_distribution('truffles', '0.8')]
+        self.assertListEqual(l, ['choxie'])
+
+        l = [dist.name for dist in obsoletes_distribution('truffles', '0.9.6')]
+        self.assertListEqual(l, ['choxie', 'towel-stuff'])
+
+        l = [dist.name for dist in obsoletes_distribution('truffles', '0.5.2.3')]
+        self.assertListEqual(l, ['choxie', 'towel-stuff'])
+
+        l = [dist.name for dist in obsoletes_distribution('truffles', '0.2')]
+        self.assertListEqual(l, ['towel-stuff'])
+
 
 def test_suite():
     suite = unittest2.TestSuite()
@@ -273,3 +321,16 @@
 
 if __name__ == "__main__":
     test_main()
+
+def test_suite():
+    suite = unittest2.TestSuite()
+    testcase_loader = unittest2.loader.defaultTestLoader.loadTestsFromTestCase
+    suite.addTest(testcase_loader(TestPkgUtilFunctions))
+    suite.addTest(testcase_loader(TestPkgUtilDistribution))
+    return suite
+
+def test_main():
+    run_unittest(test_suite())
+
+if __name__ == "__main__":
+    test_main()
diff --git a/src/distutils2/version.py b/src/distutils2/version.py
--- a/src/distutils2/version.py
+++ b/src/distutils2/version.py
@@ -330,10 +330,11 @@
 
     _operators = {"<": lambda x, y: x < y,
                   ">": lambda x, y: x > y,
-                  "<=": lambda x, y: x <= y,
-                  ">=": lambda x, y: x >= y,
-                  "==": lambda x, y: x == y,
-                  "!=": lambda x, y: x != y}
+                  "<=": lambda x, y: str(x).startswith(str(y)) or x < y,
+                  ">=": lambda x, y: str(x).startswith(str(y)) or x > y,
+                  "==": lambda x, y: str(x).startswith(str(y)),
+                  "!=": lambda x, y: not str(x).startswith(str(y)),
+                  }
 
     def __init__(self, predicate):
         predicate = predicate.strip()

--
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list