From: Ed Bartosh Date: Sun, 18 May 2014 09:36:34 +0000 (+0300) Subject: obs.py: Refactored get_project API X-Git-Tag: 0.3~28 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dc5d529cc841ddb850e75b1fba7877ae29cf95e0;p=tools%2Frepa.git obs.py: Refactored get_project API 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 --- diff --git a/repa/obs.py b/repa/obs.py index 1dd8870..61b9e20 100644 --- a/repa/obs.py +++ b/repa/obs.py @@ -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))