2019-01-17 13:25:22 +04:00

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')