diff --git a/python/eth_token_index/runnable/list.py b/python/eth_token_index/runnable/list.py index 511353a..121c1f0 100644 --- a/python/eth_token_index/runnable/list.py +++ b/python/eth_token_index/runnable/list.py @@ -6,6 +6,7 @@ """ # standard imports +import sys import os import json import argparse @@ -24,6 +25,7 @@ from eth_token_index import TokenUniqueSymbolIndex logging.basicConfig(level=logging.WARNING) logg = logging.getLogger() +default_format = 'terminal' script_dir = os.path.dirname(__file__) data_dir = os.path.join(script_dir, '..', 'data') @@ -32,8 +34,10 @@ argparser = argparse.ArgumentParser() argparser.add_argument('-p', '--provider', dest='p', default='http://localhost:8545', type=str, help='Web3 provider url (http only)') argparser.add_argument('-i', '--chain-spec', dest='i', type=str, default='Ethereum:1', help='Chain specification string') argparser.add_argument('-a', '--contract-address', dest='a', type=str, required=True, help='Token endorsement contract address') +argparser.add_argument('-f', '--format', dest='f', type=str, default=default_format, help='Output format [human, brief]') argparser.add_argument('-v', action='store_true', help='Be verbose') argparser.add_argument('-vv', action='store_true', help='Be more verbose') +argparser.add_argument('token_symbol', type=str, nargs='?', help='Token symbol to return address for') args = argparser.parse_args() if args.vv: @@ -44,24 +48,49 @@ elif args.v: rpc = EthHTTPConnection(args.p) contract_address = args.a +token_symbol = args.token_symbol +fmt = args.f -def main(): - ct = ERC20() - c = TokenUniqueSymbolIndex() - o = c.entry_count(contract_address) + +def out_element(e, fmt=default_format, w=sys.stdout): + if fmt == 'brief': + w.write(e[1] + '\n') + else: + w.write('{} {}\n'.format(e[0], e[1])) + + +def element(ifc, contract_address, token_symbol, fmt=fmt, w=sys.stdout): + o = ifc.address_of(contract_address, token_symbol) r = rpc.do(o) - count = TokenUniqueSymbolIndex.parse_entry_count(r) + a = ifc.parse_address_of(r) + out_element((token_symbol, a), fmt, w) + + +def ls(ifc, contract_address, token_ifc, fmt=fmt, w=sys.stdout): + o = ifc.entry_count(contract_address) + r = rpc.do(o) + count = ifc.parse_entry_count(r) + logg.debug('count {}'.format(count)) for i in range(count): - o = c.entry(contract_address, i) + o = ifc.entry(contract_address, i) r = rpc.do(o) - token_address = TokenUniqueSymbolIndex.parse_entry(r) + token_address = ifc.parse_entry(r) - o = ct.symbol(token_address) + o = token_ifc.symbol(token_address) r = rpc.do(o) - token_symbol = ERC20.parse_symbol(r) + token_symbol = token_ifc.parse_symbol(r) - print('{} {}'.format(token_symbol, token_address)) + element(ifc, contract_address, token_symbol, fmt, w) + + +def main(): + token_ifc = ERC20() + ifc = TokenUniqueSymbolIndex() + if token_symbol != None: + element(ifc, contract_address, token_ifc, token_symbol, fmt, sys.stdout) + else: + ls(ifc, contract_address, token_ifc, fmt, sys.stdout) if __name__ == '__main__': diff --git a/python/setup.cfg b/python/setup.cfg index d6a41fd..78c2a27 100644 --- a/python/setup.cfg +++ b/python/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = eth-address-index -version = 0.1.1a2 +version = 0.1.1a3 description = Signed metadata declarations for ethereum addresses author = Louis Holbrook author_email = dev@holbrook.no