diff options
| author | Scott Bahling <sbahling@suse.de> | 2015-04-19 12:30:50 +0200 |
|---|---|---|
| committer | Scott Bahling <sbahling@suse.de> | 2015-04-19 12:30:50 +0200 |
| commit | 5d1583fe035c8e646ab6beba2fde0b3bb5f87c12 (patch) | |
| tree | 253050494fc9f509f7e9090a08ac4c7680352893 /obsapi | |
| parent | 942ac9bdbe918873eb4f5984f87d54e1f93efc51 (diff) | |
| download | obsapi-5d1583fe035c8e646ab6beba2fde0b3bb5f87c12.tar.gz obsapi-5d1583fe035c8e646ab6beba2fde0b3bb5f87c12.tar.xz obsapi-5d1583fe035c8e646ab6beba2fde0b3bb5f87c12.zip | |
Add ObsApi.get_xml() method
get_xml will attempt to retrieve the xml response from the obs api.
If response failes, a dummy, blank xml file will be returned. This
makes the helper functions more robust against api connection errors.
If query failes, empty data will be simply be returned to the client.
The client is responsible for any response error checking.
The 'response' property is added to the ObsApi. This holds the
full requests response from the last api query. The client can check
this property to test for query success when required.
Diffstat (limited to 'obsapi')
| -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] |
