def do_block(args): """Runs the block list or block show command, printing output to the console Args: args: The parsed arguments sent to the command at runtime """ rest_client = RestClient(args.url, args.user) if args.subcommand == 'list': blocks = rest_client.list_blocks() keys = ('num', 'block_id', 'batches', 'txns', 'signer') headers = tuple(k.upper() if k != 'batches' else 'BATS' for k in keys) def parse_block_row(block): batches = block.get('batches', []) txns = [t for b in batches for t in b['transactions']] return (block['header'].get('block_num', 0), block['header_signature'], len(batches), len(txns), block['header']['signer_public_key']) if args.format == 'default': fmt.print_terminal_table(headers, blocks, parse_block_row) elif args.format == 'csv': fmt.print_csv(headers, blocks, parse_block_row) elif args.format == 'json' or args.format == 'yaml': data = [{k: d for k, d in zip(keys, parse_block_row(b))} for b in blocks] if args.format == 'yaml': fmt.print_yaml(data) elif args.format == 'json': fmt.print_json(data) else: raise AssertionError('Missing handler: {}'.format(args.format)) else: raise AssertionError('Missing handler: {}'.format(args.format)) if args.subcommand == 'show': output = rest_client.get_block(args.block_id) if args.key: if args.key in output: output = output[args.key] elif args.key in output['header']: output = output['header'][args.key] else: raise CliException( 'key "{}" not found in block or header'.format(args.key)) if args.format == 'yaml': fmt.print_yaml(output) elif args.format == 'json': fmt.print_json(output) else: raise AssertionError('Missing handler: {}'.format(args.format))
def do_block(args): rest_client = RestClient(args.url) def print_json(data): print(json.dumps( data, indent=2, separators=(',', ': '), sort_keys=True)) def print_yaml(data): print(yaml.dump(data, default_flow_style=False)[0:-1]) if args.subcommand == 'list': blocks = rest_client.list_blocks() keys = ('num', 'block_id', 'batches', 'txns', 'signer') headers = (k.upper() if k != 'batches' else 'BATS' for k in keys) def get_block_data(block): batches = block.get('batches', []) txn_count = reduce( lambda t, b: t + len(b.get('transactions', [])), batches, 0) return ( block['header'].get('block_num', 0), block['header_signature'], len(batches), txn_count, block['header']['signer_pubkey'] ) if args.format == 'default': # Fit within 150 chars, without truncating block id print('{:<3} {:128.128} {:<4} {:<4} {:11.11}'.format(*headers)) for block in blocks: print('{:<3} {:128.128} {:<4} {:<4} {:8.8}...'.format( *get_block_data(block))) elif args.format == 'csv': try: writer = csv.writer(sys.stdout) writer.writerow(headers) for block in blocks: writer.writerow(get_block_data(block)) except csv.Error: raise CliException('Error writing CSV.') elif args.format == 'json' or args.format == 'yaml': block_data = list(map( lambda b: dict(zip(keys, get_block_data(b))), blocks )) if args.format == 'json': print_json(block_data) else: print_yaml(block_data) else: raise CliException('unknown format: {}'.format(args.format)) if args.subcommand == 'show': block = rest_client.get_block(args.block_id) if args.key: if args.key in block: print(block[args.key]) elif args.key in block['header']: print(block['header'][args.key]) else: raise CliException( 'key "{}" not found in block or header'.format(args.key)) else: if args.format == 'yaml': print_yaml(block) elif args.format == 'json': print_json(block) else: raise CliException('unknown format: {}'.format(args.format))
def do_block(args): """Runs the block list or block show command, printing output to the console Args: args: The parsed arguments sent to the command at runtime """ rest_client = RestClient(args.url, args.user) if args.subcommand == 'list': block_generator = rest_client.list_blocks() blocks = [] left = args.count for block in block_generator: blocks.append(block) left -= 1 if left <= 0: break keys = ('num', 'block_id', 'batches', 'txns', 'signer') headers = tuple(k.upper() if k != 'batches' else 'BATS' for k in keys) def parse_block_row(block): batches = block.get('batches', []) txns = [t for b in batches for t in b['transactions']] return ( block['header'].get('block_num', 0), block['header_signature'], len(batches), len(txns), block['header']['signer_public_key']) if args.format == 'default': fmt.print_terminal_table(headers, blocks, parse_block_row) elif args.format == 'csv': fmt.print_csv(headers, blocks, parse_block_row) elif args.format == 'json' or args.format == 'yaml': data = [{k: d for k, d in zip(keys, parse_block_row(b))} for b in blocks] if args.format == 'yaml': fmt.print_yaml(data) elif args.format == 'json': fmt.print_json(data) else: raise AssertionError('Missing handler: {}'.format(args.format)) else: raise AssertionError('Missing handler: {}'.format(args.format)) if args.subcommand == 'show': output = rest_client.get_block(args.block_id) if args.key: if args.key in output: output = output[args.key] elif args.key in output['header']: output = output['header'][args.key] else: raise CliException( 'key "{}" not found in block or header'.format(args.key)) if args.format == 'yaml': fmt.print_yaml(output) elif args.format == 'json': fmt.print_json(output) else: raise AssertionError('Missing handler: {}'.format(args.format))
def do_block(args): """Runs the batch list or batch show command, printing output to the console Args: args: The parsed arguments sent to the command at runtime """ rest_client = RestClient(args.url) def print_json(data): print( json.dumps(data, indent=2, separators=(',', ': '), sort_keys=True)) def print_yaml(data): print(yaml.dump(data, default_flow_style=False)[0:-1]) if args.subcommand == 'list': blocks = rest_client.list_blocks() keys = ('num', 'block_id', 'batches', 'txns', 'signer') headers = (k.upper() if k != 'batches' else 'BATS' for k in keys) def get_data(block): batches = block.get('batches', []) txns = [t for b in batches for t in b['transactions']] return (block['header'].get('block_num', 0), block['header_signature'], len(batches), len(txns), block['header']['signer_pubkey']) if args.format == 'default': # Set column widths based on window and data size window_width = tty.width() try: id_width = len(blocks[0]['header_signature']) sign_width = len(blocks[0]['header']['signer_pubkey']) except IndexError: # if no data was returned, use short default widths id_width = 30 sign_width = 15 if sys.stdout.isatty(): adjusted = int(window_width) - id_width - 22 adjusted = 6 if adjusted < 6 else adjusted else: adjusted = sign_width fmts = '{{:<3}} {{:{i}.{i}}} {{:<4}} {{:<4}} {{:{a}.{a}}}'\ .format(i=id_width, a=adjusted) # Print data in rows and columns print(fmts.format(*headers)) for block in blocks: print( fmts.format(*get_data(block)) + ('...' if adjusted < sign_width and sign_width else '')) elif args.format == 'csv': try: writer = csv.writer(sys.stdout) writer.writerow(headers) for block in blocks: writer.writerow(get_data(block)) except csv.Error as e: raise CliException('Error writing CSV: {}'.format(e)) elif args.format == 'json' or args.format == 'yaml': data = [{k: d for k, d in zip(keys, get_data(b))} for b in blocks] if args.format == 'yaml': print_yaml(data) elif args.format == 'json': print_json(data) else: raise AssertionError('Missing handler: {}'.format(args.format)) else: raise AssertionError('Missing handler: {}'.format(args.format)) if args.subcommand == 'show': block = rest_client.get_block(args.block_id) if args.key: if args.key in block: print(block[args.key]) elif args.key in block['header']: print(block['header'][args.key]) else: raise CliException( 'key "{}" not found in block or header'.format(args.key)) else: if args.format == 'yaml': print_yaml(block) elif args.format == 'json': print_json(block) else: raise AssertionError('Missing handler: {}'.format(args.format))
def do_block(args): subcommands = ['list', 'show'] if args.subcommand not in subcommands: print('Unknown sub-command, expecting one of {0}'.format( subcommands)) return rest_client = RestClient(args.url) def print_json(data): print(json.dumps( data, indent=2, separators=(',', ': '), sort_keys=True)) def print_yaml(data): print(yaml.dump(data, default_flow_style=False)[0:-1]) if args.subcommand == 'list': blocks = rest_client.list_blocks() keys = ('num', 'block_id', 'batches', 'txns', 'signer') headers = (k.upper() for k in keys) def get_block_data(block): batches = block.get('batches', []) txn_count = reduce( lambda t, b: t + len(b.get('transactions', [])), batches, 0) return ( block['header'].get('block_num', 0), block['header_signature'], len(batches), txn_count, block['header']['signer_pubkey'] ) if args.format == 'default': print('{:<3} {:88.88} {:<7} {:<4} {:20.20}'.format(*headers)) for block in blocks: print('{:<3} {:88.88} {:<7} {:<4} {:17.17}...'.format( *get_block_data(block))) elif args.format == 'csv': try: writer = csv.writer(sys.stdout) writer.writerow(headers) for block in blocks: writer.writerow(get_block_data(block)) except csv.Error: raise CliException('Error writing CSV.') elif args.format == 'json' or args.format == 'yaml': block_data = list(map( lambda b: dict(zip(keys, get_block_data(b))), blocks )) if args.format == 'json': print_json(block_data) else: print_yaml(block_data) else: raise CliException('unknown format: {}'.format(args.format)) elif args.subcommand == 'show': block = rest_client.get_block(args.block_id) if args.key: if args.key in block: print(block[args.key]) elif args.key in block['header']: print(block['header'][args.key]) else: raise CliException( 'key "{}" not found in block or header'.format(args.key)) else: if args.format == 'yaml': print_yaml(block) elif args.format == 'json': print_json(block) else: raise CliException('unknown format: {}'.format(args.format))