diff options
| author | Scott Bahling <sbahling@suse.com> | 2020-02-06 22:16:02 +0100 |
|---|---|---|
| committer | Scott Bahling <sbahling@suse.com> | 2020-02-06 22:35:43 +0100 |
| commit | cd12f43cd2c98826bb0ea092ef590a91e5842886 (patch) | |
| tree | fc13c2f90a9e3190ab172b1556dc1eb3caa124b4 /obsapi/core.py | |
| parent | c86fdd52a30ca1833149d46b7fee9135a74e4598 (diff) | |
| download | obsapi-cd12f43cd2c98826bb0ea092ef590a91e5842886.tar.gz obsapi-cd12f43cd2c98826bb0ea092ef590a91e5842886.tar.xz obsapi-cd12f43cd2c98826bb0ea092ef590a91e5842886.zip | |
Handle passing bytes to the FileInfo class
Move class to own file and enhance tests
Diffstat (limited to 'obsapi/core.py')
| -rw-r--r-- | obsapi/core.py | 119 |
1 files changed, 9 insertions, 110 deletions
diff --git a/obsapi/core.py b/obsapi/core.py index d4980dc..80067d6 100644 --- a/obsapi/core.py +++ b/obsapi/core.py @@ -1,14 +1,13 @@ # -*- coding: utf-8 -*- # import re -from io import BytesIO from lxml import etree from collections import namedtuple -from datetime import datetime +from obsapi import helpers from obsapi.sourceapi import ObsSourceApi from obsapi.buildapi import ObsBuildApi -from obsapi.formatter import Formatter from obsapi.repoflags import RepoFlags +from obsapi.fileinfo import FileInfo LSItem = namedtuple('LSItem', 'name md5 size mtime') @@ -25,102 +24,7 @@ emptyxml = '<empty></empty>' EMPTYTREE = etree.fromstring(emptyxml) EMPTY = EMPTYTREE.xpath('.')[0] - -class FileInfo(object): - file_str_template = ('{filename}' - 'size : {size}' - 'mtime : {mtime}' - ) - - pkg_str_template = ('{filename}' - 'Name : {name}' - 'Version : {version}' - 'Release : {release}' - 'Architecture: {arch}' - 'Size : {size}' - 'Source RPM : {source}' - 'Build Date : {mtime}' - 'Summary : {summary}' - 'Description :' - '{description}' - 'Provides :' - '{provides}' - ) - - src_str_template = ('{filename}' - 'Name : {name}' - 'Version : {version}' - 'Release : {release}' - 'Architecture: {arch}' - 'Size : {size}' - 'Build Date : {mtime}' - 'Summary : {summary}' - 'Description :' - '{description}' - ) - - def __init__(self, xml): - self.finfo = etree.fromstring(xml) - self.filename = self.finfo.get('filename', None) - self.formatter = Formatter(self) - - @property - def info(self): - info = {'filename': [self.filename]} - for item in self.finfo: - info.setdefault(item.tag, []).append(item.text) - - for item, value in info.items(): - if len(value) == 1: - info[item] = value[0] - # info[item] = '\n'.join(value) - - return info - - def __str__(self): - return self.formatter.render() - - def __getattr__(self, attr): - try: - values = [value.text for value in self.finfo.findall(attr)] - except Exception: - values = [None] - - if len(values) == 1: - return values[0] - else: - return values - - @property - def datetime(self): - if self.mtime: - return datetime.fromtimestamp(int(self.mtime)) - - @property - def xml(self): - return etree.tostring(self.finfo) - - @property - def is_pkg(self): - if self.arch: - return True - else: - return False - - @property - def is_src(self): - if self.source: - return False - else: - return True - - @property - def is_debug_info(self): - if '-' in self.name: - if self.name.split('-')[-1] in ('debuginfo', 'debugsource'): - return True - - return False +xml2etree = helpers.xml2etree class ObsApi(object): @@ -137,11 +41,6 @@ class ObsApi(object): self.build.verify_ssl = True self.lastapi = None - def __xml2etree(self, xml): - xml = xml.encode('utf-8') - parser = etree.XMLParser(remove_blank_text=True) - return etree.parse(BytesIO(xml), parser).xpath('.')[0] - def get_meta(self, prj, pkg=None): return self.source.get_meta(prj, pkg=pkg) @@ -162,7 +61,7 @@ class ObsApi(object): if xml is None: return [] - d = self.__xml2etree(xml) + d = xml2etree(xml) lsitems = [e.get('name') for e in d.findall('entry')] return lsitems @@ -303,7 +202,7 @@ class ObsApi(object): return RepoFlags(self.get_meta(prj, pkg)) def locked(self, prj, pkg=None): - meta = self.__xml2etree(self.get_meta(prj, pkg)) + meta = xml2etree(self.get_meta(prj, pkg)) if meta.find('lock') is not None: return True return False @@ -328,7 +227,7 @@ class ObsApi(object): if role is None: role = '.*' # regex to match all - meta = self.__xml2etree(xml) + meta = xml2etree(xml) persons = meta.xpath('.//person[re:test(@role, role)]', namespaces={'re': REGEX_NS}) return [User(userid=p.get('userid'), role=p.get('role')) for p in persons] @@ -340,7 +239,7 @@ class ObsApi(object): if role is None: role = '.*' # regex to match all - meta = self.__xml2etree(xml) + meta = xml2etree(xml) groups = meta.xpath('.//group[re:test(@role, role)]', namespaces={'re': REGEX_NS}) return [Group(groupid=g.get('groupid'), role=g.get('role')) for g in groups] @@ -359,7 +258,7 @@ class ObsApi(object): if xml is None: raise Exception('unable to retrieve project meta') - meta = self.__xml2etree(xml) + meta = xml2etree(xml) etree.SubElement(meta, 'person', userid=userid, role=role) return self.put_meta(prj, pkg, etree.tostring(meta)) @@ -378,7 +277,7 @@ class ObsApi(object): if xml is None: raise Exception('unable to retrieve project meta') - meta = self.__xml2etree(xml) + meta = xml2etree(xml) etree.SubElement(meta, 'group', groupid=groupid, role=role) return self.put_meta(prj, pkg, etree.tostring(meta)) |
