diff --git a/torba/server/cli.py b/torba/server/cli.py new file mode 100644 index 000000000..4a9788923 --- /dev/null +++ b/torba/server/cli.py @@ -0,0 +1,39 @@ +import logging +import traceback +import argparse +import importlib +from .env import Env +from .server import Server + + +def get_argument_parser(): + parser = argparse.ArgumentParser( + prog="torba-server" + ) + parser.add_argument("spvserver", type=str, help="Python class path to SPV server implementation.") + return parser + + +def get_coin_class(spvserver): + spvserver_path, coin_class_name = spvserver.rsplit('.', 1) + spvserver_module = importlib.import_module(spvserver_path) + return getattr(spvserver_module, coin_class_name) + + +def main(): + parser = get_argument_parser() + args = parser.parse_args() + coin_class = get_coin_class(args.spvserver) + logging.info('torba.server starting') + try: + server = Server(Env(coin_class)) + server.run() + except Exception: + traceback.print_exc() + logging.critical('torba.server terminated abnormally') + else: + logging.info('torba.server terminated normally') + + +if __name__ == "__main__": + main()