[Python-checkins] distutils2: Aadd a get_all_projects method for the XML/RPC client.

tarek.ziade python-checkins at python.org
Sun Dec 26 14:21:45 CET 2010


tarek.ziade pushed 555c26193dda to distutils2:

http://hg.python.org/distutils2/rev/555c26193dda
changeset:   851:555c26193dda
user:        Alexis Metaireau <alexis at notmyidea.org>
date:        Fri Dec 24 17:18:03 2010 +0100
summary:
  Aadd a get_all_projects method for the XML/RPC client.

files:
  distutils2/index/dist.py
  distutils2/index/xmlrpc.py
  distutils2/tests/pypi_server.py
  distutils2/tests/test_index_xmlrpc.py

diff --git a/distutils2/index/dist.py b/distutils2/index/dist.py
--- a/distutils2/index/dist.py
+++ b/distutils2/index/dist.py
@@ -101,7 +101,7 @@
     def is_final(self):
         """proxy to version.is_final"""
         return self.version.is_final
-    
+
     def fetch_distributions(self):
         if self.dists is None:
             self._index.get_distributions(self.name, '%s' % self.version)
@@ -127,7 +127,7 @@
             self.dists[dist_type] = DistInfo(self, dist_type,
                                              index=self._index, **params)
         if python_version:
-            self.dists[dist_type].python_version = python_version 
+            self.dists[dist_type].python_version = python_version
 
     def get_distribution(self, dist_type=None, prefer_source=True):
         """Return a distribution.
@@ -302,7 +302,7 @@
 
     def unpack(self, path=None):
         """Unpack the distribution to the given path.
-        
+
         If not destination is given, creates a temporary location.
 
         Returns the location of the extracted files (root).
@@ -310,10 +310,10 @@
         if not self._unpacked_dir:
             if path is None:
                 path = tempfile.mkdtemp()
-            
+
             filename = self.download()
             content_type = mimetypes.guess_type(filename)[0]
-     
+
             if (content_type == 'application/zip'
                 or filename.endswith('.zip')
                 or filename.endswith('.pybundle')
@@ -351,7 +351,7 @@
     """
     def __init__(self, name, releases=None, contains_hidden=False, index=None):
         self.set_index(index)
-        self.releases = [] 
+        self.releases = []
         self.name = name
         self.contains_hidden = contains_hidden
         if releases:
@@ -404,7 +404,7 @@
                 raise ValueError("%s is not the same project than %s" %
                                  (release.name, self.name))
             version = '%s' % release.version
-                
+
             if not version in self.get_versions():
                 # append only if not already exists
                 self.releases.append(release)
diff --git a/distutils2/index/xmlrpc.py b/distutils2/index/xmlrpc.py
--- a/distutils2/index/xmlrpc.py
+++ b/distutils2/index/xmlrpc.py
@@ -159,8 +159,15 @@
                     index=self._index))
             except IrrationalVersionError, e:
                 logging.warn("Irrational version error found: %s" % e)
+        return [self._projects[p['name'].lower()] for p in projects]
 
-        return [self._projects[p['name'].lower()] for p in projects]
+    def get_all_projects(self):
+        """Return the list of all projects registered in the package index"""
+        projects = self.proxy.list_packages()
+        for name in projects:
+            self.get_releases(name, show_hidden=True)
+
+        return [self._projects[name.lower()] for name in set(projects)]
 
     @property
     def proxy(self):
diff --git a/distutils2/tests/pypi_server.py b/distutils2/tests/pypi_server.py
--- a/distutils2/tests/pypi_server.py
+++ b/distutils2/tests/pypi_server.py
@@ -400,7 +400,7 @@
                 self._dists.append(dist)
         return [r.search_result() for r in results]
 
-    def list_package(self):
+    def list_packages(self):
         return [d.name for d in self._dists]
 
     def package_releases(self, package_name, show_hidden=False):
diff --git a/distutils2/tests/test_index_xmlrpc.py b/distutils2/tests/test_index_xmlrpc.py
--- a/distutils2/tests/test_index_xmlrpc.py
+++ b/distutils2/tests/test_index_xmlrpc.py
@@ -25,6 +25,24 @@
                           invalid="test")
 
     @use_xmlrpc_server()
+    def test_get_all_projects(self, server):
+        client = self._get_client(server)
+        server.xmlrpc.set_distributions([
+            {'name': 'FooBar', 'version': '1.1'},
+            {'name': 'FooBar', 'version': '1.2'},
+            {'name': 'Foo', 'version': '1.1'},
+        ])
+        results = client.get_all_projects()
+        self.assertEqual(2, len(results))
+
+        # check we do have two releases for Foobar's project
+        self.assertEqual(2, len(results[0].releases))
+
+        names = [r.name for r in results]
+        self.assertIn('FooBar', names)
+        self.assertIn('Foo', names)
+
+    @use_xmlrpc_server()
     def test_get_releases(self, server):
         client = self._get_client(server)
         server.xmlrpc.set_distributions([

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


More information about the Python-checkins mailing list