41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
![]() |
import prettytable
|
||
|
|
||
|
|
||
|
# Decorator for cli-args
|
||
|
def arg(*args, **kwargs):
|
||
|
def _decorator(func):
|
||
|
# Because of the sematics of decorator composition if we just append
|
||
|
# to the options list positional options will appear to be backwards.
|
||
|
func.__dict__.setdefault('arguments', []).insert(0, (args, kwargs))
|
||
|
return func
|
||
|
return _decorator
|
||
|
|
||
|
|
||
|
def pretty_choice_list(l):
|
||
|
return ', '.join("'%s'" % i for i in l)
|
||
|
|
||
|
|
||
|
def print_list(objs, fields, formatters={}):
|
||
|
pt = prettytable.PrettyTable([f for f in fields], caching=False)
|
||
|
pt.aligns = ['l' for f in fields]
|
||
|
|
||
|
for o in objs:
|
||
|
row = []
|
||
|
for field in fields:
|
||
|
if field in formatters:
|
||
|
row.append(formatters[field](o))
|
||
|
else:
|
||
|
field_name = field.lower().replace(' ', '_')
|
||
|
data = getattr(o, field_name, '')
|
||
|
row.append(data)
|
||
|
pt.add_row(row)
|
||
|
|
||
|
pt.printt(sortby=fields[0])
|
||
|
|
||
|
|
||
|
def print_dict(d):
|
||
|
pt = prettytable.PrettyTable(['Property', 'Value'], caching=False)
|
||
|
pt.aligns = ['l', 'l']
|
||
|
[pt.add_row(list(r)) for r in d.iteritems()]
|
||
|
pt.printt(sortby='Property')
|