description = """getNodes will open a rspec file and print all key/values, or filter results based on a given key or set of keys."""
parser = OptionParser(usage=usage,description=description)
parser.add_option("-i", "--infile", dest="infile", default=None, help = "input rspec file")
- parser.add_option("-f", "--filter", dest="filter", default=None, help = "filter rspec for this tag")
+ parser.add_option("-t", "--tag", dest="tag", default=None, help = "filter rspec for this tag")
+ parser.add_option("-a", "--attribute", dest="attribute", default=None, help = "comma separated list of attributes to display")
parser.add_option("-r", "--recursive", dest="print_children", default=False, action="store_true", help = "print the tag's child nodes")
-
+
return parser
-print
-def print_dict(rdict, print_children, counter=1):
+def print_dict(rdict, options, counter=1):
+ print_children = options.print_children
+ attributes = []
+ if options.attribute:
+ attributes = options.attribute.split(',')
lists = []
tab = " "
+
if not isinstance(rdict, dict):
raise "%s not a dict" % rdict
for (key, value) in rdict.items():
if isinstance(value, StringTypes):
- print tab * counter + "%s: %s" % (key, value)
+ if (attributes and key in attributes) or not attributes:
+ print tab * counter + "%s: %s" % (key, value)
elif isinstance(value, list):
for listitem in value:
if isinstance(listitem, dict):
for (key, listitem) in lists:
if isinstance(listitem, dict):
print tab * (counter - 1) + key
- print_dict(listitem, print_children, counter+1)
- else:
+ print_dict(listitem, options, counter+1)
+ elif not attributes or (attributes and 'children' in attributes):
keys = set([key for (key, listitem) in lists])
if keys: print tab * (counter) + "(children: %s)" % (",".join(keys))
def main():
parser = create_parser();
(options, args) = parser.parse_args()
-
if not options.infile:
print "Rspec file not specified"
return
except:
print "Error reading rspec file"
- if options.filter:
- filter_name = options.filter
- rspec_dicts = rspec.getDictsByTagName(options.filter)
- rspec_dict = {filter_name: rspec_dicts}
+ if options.tag:
+ tag_name = options.tag
+ rspec_dicts = rspec.getDictsByTagName(tag_name)
+ rspec_dict = {tag_name: rspec_dicts}
else:
- rspec_dict = rspec.toDict()
-
- print_dict(rspec_dict, options.print_children)
+ rspec_dict = rspec.toDict()
+
+ print_dict(rspec_dict, options)
return