diff options
Diffstat (limited to 'obsapi')
| -rw-r--r-- | obsapi/core.py | 58 |
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 |
