Changes to the table management functions yet again to change the
implementation to a more elegant solution that won't fail when devices
are disabled. The omission of null fields is also no longer required
since the table printing now provides a choice on whether null fields
are shown or not. Null fields are fields that = 0/empty/False.
Change-Id: Ib3576f25d14143c160eb066dd954d6f84f84b358
diff --git a/cli/table.py b/cli/table.py
index 6db53bc..c3cf94d 100644
--- a/cli/table.py
+++ b/cli/table.py
@@ -90,7 +90,7 @@
def print_pb_list_as_table(header, items, fields_to_omit=None,
- printfn=_printfn, dividers=10):
+ printfn=_printfn, dividers=10, show_nulls=False):
from cli.utils import pb2dict
t = TablePrinter()
@@ -99,59 +99,44 @@
def add(_row, pb, prefix='', number=0):
d = pb2dict(pb)
- l=[]
- for field in sorted(pb._fields, key=lambda f: f.number):
- l.append(field.name)
- for field in d:
- if field not in l:
- l.append(field)
-
- field_number = 0
- #for field in pb._fields:
- for field in sorted(d, key=lambda f: l.index(f)):
- #fname = prefix + field.name
- fname = prefix + field
+ if show_nulls:
+ fields = pb.DESCRIPTOR.fields
+ else:
+ fields = pb._fields
+ for field in fields:
+ fname = prefix + field.name
if fname in fields_to_omit:
continue
- #value = getattr(pb, field.name)
- value = getattr(pb, field)
+ value = getattr(pb, field.name)
if isinstance(value, Message):
add(_row, value, fname + '.',
- 100 * (number + field_number))
- #100 * (number + field.number))
+ 100 * (number + field.number))
else:
- t.add_cell(_row, number + field_number, fname,
- d.get(field))
- #t.add_cell(_row, number + field.number, fname,
- # d.get(field.name))
- field_number += 1
+ t.add_cell(_row, number + field.number, fname,
+ d.get(field.name))
add(row, obj)
t.print_table(header, printfn, dividers)
-def print_pb_as_table(header, pb, fields_to_omit={}, printfn=_printfn):
+def print_pb_as_table(header, pb, fields_to_omit={}, printfn=_printfn,
+ show_nulls=False):
from cli.utils import pb2dict
t = TablePrinter()
def pr(_pb, prefix=''):
d = pb2dict(_pb)
- l=[]
- for field in sorted(pb._fields, key=lambda f: f.number):
- l.append(field.name)
- for field in d:
- if field not in l:
- l.append(field)
- #for field in sorted(_pb._fields, key=lambda f: f.number):
- for field in sorted(d, key=lambda f: l.index(f)):
- #fname = prefix + field.name
- fname = prefix + field
+ if show_nulls:
+ fields = _pb.DESCRIPTOR.fields
+ else:
+ fields = _pb._fields
+ for field in sorted(fields, key=lambda f: f.number):
+ fname = prefix + field.name
if fname in fields_to_omit:
continue
- #value = getattr(_pb, field.name)
- value = getattr(_pb, field)
+ value = getattr(_pb, field.name)
if isinstance(value, Message):
pr(value, fname + '.')
elif isinstance(value, RepeatedCompositeFieldContainer):
@@ -162,8 +147,7 @@
else:
row = t.number_of_rows()
t.add_cell(row, 0, 'field', fname)
- #t.add_cell(row, 1, 'value', d.get(field.name))
- t.add_cell(row, 1, 'value', d.get(field))
+ t.add_cell(row, 1, 'value', d.get(field.name))
pr(pb)