# -*- 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