#!/usr/bin/env python3 from os import environ from sys import argv from bundlewrap.exceptions import FaultUnavailable from bundlewrap.metagen import NodeMetadataProxy from bundlewrap.repo import Repository from bundlewrap.utils import Fault path = environ.get('BW_REPO_PATH', '.') repo = Repository(path) def print_faults(dictionary, keypath=[]): for key, value in sorted(dictionary.items()): key = str(key) if isinstance(value, Fault): try: resolved_fault = value.value except FaultUnavailable: print('{}/{}: [permission denied]'.format('/'.join(keypath), key)) else: if '\n' not in resolved_fault: print('{}/{}: {}'.format('/'.join(keypath), key, value)) elif isinstance(value, (list, set, tuple)): print_faults(dict(enumerate(value)), keypath=keypath+[key]) elif isinstance(value, (dict, NodeMetadataProxy)): print_faults(value, keypath=keypath+[key]) if len(argv) == 1: print('node name missing') exit(1) node = repo.get_node(argv[1]) print_faults({ 'password': node.password, 'metadata': node.metadata, })