From cd12f43cd2c98826bb0ea092ef590a91e5842886 Mon Sep 17 00:00:00 2001 From: Scott Bahling Date: Thu, 6 Feb 2020 22:16:02 +0100 Subject: Handle passing bytes to the FileInfo class Move class to own file and enhance tests --- obsapi/fileinfo.py | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 obsapi/fileinfo.py (limited to 'obsapi/fileinfo.py') 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 -- cgit v1.2.3