diff --git a/src/python/jw/pkg/cmds/CmdDistro.py b/src/python/jw/pkg/cmds/CmdDistro.py index 6184c244..988c811f 100644 --- a/src/python/jw/pkg/cmds/CmdDistro.py +++ b/src/python/jw/pkg/cmds/CmdDistro.py @@ -43,4 +43,6 @@ class CmdDistro(CmdBase): # export return self.__interactive async def _run(self, args): - raise Exception("Running with args", args) + # Missing subcommand + self.parser.print_help() + sys.exit(1) diff --git a/src/python/jw/pkg/cmds/CmdProjects.py b/src/python/jw/pkg/cmds/CmdProjects.py index e91e1a3e..a09d3baf 100644 --- a/src/python/jw/pkg/cmds/CmdProjects.py +++ b/src/python/jw/pkg/cmds/CmdProjects.py @@ -16,4 +16,6 @@ class CmdProjects(CmdBase): # export super().add_arguments(p) async def _run(self, args): - raise Exception("Running with args", args) + # Missing subcommand + self.parser.print_help() + sys.exit(1) diff --git a/src/python/jw/pkg/lib/App.py b/src/python/jw/pkg/lib/App.py index 1fb2b754..17f7a497 100644 --- a/src/python/jw/pkg/lib/App.py +++ b/src/python/jw/pkg/lib/App.py @@ -22,6 +22,7 @@ class App: # export parser = parsers.add_parser(cmd.name, help=cmd.help, formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.set_defaults(func=cmd.run) cmd.add_arguments(parser) + cmd.set_parser(parser) return parser def add_cmds_to_parser(parent, parser, cmds, all=False): diff --git a/src/python/jw/pkg/lib/Cmd.py b/src/python/jw/pkg/lib/Cmd.py index ccdbf44b..9002b34b 100644 --- a/src/python/jw/pkg/lib/Cmd.py +++ b/src/python/jw/pkg/lib/Cmd.py @@ -20,6 +20,7 @@ class Cmd(abc.ABC): # export self.__help = help self.__children: list[Cmd] = [] self.__child_classes: list[type[Cmd]] = [] + self.__parser: ArgumentParser|None = None @abc.abstractmethod async def _run(self, args) -> None: @@ -50,6 +51,14 @@ class Cmd(abc.ABC): # export parent = parent.__parent return self.__app + # Don't use a setter decorator to force using a grepable method + def set_parser(self, parser: ArgumentParser): + self.__parser = parser + + @property + def parser(self) -> str: + return self.__parser + @property def name(self) -> str: return self.__name