diff options
author | scarabeus <scarabeus@gentoo.org> | 2010-10-28 20:13:51 +0000 |
---|---|---|
committer | scarabeus <scarabeus@gentoo.org> | 2010-10-28 20:13:51 +0000 |
commit | 4a91692e01bb6d2330f058fd2a31384c6c57bda0 (patch) | |
tree | 7f635e2ec9feba50c7ec6da07881120799d513e7 /pym/gentoolkit/eshowkw/keywords_header.py | |
parent | Add --binpkgs-missing option to equery list to print installed packages that (diff) | |
download | gentoolkit-4a91692e01bb6d2330f058fd2a31384c6c57bda0.tar.gz gentoolkit-4a91692e01bb6d2330f058fd2a31384c6c57bda0.tar.bz2 gentoolkit-4a91692e01bb6d2330f058fd2a31384c6c57bda0.zip |
Initial commit of eshowkw, which is drop-in replacement for eshowkw from gentoolkit-dev.
svn path=/trunk/gentoolkit/; revision=831
Diffstat (limited to 'pym/gentoolkit/eshowkw/keywords_header.py')
-rw-r--r-- | pym/gentoolkit/eshowkw/keywords_header.py | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/pym/gentoolkit/eshowkw/keywords_header.py b/pym/gentoolkit/eshowkw/keywords_header.py new file mode 100644 index 0000000..53105ae --- /dev/null +++ b/pym/gentoolkit/eshowkw/keywords_header.py @@ -0,0 +1,99 @@ +# Copyright 2001-2010 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +__all__ = ['keywords_header'] + +from portage import settings as ports +from portage.output import colorize +from display_pretty import colorize_string +from display_pretty import align_string + +class keywords_header: + __IMPARCHS = [ 'arm', 'amd64', 'x86' ] + __ADDITIONAL_FIELDS = [ 'unused', 'slot' ] + __EXTRA_FIELDS = [ 'repo' ] + + def __readKeywords(self): + """Read all available keywords from portage.""" + return [x for x in ports.archlist() + if not x.startswith('~')] + + def __sortKeywords(self, keywords, prefix = False, required_keywords = []): + """Sort keywords with short archs first""" + # user specified only some keywords to display + if len(required_keywords) != 0: + tmpkeywords = [k for k in keywords + if k in required_keywords] + # idiots might specify non-existant archs + if len(tmpkeywords) != 0: + keywords = tmpkeywords + + normal = [k for k in keywords + if len(k.split('-')) == 1] + normal.sort() + + if prefix: + longer = [k for k in keywords + if len(k.split('-')) != 1] + longer.sort() + normal.extend(longer) + return normal + + def __readAdditionalFields(self): + """Prepare list of aditional fileds displayed by eshowkw (2nd part)""" + return self.__ADDITIONAL_FIELDS + + def __readExtraFields(self): + """Prepare list of extra fileds displayed by eshowkw (3rd part)""" + return self.__EXTRA_FIELDS + + def __formatKeywords(self, keywords, align, length): + """Append colors and align keywords properly""" + tmp = [] + for keyword in keywords: + tmp2 = keyword + keyword = align_string(keyword, align, length) + # % are used as separators for further split so we wont loose spaces and coloring + keyword = '%'.join(list(keyword)) + if tmp2 in self.__IMPARCHS: + tmp.append(colorize_string('darkyellow', keyword)) + else: + tmp.append(keyword) + return tmp + + def __formatAdditional(self, additional, align, length): + """Align additional items properly""" + # % are used as separators for further split so we wont loose spaces and coloring + return ['%'.join(align_string(x, align, length)) for x in additional] + + def __prepareExtra(self, extra, align, length): + content = [] + content.append(''.ljust(length, '-')) + content.extend(self.__formatAdditional(extra, align, length)) + return content + + def __prepareResult(self, keywords, additional, align, length): + """Parse keywords and additional fields into one list with proper separators""" + content = [] + content.append(''.ljust(length, '-')) + content.extend(self.__formatKeywords(keywords, align, length)) + content.append(''.ljust(length, '-')) + content.extend(self.__formatAdditional(additional, align, length)) + return content + + def __init__(self, prefix = False, required_keywords = [], keywords_align = 'bottom'): + """Initialize keywords header.""" + additional = self.__readAdditionalFields() + extra = self.__readExtraFields() + self.keywords = self.__sortKeywords(self.__readKeywords(), prefix, required_keywords) + self.length = max( + max([len(x) for x in self.keywords]), + max([len(x) for x in additional]), + max([len(x) for x in extra]) + ) + #len(max([max(self.keywords, key=len), max(additional, key=len)], key=len)) + self.keywords_count = len(self.keywords) + self.additional_count = len(additional) + self.extra_count = len(extra) + self.content = self.__prepareResult(self.keywords, additional, keywords_align, self.length) + self.extra = self.__prepareExtra(extra, keywords_align, self.length) |