obs.py: Refactored get_project API
authorEd Bartosh <eduard.bartosh@intel.com>
Sun, 18 May 2014 09:36:34 +0000 (12:36 +0300)
committerEd Bartosh <eduard.bartosh@intel.com>
Mon, 19 May 2014 08:14:46 +0000 (11:14 +0300)
Separated get_project_list API from get_project as it will be called
by repa diff and other higher level code.

git_project performs a lot more queries then just getting list of
projects as it als gets build results and descriptions for every
project. git_project_list only gets the list of projects, which is
much faster.

Change-Id: I285b19b478d384cd4473ba2b8a8ef9637c611538
Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
repa/obs.py

index 1dd88708e18914b70fff511f4042410bdfb7e7ef..61b9e203962c08e565b133572a7580353a9bb612 100644 (file)
@@ -84,32 +84,39 @@ class OBS(OSC):
         """Wrapper around get_description to be able to use @retry."""
         return self.get_description(project)
 
-    def get_projects(self, regexp='', processes=0):
-        """List projects with attributes."""
+    def get_project_list(self, regexp=''):
+        """Get list of projects matching regexp."""
         try:
             projects = core.meta_get_project_list(self.apiurl)
         except OSCError as err:
             raise RepaException("cat't get list of projects from %s: %s" %
                                 (self.apiurl, err))
 
+        for proj in projects:
+            if regexp and re.match(regexp, proj):
+                yield proj
+
+
+    def get_projects(self, regexp='', processes=0):
+        """List projects with attributes."""
+        projects = list(self.get_project_list(regexp))
+
         if processes > 1:
             from multiprocessing.pool import ThreadPool
             pool = ThreadPool(processes=processes)
             processes = {}
             for project in projects:
-                if regexp and re.match(regexp, project):
-                    processes[project] = (
-                        pool.apply_async(self.get_descr, [project]),
-                        pool.apply_async(self.get_build_results, [project]))
+                processes[project] = (
+                    pool.apply_async(self.get_descr, [project]),
+                    pool.apply_async(self.get_build_results, [project]))
 
         for project in projects:
-            if regexp and re.match(regexp, project):
-                if processes > 1:
-                    yield (project, processes[project][0].get(),
-                                    processes[project][1].get())
-                else:
-                    yield (project, self.get_descr(project),
-                                    self.get_build_results(project))
+            if processes > 1:
+                yield (project, processes[project][0].get(),
+                                processes[project][1].get())
+            else:
+                yield (project, self.get_descr(project),
+                                self.get_build_results(project))
 
 
     @retry((OSCError, HTTPError))