summaryrefslogtreecommitdiff
path: root/obsapi/core.py
diff options
context:
space:
mode:
Diffstat (limited to 'obsapi/core.py')
-rw-r--r--obsapi/core.py119
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))