summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--obsapi/core.py41
1 files changed, 27 insertions, 14 deletions
diff --git a/obsapi/core.py b/obsapi/core.py
index 31782d9..a489b8e 100644
--- a/obsapi/core.py
+++ b/obsapi/core.py
@@ -126,9 +126,12 @@ class FileInfo(object):
class ObsApi(object):
+ default_xml = '<None/>'
+
def __init__(self, apiurl=None):
self.apiurl = apiurl or DEFAULTAPIURL
self.__get_auth()
+ self._response = None
def __get_auth(self):
if osc_conf:
@@ -147,13 +150,24 @@ class ObsApi(object):
def __api_get(self, api, payload=None):
url = '{0}/{1}'.format(self.apiurl, api)
r = requests.get(url, auth=self.auth, params=payload)
+ self._response = r
return r
+ @property
+ def response(self):
+ return self._response
+
+ def get_xml(self, api, payload=None):
+ r = self.__api_get(api, payload)
+ if not r.status_code == requests.codes.ok:
+ return self.default_xml
+
+ return r.text
+
def get_package_meta(self, prj, pkg):
api = '/source/{}/{}/_meta'.format(prj, pkg)
- r = self.__api_get(api)
- return r.text
+ return self.get_xml(api)
def ls(self, prj=None, pkg=None):
if prj and pkg:
@@ -165,16 +179,16 @@ class ObsApi(object):
def project_ls(self, prj):
api = '/source/{}'.format(prj)
- r = self.__api_get(api)
- d = etree.fromstring(r.text)
+ xml = self.get_xml(api)
+ d = etree.fromstring(xml)
lsitems = [e.get('name') for e in d.findall('entry')]
return lsitems
def package_ls(self, prj, pkg):
api = '/source/{}/{}'.format(prj, pkg)
- r = self.__api_get(api)
- d = etree.fromstring(r.text)
+ xml = self.get_xml(api)
+ d = etree.fromstring(xml)
directory = Directory(d.get('name'),
d.get('rev'),
d.get('vrev'),
@@ -192,8 +206,8 @@ class ObsApi(object):
def get_binaries(self, prj, pkg, repo, arch):
api = '/build/{}/{}/{}/{}'.format(prj, repo, arch, pkg)
- r = self.__api_get(api)
- blist = etree.fromstring(r.text)
+ xml = self.get_xml(api)
+ blist = etree.fromstring(xml)
binaries = [Binary(filename=i.get('filename'),
size=i.get('size'),
mtime=i.get('mtime'))
@@ -204,13 +218,13 @@ class ObsApi(object):
def get_binary_fileinfo(self, prj, pkg, repo, arch, binary):
payload = dict(view='fileinfo')
api = '/build/{}/{}/{}/{}/{}'.format(prj, repo, arch, pkg, binary)
- r = self.__api_get(api, payload)
- return FileInfo(r.text)
+ xml = self.get_xml(api, payload)
+ return FileInfo(xml)
def get_project_repos(self, prj):
api = '/build/{}'.format(prj)
- r = self.__api_get(api)
- directory = etree.fromstring(r.text)
+ xml = self.get_xml(api)
+ directory = etree.fromstring(xml)
entries = []
for entry in directory.findall('entry'):
@@ -244,8 +258,7 @@ class ObsApi(object):
def get_build_config(self, prj, repo):
api = '/build/{}/{}/_buildconfig'.format(prj, repo)
- r = self.__api_get(api)
- return r.text
+ return self.get_xml(api)
def get_vendor(self, prj, repo=None):
repo = repo or self.get_project_repos(prj)[0]