Remove attributes when destroying a workflow

This commit is contained in:
José Iván López González 2021-09-07 09:14:33 +01:00
parent 2f7e249948
commit 352ce10c24

View File

@ -195,6 +195,7 @@ class StagingWorkflow(object):
self.requests = []
self.groups = []
self.users = []
self.attributes = {}
logging.basicConfig()
# clear cache from other tests - otherwise the VCR is replayed depending
@ -230,6 +231,10 @@ class StagingWorkflow(object):
self.config = Config(APIURL, project)
def create_attribute_type(self, namespace, name, values=None):
if not namespace in self.attributes: self.attributes[namespace] = []
if not name in self.attributes[namespace]: self.attributes[namespace].append(name)
meta = """
<namespace name='{}'>
<modifiable_by user='Admin'/>
@ -484,20 +489,56 @@ class StagingWorkflow(object):
def remove(self):
print('deleting staging workflow')
for project in self.projects.values():
project.remove()
for request in self.requests:
request.revoke()
for group in self.groups:
url = osc.core.makeurl(APIURL, ['group', group])
try:
osc.core.http_DELETE(url)
except HTTPError:
pass
self.remove_group(group)
for namespace in self.attributes:
self.remove_attributes(namespace)
print('done')
if hasattr(self.api, '_invalidate_all'):
self.api._invalidate_all()
def remove_group(self, group):
"""Removes a group from the OBS instance
:param group: name of the group to remove
:type group: str
"""
print('deleting group', group)
url = osc.core.makeurl(APIURL, ['group', group])
self._safe_delete(url)
def remove_attributes(self, namespace):
"""Removes an attributes namespace and all the attributes it contains
:param namespace: attributes namespace to remove
:type namespace: str
"""
for name in self.attributes[namespace]:
print('deleting attribute {}:{}'.format(namespace, name))
url = osc.core.makeurl(APIURL, ['attribute', namespace, name, '_meta'])
self._safe_delete(url)
print('deleting namespace', namespace)
url = osc.core.makeurl(APIURL, ['attribute', namespace, '_meta'])
self._safe_delete(url)
def _safe_delete(self, url):
"""Performs a delete request to the OBS instance, ignoring possible http errors
:param url: url to use for the http delete request
:type url: str
"""
try:
osc.core.http_DELETE(url)
except HTTPError:
pass
class Project(object):
"""This class represents a project in the testing environment of the release tools. It usually
corresponds to a project in the local OBS instance that is used by the tests.