diff options
Diffstat (limited to 'obsapi/fileinfo.py')
| -rw-r--r-- | obsapi/fileinfo.py | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/obsapi/fileinfo.py b/obsapi/fileinfo.py new file mode 100644 index 0000000..7024bdd --- /dev/null +++ b/obsapi/fileinfo.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- + +from lxml import etree +from datetime import datetime +from obsapi.formatter import Formatter +from obsapi.helpers import xml2etree + +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 = xml2etree(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 |
