diff options
| author | Scott Bahling <sbahling@suse.de> | 2016-02-20 20:24:19 +0100 |
|---|---|---|
| committer | Scott Bahling <sbahling@suse.de> | 2016-02-20 20:24:19 +0100 |
| commit | ae29149adc0a1483f839961843804f199b15779e (patch) | |
| tree | 87f8ba641c992f3e45ecd959200a877c18d3a215 /obsapi/core.py | |
| parent | 815f038d8ebaa9a9a0dc2539cd547a98c042f001 (diff) | |
| download | obsapi-ae29149adc0a1483f839961843804f199b15779e.tar.gz obsapi-ae29149adc0a1483f839961843804f199b15779e.tar.xz obsapi-ae29149adc0a1483f839961843804f199b15779e.zip | |
Implement lock method
Diffstat (limited to 'obsapi/core.py')
| -rw-r--r-- | obsapi/core.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/obsapi/core.py b/obsapi/core.py index 4028aa2..f1a27ed 100644 --- a/obsapi/core.py +++ b/obsapi/core.py @@ -2,6 +2,7 @@ # import requests from requests.auth import HTTPBasicAuth +from io import BytesIO from lxml import etree from collections import namedtuple try: @@ -18,6 +19,10 @@ Binary = namedtuple('Binary', 'filename size mtime') DEFAULTAPIURL = 'https://api.opensuse.org' +emptyxml = '<empty></empty>' +EMPTYTREE = etree.fromstring(emptyxml) +EMPTY = EMPTYTREE.xpath('.')[0] + class FileInfo(object): attributes = ['name', @@ -187,6 +192,11 @@ class ObsApi(object): return r + def __xml2etree(self, xml): + xml = xml.encode('utf-8') + parser = etree.XMLParser(remove_blank_text=True) + return etree.parse(BytesIO(xml), parser).xpath('.')[0] + @property def response(self): '''Return requests response from last api query''' @@ -358,3 +368,30 @@ class ObsApi(object): break return vendor + + def lock(self, prj, pkg=None): + if pkg is None: + xml = self.get_project_meta(prj) + put = self.put_project_meta + else: + xml = self.get_package_meta(prj, pkg) + put = self.put_package_meta + + meta = self.__xml2etree(xml) + if meta.tag not in ['project', 'package']: + if pkg: + raise Exception('Failed to lock package. %s/%s' % (prj, pkg)) + else: + raise Exception('Failed to lock project. %s' % prj) + + if meta.find('lock') is not None: + return 'Already Locked' + + lock = self.__xml2etree('<lock><enable/></lock>') + meta.append(lock) + if pkg: + r = put(prj, pkg, etree.tostring(meta)) + else: + r = put(prj, etree.tostring(meta)) + + return r |
