formatters rewrite
This commit is contained in:
parent
77044dd4be
commit
3d1a63df78
1 changed files with 48 additions and 28 deletions
|
|
@ -33,24 +33,26 @@ __all__ = ['ConsoleApplication']
|
||||||
class TableFormatter(object):
|
class TableFormatter(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
def format(klass, data):
|
def format(klass, data):
|
||||||
formatted = u''
|
|
||||||
from prettytable import PrettyTable
|
from prettytable import PrettyTable
|
||||||
header = None
|
formatted = u''
|
||||||
|
before = data.get('BEFORE')
|
||||||
|
if before is not None:
|
||||||
|
formatted += u'%s\n' % before
|
||||||
|
del data['BEFORE']
|
||||||
|
header = data.get('HEADER')
|
||||||
|
if header is not None:
|
||||||
|
del data['HEADER']
|
||||||
for backend_name, result in data.iteritems():
|
for backend_name, result in data.iteritems():
|
||||||
if backend_name == 'HEADER':
|
if not result:
|
||||||
header = result
|
|
||||||
continue
|
continue
|
||||||
else:
|
if header is None:
|
||||||
if header is None:
|
header = ['' for e in xrange(len(result[0]))]
|
||||||
header = backend_name
|
table = PrettyTable(list(header))
|
||||||
else:
|
for col in header:
|
||||||
header = u'%s (%s)' % (backend_name, header)
|
table.set_field_align(col, 'l')
|
||||||
table = PrettyTable(['', header])
|
for row in result:
|
||||||
table.set_field_align('', 'l')
|
table.add_row(row)
|
||||||
table.set_field_align(header, 'l')
|
formatted += u'%s\n%s\n' % (backend_name, unicode(table))
|
||||||
for k, v in result:
|
|
||||||
table.add_row([k, unicode(v)])
|
|
||||||
formatted += u'%s\n' % unicode(table)
|
|
||||||
return unicode(formatted).strip()
|
return unicode(formatted).strip()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -58,19 +60,30 @@ class TextFormatter(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
def format(klass, data):
|
def format(klass, data):
|
||||||
formatted = u''
|
formatted = u''
|
||||||
header = None
|
before = data.get('BEFORE')
|
||||||
|
if before is not None:
|
||||||
|
formatted += u'%s\n' % before
|
||||||
|
del data['BEFORE']
|
||||||
|
header = data.get('HEADER')
|
||||||
|
if header is not None:
|
||||||
|
del data['HEADER']
|
||||||
for backend_name, result in data.iteritems():
|
for backend_name, result in data.iteritems():
|
||||||
if backend_name == 'HEADER':
|
if not result:
|
||||||
header = result
|
|
||||||
continue
|
continue
|
||||||
else:
|
if header is None:
|
||||||
if header is None:
|
header = ['' for e in xrange(len(result[0]))]
|
||||||
header = backend_name
|
formatted += u'%s\n%s\n' % (backend_name, '=' * len(backend_name))
|
||||||
|
for row in result:
|
||||||
|
formatted_cols = []
|
||||||
|
for i, col in enumerate(row):
|
||||||
|
if header[i]:
|
||||||
|
formatted_cols.append(u'%s: %s' % (header[i], col))
|
||||||
|
else:
|
||||||
|
formatted_cols.append(col)
|
||||||
|
if len(formatted_cols) == 2:
|
||||||
|
formatted += u'%s: %s\n' % (formatted_cols[0], formatted_cols[1])
|
||||||
else:
|
else:
|
||||||
header = u'%s (%s)' % (backend_name, header)
|
formatted += u'%s\n' % u' '.join(formatted_cols)
|
||||||
formatted += '%s\n%s\n' % (header, '=' * len(header))
|
|
||||||
for k, v in result:
|
|
||||||
formatted += '%s: %s\n' % (k, unicode(v))
|
|
||||||
return unicode(formatted).strip()
|
return unicode(formatted).strip()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -86,11 +99,11 @@ class ConsoleApplication(BaseApplication):
|
||||||
except BackendsConfig.WrongPermissions, e:
|
except BackendsConfig.WrongPermissions, e:
|
||||||
print >>sys.stderr, 'Error: %s' % e.message
|
print >>sys.stderr, 'Error: %s' % e.message
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
self.output_format = None
|
self.default_output_format = None
|
||||||
|
|
||||||
def _configure_parser(self, parser):
|
def _configure_parser(self, parser):
|
||||||
parser.add_option('-o', '--output-format', choices=formatters.keys(),
|
parser.add_option('-o', '--output-format', choices=formatters.keys(),
|
||||||
default='table', help='output format %s (default: table)' % formatters.keys())
|
help='output format %s (default: table)' % formatters.keys())
|
||||||
|
|
||||||
def ask(self, question, default=None, masked=False, regexp=None):
|
def ask(self, question, default=None, masked=False, regexp=None):
|
||||||
"""
|
"""
|
||||||
|
|
@ -152,7 +165,14 @@ class ConsoleApplication(BaseApplication):
|
||||||
return
|
return
|
||||||
command_result = func(*args)
|
command_result = func(*args)
|
||||||
if isinstance(command_result, dict):
|
if isinstance(command_result, dict):
|
||||||
print formatters[self.options.output_format].format(command_result)
|
if self.options.output_format is not None:
|
||||||
|
output_format = self.options.output_format
|
||||||
|
else:
|
||||||
|
if self.default_output_format is not None:
|
||||||
|
output_format = self.default_output_format
|
||||||
|
else:
|
||||||
|
output_format = 'table'
|
||||||
|
print formatters[output_format].format(command_result)
|
||||||
return 0
|
return 0
|
||||||
elif isinstance(command_result, int):
|
elif isinstance(command_result, int):
|
||||||
return command_result
|
return command_result
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue