70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
|
|
import logging
|
|
|
|
from port_stats import colorize
|
|
from port_stats import lists
|
|
from port_stats import tasks
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
def percent(small, big):
|
|
perc = (100.0 * small) / big
|
|
return "%6s (%6.2f%% of %s)" % (small, perc, big)
|
|
|
|
|
|
def text_totals(keys, data, legend=(), total=None):
|
|
result = []
|
|
for key in keys:
|
|
if total:
|
|
message = "%10s:%-24s" % (key, percent(data.get(key), total))
|
|
else:
|
|
message = '%10s:%6s' % (key, data.get(key))
|
|
if key in legend:
|
|
message += ' // %s' % legend[key]
|
|
result.append(message)
|
|
if total:
|
|
result.append('%10s:%6s' % ('[TOTAL]', total))
|
|
return '\n'.join(result)
|
|
|
|
|
|
COLORS_EX = tuple(colorize.COLORS) + ('[RECENT]', '[PENDING]')
|
|
|
|
|
|
def color_stats(by_color, names=None):
|
|
if names:
|
|
data = dict((color, sum(1 for p in by_color[color] if p[0] in names))
|
|
for color in colorize.COLORS)
|
|
else:
|
|
data = dict((color, len(by_color[color]))
|
|
for color in colorize.COLORS)
|
|
data['[PENDING]'] = data.get('ORANGE', 0) + data.get('YELLOW', 0)
|
|
data['[RECENT]'] = data.get('GREEN', 0) + data.get('SLATE', 0)
|
|
return data
|
|
|
|
|
|
def color_totals(by_color, names=None, total=None, summary=False):
|
|
data = color_stats(by_color, names)
|
|
if summary:
|
|
keys = COLORS_EX
|
|
legend = dict(colorize.LEGEND)
|
|
legend['[RECENT]'] = 'recent enough'
|
|
legend['[PENDING]'] = 'updates are pending'
|
|
else:
|
|
keys = colorize.COLORS
|
|
legend = colorize.LEGEND
|
|
return text_totals(keys, data, legend, total)
|
|
|
|
|
|
def package_one_line(name, by_name, package_tasks, separator='\t'):
|
|
color, bp, np = by_name[name]
|
|
tasks_str = tasks.format_tasks_short(package_tasks.get(name))
|
|
return '\t'.join((color, name, lists.format_evr(bp),
|
|
lists.format_evr(np), tasks_str))
|
|
|
|
|
|
def format_colored_task(info, by_name):
|
|
return tasks.format_task(
|
|
info,
|
|
extra_info=lambda p: colorize.package_color(p, by_name) or 'NONE')
|