74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
#!/usr/bin/python
|
|
import sys
|
|
import os
|
|
import logging
|
|
import uuid
|
|
import json
|
|
import argparse
|
|
|
|
# external imports
|
|
import confini
|
|
import redis
|
|
from xdg.BaseDirectory import xdg_config_home
|
|
from chainlib.chain import ChainSpec
|
|
|
|
# local imports
|
|
import cic_eth.cli
|
|
from cic_eth.api import Api
|
|
|
|
logging.basicConfig(level=logging.WARNING)
|
|
logg = logging.getLogger()
|
|
logging.getLogger('confini').setLevel(logging.WARNING)
|
|
logging.getLogger('gnupg').setLevel(logging.WARNING)
|
|
|
|
arg_flags = cic_eth.cli.argflag_std_base
|
|
local_arg_flags = cic_eth.cli.argflag_local_taskcallback
|
|
argparser = cic_eth.cli.ArgumentParser(arg_flags)
|
|
argparser.add_argument('--no-register', dest='no_register', action='store_true', help='Do not register new account in on-chain accounts index')
|
|
argparser.process_local_flags(local_arg_flags)
|
|
args = argparser.parse_args()
|
|
|
|
extra_args = {
|
|
'no_register': None,
|
|
}
|
|
config = cic_eth.cli.Config.from_args(args, arg_flags, local_arg_flags, extra_args=extra_args)
|
|
|
|
celery_app = cic_eth.cli.CeleryApp.from_config(config)
|
|
|
|
def main():
|
|
redis_host = config.get('REDIS_HOST')
|
|
redis_port = config.get('REDIS_PORT')
|
|
redis_db = config.get('REDIS_DB')
|
|
redis_channel = str(uuid.uuid4())
|
|
r = redis.Redis(redis_host, redis_port, redis_db)
|
|
|
|
ps = r.pubsub()
|
|
ps.subscribe(redis_channel)
|
|
ps.get_message()
|
|
|
|
api = Api(
|
|
config.get('CHAIN_SPEC'),
|
|
queue=config.get('CELERY_QUEUE'),
|
|
callback_param='{}:{}:{}:{}'.format(config.get('_REDIS_HOST_CALLBACK'), config.get('_REDIS_PORT_CALLBACK'), config.get('REDIS_DB'), redis_channel),
|
|
callback_task='cic_eth.callbacks.redis.redis',
|
|
callback_queue=config.get('CELERY_QUEUE'),
|
|
)
|
|
|
|
register = not config.get('_NO_REGISTER')
|
|
logg.debug('register {}'.format(register))
|
|
t = api.create_account(register=register)
|
|
|
|
ps.get_message()
|
|
try:
|
|
o = ps.get_message(timeout=config.get('REDIS_TIMEOUT'))
|
|
except TimeoutError as e:
|
|
sys.stderr.write('got no new address from cic-eth before timeout: {}\n'.format(e))
|
|
sys.exit(1)
|
|
ps.unsubscribe()
|
|
m = json.loads(o['data'])
|
|
print(m['result'])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|