-def main( argv ):
- try: command, key = argv
- except: print >> stderr, 'invirt-getconf KEY'
- conf = load()
- for component in key.split('.')[:-1]:
- if component.isdigit(): component = int( component )
- conf = conf[ component ]
- print conf[key]
+ conf = load(opts.src, opts.cache, opts.refresh)
+ components = key.split('.')
+ 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)' % progress)
+ if type(conf) == list:
+ for i in xrange(len(conf)):
+ print i
+ else:
+ for k in conf.iterkeys():
+ print k
+ else:
+ print conf
+ except invirt_exception, ex:
+ print >> stderr, ex
+ return 1