cic-cli/cic/runnable/cic_cmd.py

98 lines
2.5 KiB
Python
Raw Normal View History

2021-10-09 18:50:43 +02:00
# standard imports
2022-04-26 13:03:38 +02:00
import importlib
2021-10-09 18:50:43 +02:00
import logging
2022-04-26 13:03:38 +02:00
import os
2021-10-09 18:50:43 +02:00
import sys
# external imports
import chainlib.cli
2022-04-26 13:03:38 +02:00
import cic.cmd.export as cmd_export
import cic.cmd.ext as cmd_ext
# local imports
2021-10-09 18:50:43 +02:00
import cic.cmd.init as cmd_init
2021-10-09 20:37:54 +02:00
import cic.cmd.show as cmd_show
import cic.cmd.wizard as cmd_wizard
from cic.config import ensure_base_configs
2021-10-09 18:50:43 +02:00
logging.basicConfig(level=logging.WARNING)
logg = logging.getLogger()
script_dir = os.path.dirname(os.path.realpath(__file__))
2022-04-26 13:03:38 +02:00
data_dir = os.path.join(script_dir, "..", "data")
base_config_dir = os.path.join(data_dir, "config")
schema_dir = os.path.join(script_dir, "..", "schema")
user_config_dir = os.path.join(
os.path.expanduser("~"), ".config", "cic", "cli", "config"
)
2021-10-09 18:50:43 +02:00
arg_flags = chainlib.cli.argflag_std_read | chainlib.cli.Flag.SEQ
argparser = chainlib.cli.ArgumentParser(
env=os.environ,
arg_flags=arg_flags,
2022-04-26 13:03:38 +02:00
description="CIC cli tool for generating and publishing contracts",
)
2021-10-09 18:50:43 +02:00
sub = argparser.add_subparsers()
2022-04-26 13:03:38 +02:00
sub.dest = "command"
2022-04-26 13:03:38 +02:00
sub_init = sub.add_parser("init", help="initialize new cic data directory")
2021-10-09 18:50:43 +02:00
cmd_init.process_args(sub_init)
2022-04-26 13:03:38 +02:00
sub_show = sub.add_parser(
"show", help="display summary of current state of cic data directory"
)
2021-10-09 20:37:54 +02:00
cmd_show.process_args(sub_show)
2022-04-26 13:03:38 +02:00
sub_export = sub.add_parser(
"export", help="export cic data directory state to a specified target"
)
cmd_export.process_args(sub_export)
2022-04-26 13:03:38 +02:00
sub_ext = sub.add_parser("ext", help="extension helpers")
2021-10-18 10:47:48 +02:00
cmd_ext.process_args(sub_ext)
2022-04-26 13:03:38 +02:00
sub_wizard = sub.add_parser(
"wizard", help="An interactive wizard for creating and publishing contracts"
)
cmd_wizard.process_args(sub_wizard)
2021-10-09 18:50:43 +02:00
args = argparser.parse_args(sys.argv[1:])
if args.command is None:
2022-04-26 13:03:38 +02:00
logg.critical("Subcommand missing")
sys.stderr.write("\033[;91m" + "subcommand missing" + "\033[;39m\n")
argparser.print_help(sys.stderr)
2021-10-09 18:50:43 +02:00
sys.exit(1)
2022-04-26 13:03:38 +02:00
modname = f"cic.cmd.{args.command}"
logg.debug(f"using module {modname}")
2021-10-09 18:50:43 +02:00
cmd_mod = importlib.import_module(modname)
extra_args = {
2022-04-26 13:03:38 +02:00
"p": "RPC_PROVIDER",
}
ensure_base_configs(user_config_dir)
2021-10-09 18:50:43 +02:00
def main():
2022-04-26 13:03:38 +02:00
default_config_dir = args.config or os.path.join(user_config_dir, "mainnet")
config = chainlib.cli.Config.from_args(
args,
arg_flags=arg_flags,
base_config_dir=base_config_dir,
extra_args=extra_args,
default_config_dir=default_config_dir,
)
2021-12-05 08:12:36 +01:00
try:
cmd_mod.execute(config, args)
except Exception as e:
logg.exception(e)
2021-12-05 08:12:36 +01:00
sys.stderr.write("\033[;91m" + str(e) + "\033[;39m\n")
sys.exit(1)
2021-10-09 18:50:43 +02:00
2022-04-26 13:03:38 +02:00
if __name__ == "__main__":
2021-10-09 18:50:43 +02:00
main()