diff --git a/tools/python/jwutils/Cmd.py b/tools/python/jwutils/Cmd.py index d7515ab..e8a080f 100644 --- a/tools/python/jwutils/Cmd.py +++ b/tools/python/jwutils/Cmd.py @@ -1,9 +1,10 @@ from __future__ import annotations +from typing import List, Type, Union, TypeVar import abc import argparse from abc import ABC from argparse import ArgumentParser, _SubParsersAction -from typing import List, Type, Union, TypeVar +import inspect, sys, re from jwutils import log @@ -32,7 +33,16 @@ class Cmd(ABC): # export r.set_defaults(func=self.run) return r - def add_subcommands(self, cmd: Union[Type[Cmd], List[Type[Cmd]]]) -> None: + def add_subcommands(self, cmd: Union[str, Type[Cmd], List[Type[Cmd]]]) -> None: + if isinstance(cmd, str): + sc = [] + for name, obj in inspect.getmembers(sys.modules[self.__class__.__module__]): + if inspect.isclass(obj): + if re.search(cmd, str(obj)): + sc.append(obj) + log.slog(log.DEBUG, f"Found subcommand {obj}") + self.add_subcommands(sc) + return if isinstance(cmd, list): for c in cmd: self.add_subcommands(c)