Adopt to the new staging_projects api not revealing all infos

This commit is contained in:
Stephan Kulow 2019-11-06 14:29:02 +01:00
parent 61205d35e3
commit 82c64003c4
3 changed files with 30 additions and 36 deletions

View File

@ -97,8 +97,7 @@ class AcceptCommand(object):
u = self.api.makeurl(['staging', self.api.project, 'staging_projects', project, 'accept']) u = self.api.makeurl(['staging', self.api.project, 'staging_projects', project, 'accept'])
f = http_POST(u) f = http_POST(u)
while True: while self.api.project_status(project, reload=True, requests=False).get('state') != 'empty':
print(self.api.project_status(project, reload=True).get('state'))
time.sleep(1) time.sleep(1)
self.api.staging_deactivate(project) self.api.staging_deactivate(project)

View File

@ -48,16 +48,14 @@ class SelectCommand(object):
package = self._package(request) package = self._package(request)
candidates = [] # Store candidates to be supersede by 'request' candidates = [] # Store candidates to be supersede by 'request'
for staging in self.api.get_staging_projects(): url = self.api.makeurl(['staging', self.api.project, 'staging_projects'], { 'requests': 1 })
# requests for the same project are fine status = ET.parse(self.api.retried_GET(url)).getroot()
if staging == self.target_project: for prj in status.findall('staging_project'):
continue for req in prj.findall('./staged_requests/request'):
pstatus = self.api.project_status(staging) if int(req.get('id')) < int(request) and req.get('package') == package:
for rq in pstatus.findall('selected_requests/entry'): candidates.append((req.get('id'), package, prj.get('name')))
if int(rq.get('id')) < int(request) and rq.get('package') == package:
candidates.append((rq.get('id'), package, staging))
assert len(candidates) <= 1, 'There are more thant one candidate to supersede {} ({}): {}'.format(request, package, candidates) assert len(candidates) <= 1, 'There are more than one candidate to supersede {} ({}): {}'.format(request, package, candidates)
return candidates[0] if candidates else None return candidates[0] if candidates else None

View File

@ -229,12 +229,11 @@ class StagingAPI(object):
""" """
packages_staged = {} packages_staged = {}
for prj in self.get_staging_projects(): url = self.makeurl(['staging', self.project, 'staging_projects'], { 'requests': 1 })
status = self.project_status(prj) status = ET.parse(self.retried_GET(url)).getroot()
if status is None: for prj in status.findall('staging_project'):
continue for req in prj.findall('./staged_requests/request'):
for req in status.findall('staged_requests/request'): packages_staged[req.get('package')] = {'prj': prj.get('name'), 'rq_id': req.get('id')}
packages_staged[req.get('package')] = {'prj': prj, 'rq_id': req.get('id')}
return packages_staged return packages_staged
@ -310,7 +309,8 @@ class StagingAPI(object):
""" """
result = [] result = []
status = self.staging_status() url = self.makeurl(['staging', self.project, 'staging_projects'])
status = ET.parse(self.retried_GET(url)).getroot()
for project in status.findall('staging_project'): for project in status.findall('staging_project'):
result.append(project.get('name')) result.append(project.get('name'))
return result return result
@ -681,7 +681,8 @@ class StagingAPI(object):
:param project: project the package is in :param project: project the package is in
:param package: package we want to query for :param package: package we want to query for
""" """
data = self.project_status(project) logging.error('get_request_id_for_package')
data = self.project_status(project, status=False)
for x in data.findall('staged_requests/request'): for x in data.findall('staged_requests/request'):
if x.get('package') == package: if x.get('package') == package:
return int(x.get('id')) return int(x.get('id'))
@ -693,7 +694,8 @@ class StagingAPI(object):
:param project: project the package is in :param project: project the package is in
:param package: package we want to query for :param package: package we want to query for
""" """
data = self.project_status(project) logging.error('get_package_for_request_id')
data = self.project_status(project, status=False)
request_id = str(request_id) request_id = str(request_id)
for x in data.findall('staged_requests/request'): for x in data.findall('staged_requests/request'):
if x.get('id') == request_id: if x.get('id') == request_id:
@ -874,25 +876,20 @@ class StagingAPI(object):
return log.getvalue() return log.getvalue()
@memoize(session=True) def project_status(self, staging, status=True, requests=True, reload=False):
def staging_status(self):
url = self.makeurl(['staging', self.project, 'staging_projects'])
return ET.parse(self.retried_GET(url)).getroot()
def project_status(self, staging, reload=False):
if not staging: if not staging:
raise oscerr.WrongArgs('No staging given') raise oscerr.WrongArgs('No staging given')
if reload: import traceback
url = self.makeurl(['staging', self.project, 'staging_projects', staging]) traceback.print_stack()
opts = {}
if requests:
opts['requests'] = 1
if status:
opts['status'] = 1
url = self.makeurl(['staging', self.project, 'staging_projects', staging], opts)
return ET.parse(self.retried_GET(url)).getroot() return ET.parse(self.retried_GET(url)).getroot()
root = self.staging_status()
staging = self.prj_from_short(staging)
for project in root.findall('staging_project[@name="{}"]'.format(staging)):
return project
return None
def check_project_status(self, project): def check_project_status(self, project):
""" """
Checks a staging project for acceptance. Checks a staging project for acceptance.
@ -901,7 +898,7 @@ class StagingAPI(object):
informations) informations)
""" """
return self.project_status(project).get('state') == 'acceptable' return self.project_status(project, requests=False).get('state') == 'acceptable'
def project_status_build_percent(self, status): def project_status_build_percent(self, status):
final, tobuild = self.project_status_build_sum(status) final, tobuild = self.project_status_build_sum(status)