X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-base.git/blobdiff_plain/ed658ce3ef8033566f0d2a2e62809a802d10a884..d044f3d9519da351fba2eca7c58c51ad05bed88e:/scripts/invirt-getconf diff --git a/scripts/invirt-getconf b/scripts/invirt-getconf index 5b3681b..e5da205 100755 --- a/scripts/invirt-getconf +++ b/scripts/invirt-getconf @@ -20,10 +20,10 @@ import argparse import sys import yaml -import invirt +import invirt.config -class InvirtException(Exception): +class PathResolutionException(Exception): pass @@ -37,47 +37,44 @@ def main(): components = args.path.split('.') + conf = invirt.config.load(args.refresh) + for i, component in enumerate(components): + progress = '.'.join(components[:i]) + + if isinstance(conf, list): + try: + component = int(component) + except ValueError: + raise PathResolutionException(f'{progress}: node is a list; integer path component required, ' + 'but got "{component}"') + + try: + conf = conf[component] + except IndexError: + raise PathResolutionException(f'{progress}: index {component} out of range') + elif isinstance(conf, dict): + try: + conf = conf[component] + except KeyError: + raise PathResolutionException(f'{progress}: key "{component}" not found') else: - components = [] - - conf = config.load(opts.refresh) - for i, component in enumerate(components): - progress = '.'.join(components[:i]) - if type(conf) not in (dict, list): - raise invirt_exception( - '%s: node has no children (atomic datum)' % progress) - if type(conf) == list: - try: component = int(component) - except: raise invirt_exception( - '%s: node a list; integer path component required, ' - 'but got "%s"' % (progress, component)) - try: conf = conf[component] - except KeyError: raise invirt_exception( - '%s: key "%s" not found' % (progress, component)) - except IndexError: raise invirt_exception( - '%s: index %s out of range' % (progress, component)) - - if opts.ls: - if type(conf) not in (dict, list): - raise invirt_exception( - '%s: node has no children (atomic datum)' - % '.'.join(components)) - if type(conf) == list: - for i in xrange(len(conf)): - print i - else: - for k in conf.iterkeys(): - print k + raise PathResolutionException(f'{progress}: node has no children (atomic datum)') + + if args.ls: + if isinstance(conf, list): + for i in range(len(conf)): + print(i) + elif isinstance(conf, dict): + for k in conf: + print(k) else: - if type(conf) not in (dict, list): - print conf - else: - import yaml - yaml.dump(conf, stdout, - Dumper=yaml.CSafeDumper, default_flow_style=False) - except invirt_exception, ex: - print >> stderr, ex - return 1 + raise PathResolutionException(f'{".".join(components)}: node has no children (atomic datum)') + else: + if isinstance(conf, (dict, list)): + print(conf) + else: + yaml.dump(conf, sys.stdout, Dumper=yaml.CSafeDumper, default_flow_style=False) + if __name__ == '__main__': - exit(main(argv)) + main()