trove/trovedb/cli/_cli_main.py

39 lines
1 KiB
Python
Raw Normal View History

2026-03-21 22:25:32 -05:00
import argparse
import importlib
import pkgutil
import trovedb.cli as cli
from . import cli_common
def _discover_commands():
commands = {}
for info in pkgutil.iter_modules(cli.__path__):
if info.name.startswith('_'):
continue
mod = importlib.import_module(f'trovedb.cli.{info.name}')
if hasattr(mod, 'setup') and hasattr(mod, 'run'):
# strip trailing _ so 'import_' becomes 'import'
name = info.name.rstrip('_')
commands[name] = mod
return commands
def main():
parser = argparse.ArgumentParser(prog='trove')
cli_common.common_args(parser)
subparsers = parser.add_subparsers(dest='command', required=True)
commands = _discover_commands()
for name, mod in sorted(commands.items()):
sub = subparsers.add_parser(name, help=getattr(mod, '__doc__', None))
mod.setup(sub)
args = parser.parse_args()
env = cli_common.get_env(args)
commands[args.command].run(env, args)
if __name__ == "__main__":
main()