diff options
| -rw-r--r-- | obsapi/core.py | 41 |
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] |
