qvm-template: Tidy up code responsible for output in {info,list} operations.
This commit is contained in:
parent
d11e74ae99
commit
ed35802ca2
@ -865,44 +865,55 @@ def list_templates(args: argparse.Namespace,
|
|||||||
def append_info(data, status, install_time=None):
|
def append_info(data, status, install_time=None):
|
||||||
tpl_list.append((status, data, install_time))
|
tpl_list.append((status, data, install_time))
|
||||||
|
|
||||||
|
def list_to_output(tpls):
|
||||||
|
outputs = []
|
||||||
|
for status, grp in itertools.groupby(tpls, lambda x: x[0]):
|
||||||
|
outputs.append((status, list(map(lambda x: x[1:], grp))))
|
||||||
|
return outputs
|
||||||
|
|
||||||
def info_to_human_output(tpls):
|
def info_to_human_output(tpls):
|
||||||
output = []
|
outputs = []
|
||||||
# TODO: Do groupby here to avoid including ``status`` in each row.
|
for status, grp in itertools.groupby(tpls, lambda x: x[0]):
|
||||||
for status, data, install_time in tpls:
|
output = []
|
||||||
output.append((status, 'Name', ':', data.name))
|
for _, data, install_time in grp:
|
||||||
output.append((status, 'Epoch', ':', data.epoch))
|
output.append(('Name', ':', data.name))
|
||||||
output.append((status, 'Version', ':', data.version))
|
output.append(('Epoch', ':', data.epoch))
|
||||||
output.append((status, 'Release', ':', data.release))
|
output.append(('Version', ':', data.version))
|
||||||
output.append((status, 'Size', ':',
|
output.append(('Release', ':', data.release))
|
||||||
qubesadmin.utils.size_to_human(data.dlsize)))
|
output.append(('Size', ':',
|
||||||
output.append((status, 'Repository', ':', data.reponame))
|
qubesadmin.utils.size_to_human(data.dlsize)))
|
||||||
output.append((status, 'Buildtime', ':', str(data.buildtime)))
|
output.append(('Repository', ':', data.reponame))
|
||||||
if install_time:
|
output.append(('Buildtime', ':', str(data.buildtime)))
|
||||||
output.append((status, 'Install time', ':', str(install_time)))
|
if install_time:
|
||||||
output.append((status, 'URL', ':', data.url))
|
output.append(('Install time', ':', str(install_time)))
|
||||||
output.append((status, 'License', ':', data.licence))
|
output.append(('URL', ':', data.url))
|
||||||
output.append((status, 'Summary', ':', data.summary))
|
output.append(('License', ':', data.licence))
|
||||||
# Only show "Description" for the first line
|
output.append(('Summary', ':', data.summary))
|
||||||
title = 'Description'
|
# Only show "Description" for the first line
|
||||||
for line in data.description.splitlines():
|
title = 'Description'
|
||||||
output.append((status, title, ':', line))
|
for line in data.description.splitlines():
|
||||||
title = ''
|
output.append((title, ':', line))
|
||||||
output.append((status, ' ', ' ', ' ')) # empty line
|
title = ''
|
||||||
return output
|
output.append((' ', ' ', ' ')) # empty line
|
||||||
|
outputs.append((status, output))
|
||||||
|
return outputs
|
||||||
|
|
||||||
def info_to_machine_output(tpls):
|
def info_to_machine_output(tpls):
|
||||||
output = []
|
outputs = []
|
||||||
for status, data, install_time in tpls:
|
for status, grp in itertools.groupby(tpls, lambda x: x[0]):
|
||||||
name, epoch, version, release, reponame, dlsize, \
|
output = []
|
||||||
buildtime, licence, url, summary, description = data
|
for _, data, install_time in grp:
|
||||||
dlsize = str(dlsize)
|
name, epoch, version, release, reponame, dlsize, \
|
||||||
buildtime = str(buildtime)
|
buildtime, licence, url, summary, description = data
|
||||||
install_time = str(install_time) if install_time else ''
|
dlsize = str(dlsize)
|
||||||
# TODO: Escape newlines in description?
|
buildtime = str(buildtime)
|
||||||
output.append((status, name, epoch, version, release, reponame,
|
install_time = str(install_time) if install_time else ''
|
||||||
dlsize, buildtime, install_time, licence, url, summary,
|
# TODO: Escape newlines in description?
|
||||||
description))
|
output.append((name, epoch, version, release, reponame,
|
||||||
return output
|
dlsize, buildtime, install_time, licence, url, summary,
|
||||||
|
description))
|
||||||
|
outputs.append((status, output))
|
||||||
|
return outputs
|
||||||
|
|
||||||
if operation == 'list':
|
if operation == 'list':
|
||||||
append = append_list
|
append = append_list
|
||||||
@ -966,16 +977,20 @@ def list_templates(args: argparse.Namespace,
|
|||||||
if not args.machine_readable:
|
if not args.machine_readable:
|
||||||
if operation == 'info':
|
if operation == 'info':
|
||||||
tpl_list = info_to_human_output(tpl_list)
|
tpl_list = info_to_human_output(tpl_list)
|
||||||
for status, grp in itertools.groupby(tpl_list, lambda x: x[0]):
|
elif operation == 'list':
|
||||||
|
tpl_list = list_to_output(tpl_list)
|
||||||
|
for status, grp in tpl_list:
|
||||||
print(status.title())
|
print(status.title())
|
||||||
qubesadmin.tools.print_table(list(map(lambda x: x[1:], grp)))
|
qubesadmin.tools.print_table(grp)
|
||||||
else:
|
else:
|
||||||
if operation == 'info':
|
if operation == 'info':
|
||||||
tpl_list = info_to_machine_output(tpl_list)
|
tpl_list = info_to_machine_output(tpl_list)
|
||||||
for status, grp in itertools.groupby(tpl_list, lambda x: x[0]):
|
elif operation == 'list':
|
||||||
|
tpl_list = list_to_output(tpl_list)
|
||||||
|
for status, grp in tpl_list:
|
||||||
print('|' + status.value)
|
print('|' + status.value)
|
||||||
for line in grp:
|
for line in grp:
|
||||||
print('|'.join(line[1:]) + '|')
|
print('|'.join(line) + '|')
|
||||||
|
|
||||||
def search(args: argparse.Namespace, app: qubesadmin.app.QubesBase) -> None:
|
def search(args: argparse.Namespace, app: qubesadmin.app.QubesBase) -> None:
|
||||||
"""Command that searches template details for given patterns.
|
"""Command that searches template details for given patterns.
|
||||||
|
Loading…
Reference in New Issue
Block a user