summaryrefslogtreecommitdiff
path: root/obsapi
diff options
context:
space:
mode:
Diffstat (limited to 'obsapi')
-rw-r--r--obsapi/core.py58
1 files changed, 47 insertions, 11 deletions
diff --git a/obsapi/core.py b/obsapi/core.py
index 748044c..8d7d995 100644
--- a/obsapi/core.py
+++ b/obsapi/core.py
@@ -394,10 +394,7 @@ class ObsApi(object):
if srcfile.name.endswith('.spec'):
yield self.source.get(prj, pkg, srcfile.name)
- def set_flag(self, prj, pkg=None, flag=None):
- if flag is None:
- return None
-
+ def __flag_to_params(self, flag):
try:
flag_type = getattr(flag, 'flag', flag.get('flag', None))
if flag_type is None:
@@ -409,11 +406,50 @@ class ObsApi(object):
if status not in ['enable', 'disable']:
raise ValueError('flag status expected "enable" or "disable" got %s' % status)
- params = dict(cmd='set_flag',
- flag=flag_type,
- status=status,
- repository=getattr(flag, 'repository', flag.get('repository', None)),
- arch=getattr(flag, 'arch', flag.get('arch', None)),
- )
+ return dict(flag=flag_type,
+ status=status,
+ repository=getattr(flag, 'repository', flag.get('repository', None)),
+ arch=getattr(flag, 'arch', flag.get('arch', None)),
+ )
+
+ def parse_status_code(self, xml):
+ status_code = etree.fromstring(xml)
+ code = status_code.get('code', None)
+ summary = status_code.find('summary')
+ if summary is not None:
+ summary = summary.text
+
+ return (code, summary)
+
+ def __check_status(self, r):
+ if r.status_code == 400:
+ code, summary = self.parse_status(r.text)
+ msg = '{}: {}'.format(code.replace('_', ' ').capitalize(), summary)
+ raise Exception(msg)
+ return r
+
+ def set_flag(self, prj, pkg=None, flag=None):
+ if flag is None:
+ return None
- return self.source.post(prj, pkg, **params)
+ params = self.__flag_to_params(flag)
+ params['cmd'] = 'set_flag'
+
+ r = self.source.post(prj, pkg, **params)
+ try:
+ return self.__check_status(r)
+ except Exception as e:
+ raise e
+
+ def remove_flag(self, prj, pkg=None, flag=None):
+ if flag is None:
+ return None
+
+ params = self.__flag_to_params(flag)
+ params['cmd'] = 'remove_flag'
+
+ r = self.source.post(prj, pkg, **params)
+ try:
+ return self.__check_status(r)
+ except Exception as e:
+ raise e