summaryrefslogtreecommitdiff
path: root/obsapi/core.py
diff options
context:
space:
mode:
authorScott Bahling <sbahling@suse.de>2016-02-20 20:24:19 +0100
committerScott Bahling <sbahling@suse.de>2016-02-20 20:24:19 +0100
commitae29149adc0a1483f839961843804f199b15779e (patch)
tree87f8ba641c992f3e45ecd959200a877c18d3a215 /obsapi/core.py
parent815f038d8ebaa9a9a0dc2539cd547a98c042f001 (diff)
downloadobsapi-ae29149adc0a1483f839961843804f199b15779e.tar.gz
obsapi-ae29149adc0a1483f839961843804f199b15779e.tar.xz
obsapi-ae29149adc0a1483f839961843804f199b15779e.zip
Implement lock method
Diffstat (limited to 'obsapi/core.py')
-rw-r--r--obsapi/core.py37
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