Adds the ability to list atomic labels via 'atest label list --atomicgroup'
Adds ability to parse values from nested dicts to topic_common for the above.
Signed-off-by: Gregory Smith <gps@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@3350 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/cli/topic_common.py b/cli/topic_common.py
index ce4de41..0070349 100755
--- a/cli/topic_common.py
+++ b/cli/topic_common.py
@@ -100,6 +100,7 @@
'synch_count': 'Sync Count',
'max_number_of_machines': 'Max. hosts to use',
'parse_failed_repair': 'Include failed repair results',
+ 'atomic_group.name': 'Atomic Group Name',
}
# In the failure, tag that will replace the item.
@@ -132,6 +133,24 @@
'platform': __convert_platform,
'labels': lambda labels: ', '.join(labels)}
+
+def _get_item_key(item, key):
+ """Allow for lookups in nested dictionaries using '.'s within a key."""
+ if key in item:
+ return item[key]
+ nested_item = item
+ for subkey in key.split('.'):
+ if not subkey:
+ raise ValueError('empty subkey in %r' % key)
+ try:
+ nested_item = nested_item[subkey]
+ except KeyError, e:
+ raise KeyError('%r - looking up key %r in %r' %
+ (e, key, nested_item))
+ else:
+ return nested_item
+
+
class CliError(Exception):
pass
@@ -490,7 +509,7 @@
for key in keys:
print '%s: %s' % (KEYS_TO_NAMES_EN[key],
self.__conv_value(key,
- item[key]))
+ _get_item_key(item, key)))
def print_fields_parse(self, items, keys, title=None):
@@ -499,10 +518,10 @@
for item in items:
values = ['%s=%s' % (KEYS_TO_NAMES_EN[key],
self.__conv_value(key,
- item[key]))
+ _get_item_key(item, key)))
for key in keys
if self.__conv_value(key,
- item[key]) != '']
+ _get_item_key(item, key)) != '']
print self.parse_delim.join(values)
@@ -517,7 +536,7 @@
return
for key in keys[:-1]:
lens[key] = max(len(self.__conv_value(key,
- item[key]))
+ _get_item_key(item, key)))
for item in items)
lens[key] = max(lens[key], len(KEYS_TO_NAMES_EN[key]))
lens[keys[-1]] = 0
@@ -535,13 +554,14 @@
header = tuple(KEYS_TO_NAMES_EN[key] for key in keys_header)
print fmt % header
for item in items:
- values = tuple(self.__conv_value(key, item[key])
+ values = tuple(self.__conv_value(key,
+ _get_item_key(item, key))
for key in keys_header)
print fmt % values
if sublist_keys:
for key in sublist_keys:
self.print_wrapped(KEYS_TO_NAMES_EN[key],
- item[key])
+ _get_item_key(item, key))
print '\n'
@@ -550,16 +570,16 @@
format"""
for item in items:
values = ['%s=%s' % (KEYS_TO_NAMES_EN[key],
- self.__conv_value(key, item[key]))
+ self.__conv_value(key, _get_item_key(item, key)))
for key in keys_header
if self.__conv_value(key,
- item[key]) != '']
+ _get_item_key(item, key)) != '']
if sublist_keys:
[values.append('%s=%s'% (KEYS_TO_NAMES_EN[key],
- ','.join(item[key])))
+ ','.join(_get_item_key(item, key))))
for key in sublist_keys
- if len(item[key])]
+ if len(_get_item_key(item, key))]
print self.parse_delim.join(values)
@@ -585,10 +605,10 @@
for item in items:
values += ['%s=%s' % (KEYS_TO_NAMES_EN[key],
self.__conv_value(key,
- item[key]))
+ _get_item_key(item, key)))
for key in ['id', 'name']
if self.__conv_value(key,
- item[key]) != '']
+ _get_item_key(item, key)) != '']
print self.parse_delim.join(values)
@@ -596,7 +616,7 @@
"""Print a wrapped list of results"""
if not items:
return
- print ' '.join(item[key] for item in items)
+ print ' '.join(_get_item_key(item, key) for item in items)
def print_list_parse(self, items, key):
@@ -604,4 +624,4 @@
if not items:
return
print '%s=%s' % (KEYS_TO_NAMES_EN[key],
- ','.join(item[key] for item in items))
+ ','.join(_get_item_key(item, key) for item in items))