From 7580e5504d003bf57a38a7bb5df1629849843d98 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Thu, 16 Mar 2017 14:18:46 -0500 Subject: [PATCH 1/7] stagingapi: allow staging to be None in project_status() to return all. --- osclib/stagingapi.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osclib/stagingapi.py b/osclib/stagingapi.py index faea488e..0f0cbbfc 100644 --- a/osclib/stagingapi.py +++ b/osclib/stagingapi.py @@ -816,11 +816,11 @@ class StagingAPI(object): return log.getvalue() - def project_status(self, project): - short = self.extract_staging_short(project) - query = {'format': 'json'} - url = self.makeurl(('project', 'staging_projects', self.project, short), - query=query) + def project_status(self, staging=None): + path = ('project', 'staging_projects', self.project) + if staging: + path += (self.extract_staging_short(staging),) + url = self.makeurl(path, {'format': 'json'}) return json.load(self.retried_GET(url)) def check_project_status(self, project): From 19a6d60c78d7611610c4b13b793fde3c36d91555 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Thu, 16 Mar 2017 14:38:15 -0500 Subject: [PATCH 2/7] stagingapi: allow project_status() to utilize aggregate backend call. --- osclib/stagingapi.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/osclib/stagingapi.py b/osclib/stagingapi.py index 0f0cbbfc..1cbb6df8 100644 --- a/osclib/stagingapi.py +++ b/osclib/stagingapi.py @@ -816,10 +816,18 @@ class StagingAPI(object): return log.getvalue() - def project_status(self, staging=None): + @memoize(session=True) + def project_status(self, staging=None, aggregate=False): path = ('project', 'staging_projects', self.project) if staging: - path += (self.extract_staging_short(staging),) + if aggregate: + full = self.prj_from_short(staging) + for status in self.project_status(): + if status['name'] == full: + return status + return None + else: + path += (self.extract_staging_short(staging),) url = self.makeurl(path, {'format': 'json'}) return json.load(self.retried_GET(url)) From 7b6ead4047e31ea3aeb5ad6d5bdf1bfa2323884a Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Thu, 16 Mar 2017 14:44:24 -0500 Subject: [PATCH 3/7] adi: utilize extract_staging_short() and project_status(). --- osclib/adi_command.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/osclib/adi_command.py b/osclib/adi_command.py index 1397239f..9afeec78 100644 --- a/osclib/adi_command.py +++ b/osclib/adi_command.py @@ -14,11 +14,8 @@ class AdiCommand: self.api = api def check_adi_project(self, project): - query_project = 'adi:' + project.split(':adi:')[1] - query = {'format': 'json'} - url = self.api.makeurl(('project', 'staging_projects', self.api.project, - query_project), query=query) - info = json.load(self.api.retried_GET(url)) + query_project = self.api.extract_staging_short(project) + info = self.api.project_status(project, True) if len(info['building_repositories']): print query_project, "still building" return From 959232e44127bf855896222a2c0c318188c42f49 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Thu, 16 Mar 2017 16:54:34 -0500 Subject: [PATCH 4/7] check: utilize project_status(). --- osclib/check_command.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/osclib/check_command.py b/osclib/check_command.py index d3f1019c..a0bd15f4 100644 --- a/osclib/check_command.py +++ b/osclib/check_command.py @@ -108,14 +108,7 @@ class CheckCommand(object): """ report = [] - query = {'format': 'json'} - if project: - url = self.api.makeurl(('project', 'staging_projects', self.api.project, - project), query=query) - else: - url = self.api.makeurl(('project', 'staging_projects', self.api.project), - query=query) - info = json.load(self.api.retried_GET(url)) + info = self.api.project_status(project, not project) if not project: for prj in info: if not prj['selected_requests']: From e17ee8cd5335c4eaa9c09543ac42b975a03f6863 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Thu, 16 Mar 2017 22:39:34 -0500 Subject: [PATCH 5/7] stagingapi: handle empty string in load_prj_pseudometa(). --- osclib/stagingapi.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osclib/stagingapi.py b/osclib/stagingapi.py index 1cbb6df8..23eaa0e4 100644 --- a/osclib/stagingapi.py +++ b/osclib/stagingapi.py @@ -555,6 +555,8 @@ class StagingAPI(object): def load_prj_pseudometa(self, description_text): try: data = yaml.load(description_text) + if data is None: + data = {} except (TypeError, AttributeError): data = {} # make sure we have a requests field From a0441417e13af2c76e8535115d437fe6f65a08c8 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Thu, 16 Mar 2017 23:16:21 -0500 Subject: [PATCH 6/7] tests: add missing project/staging_project staging U to summary. --- .../staging_projects/openSUSE:Factory.json | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) diff --git a/tests/fixtures/project/staging_projects/openSUSE:Factory.json b/tests/fixtures/project/staging_projects/openSUSE:Factory.json index 5cb8b024..6857ecdd 100644 --- a/tests/fixtures/project/staging_projects/openSUSE:Factory.json +++ b/tests/fixtures/project/staging_projects/openSUSE:Factory.json @@ -1751,5 +1751,164 @@ ], "subproject": null, "untracked_requests": [] + }, + { + "overall_state": "empty", + "selected_requests": [], + "broken_packages": [], + "building_repositories": [], + "description": "requests: []\n", + "missing_reviews": [], + "name": "openSUSE:Factory:Staging:U", + "obsolete_requests": [], + "openqa_jobs": [ + { + "clone_id": null, + "id": 10521, + "iso": null, + "name": "opensuse-Staging:B-Staging-DVD-x86_64-Build107.2-cryptlvm", + "result": "passed", + "state": "done", + "modules": [ + { + "name": "isosize", + "result": "ok" + }, + { + "name": "livecdreboot", + "result": "na" + }, + { + "name": "first_boot", + "result": "ok" + } + ] + }, + { + "clone_id": null, + "id": 10520, + "iso": null, + "name": "opensuse-Staging:B-Staging-DVD-x86_64-Build107.2-RAID1", + "result": "passed", + "state": "done", + "modules": [ + { + "name": "isosize", + "result": "ok" + }, + { + "name": "livecdreboot", + "result": "na" + }, + { + "name": "first_boot", + "result": "ok" + } + ] + }, + { + "clone_id": null, + "id": 10519, + "iso": null, + "name": "opensuse-Staging:B-Staging-DVD-x86_64-Build107.2-minimalx", + "result": "passed", + "state": "done", + "modules": [ + { + "name": "isosize", + "result": "ok" + }, + { + "name": "livecdreboot", + "result": "na" + }, + { + "name": "first_boot", + "result": "ok" + } + ] + } + ], + "subproject": { + "overall_state": "empty", + "selected_requests": [], + "broken_packages": [], + "building_repositories": [], + "description": "", + "missing_reviews": [], + "name": "openSUSE:Factory:Staging:U:DVD", + "obsolete_requests": [], + "openqa_jobs": [ + { + "clone_id": null, + "id": 10524, + "iso": null, + "name": "opensuse-Staging:B-Staging2-DVD-x86_64-Build115.2-miniuefi", + "result": "passed", + "state": "done", + "modules": [ + { + "name": "isosize", + "result": "ok" + }, + { + "name": "livecdreboot", + "result": "na" + }, + { + "name": "first_boot", + "result": "ok" + } + ] + }, + { + "clone_id": null, + "id": 10523, + "iso": null, + "name": "opensuse-Staging:B-Staging2-DVD-x86_64-Build115.2-gnome", + "result": "passed", + "state": "done", + "modules": [ + { + "name": "isosize", + "result": "ok" + }, + { + "name": "livecdreboot", + "result": "na" + }, + { + "name": "first_boot", + "result": "ok" + } + ] + }, + { + "clone_id": null, + "id": 10522, + "iso": null, + "name": "opensuse-Staging:B-Staging2-DVD-x86_64-Build115.2-kde", + "result": "passed", + "state": "done", + "modules": [ + { + "name": "isosize", + "result": "ok" + }, + { + "name": "livecdreboot", + "result": "na" + }, + { + "name": "first_boot", + "result": "ok" + } + ] + } + ], + "subproject": null, + "untracked_requests": [] + }, + "untracked_requests": [] } ] From b4abfd8b584ea6df1f6be10dede319098f5dca3c Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Thu, 16 Mar 2017 22:45:44 -0500 Subject: [PATCH 7/7] stagingapi: refactor _get_staged_requests() to use project_status(). --- osclib/stagingapi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osclib/stagingapi.py b/osclib/stagingapi.py index 23eaa0e4..18617a78 100644 --- a/osclib/stagingapi.py +++ b/osclib/stagingapi.py @@ -206,7 +206,8 @@ class StagingAPI(object): packages_staged = {} for prj in self.get_staging_projects(): - meta = self.get_prj_pseudometa(prj) + status = self.project_status(prj, True) + meta = self.load_prj_pseudometa(status['description']) for req in meta['requests']: packages_staged[req['package']] = {'prj': prj, 'rq_id': req['id']}