aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscarabeus <scarabeus@gentoo.org>2010-10-28 20:13:51 +0000
committerscarabeus <scarabeus@gentoo.org>2010-10-28 20:13:51 +0000
commit4a91692e01bb6d2330f058fd2a31384c6c57bda0 (patch)
tree7f635e2ec9feba50c7ec6da07881120799d513e7 /pym/gentoolkit/eshowkw/keywords_header.py
parentAdd --binpkgs-missing option to equery list to print installed packages that (diff)
downloadgentoolkit-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.py99
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)