From 238c082941e029b3f98d0812c6a99ac52e60591c Mon Sep 17 00:00:00 2001 From: Ben Steffen Date: Tue, 26 Nov 2019 00:39:02 -0500 Subject: [PATCH] Make path parsing more idiomatic --- scripts/invirt-getconf | 69 +++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 39 deletions(-) diff --git a/scripts/invirt-getconf b/scripts/invirt-getconf index 5b3681b..d510a1f 100755 --- a/scripts/invirt-getconf +++ b/scripts/invirt-getconf @@ -37,47 +37,38 @@ 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 InvirtException(f'{progress}: node a list; integer path component required, ' + 'but got "{component}"') + + try: + conf = conf[component] + except IndexError: + raise InvirtException(f'{progress}: index {component} out of range') + elif isinstance(conf, dict): + try: + conf = conf[component] + except KeyError: + raise InvirtException(f'{progress}: key "{component}" not found') + except IndexError: + raise InvirtException(f'{progress}: index {component} out of range') 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 InvirtException(f'{progress}: node has no children (atomic datum)') 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 InvirtException(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)) -- 1.7.9.5