diff --git a/src/python/jw/pkg/cmds/CmdDistro.py b/src/python/jw/pkg/cmds/CmdDistro.py index 988c811f..4747a778 100644 --- a/src/python/jw/pkg/cmds/CmdDistro.py +++ b/src/python/jw/pkg/cmds/CmdDistro.py @@ -1,48 +1,14 @@ # -*- coding: utf-8 -*- -import re, sys from argparse import ArgumentParser from ..App import App -from .Cmd import Cmd as CmdBase +from .DistroBase import DistroBase as CmdBase class CmdDistro(CmdBase): # export def __init__(self, parent: App) -> None: - self.__id = None super().__init__(parent, 'distro', help="System package manager wrapper") - self._add_subcommands() - self.__interactive: bool|None = None - - @property - def distro_id(self): - if self.__id is None: - if self.app.args.id is not None: - # The distribution ID requested by the command line - self.__id = self.app.args.id - else: - # The ID of the distribution we run on - self.__id = self.app.distro_id - return self.__id def add_arguments(self, p: ArgumentParser) -> None: super().add_arguments(p) - p.add_argument('--id', default=None, help='Distribution ID (default is taken from /etc/os-release)') - p.add_argument('--interactive', choices=['true', 'false', 'auto'], default='true', help="Wait for user input or try to proceed unattended") - - @property - def interactive(self) -> bool: - if self.__interactive is None: - match self.app.args.interactive: - case 'true': - self.__interactive = True - case 'false': - self.__interactive = False - case 'auto': - self.__interactive = sys.stdin.isatty() - return self.__interactive - - async def _run(self, args): - # Missing subcommand - self.parser.print_help() - sys.exit(1) diff --git a/src/python/jw/pkg/cmds/DistroBase.py b/src/python/jw/pkg/cmds/DistroBase.py new file mode 100644 index 00000000..29c5a90b --- /dev/null +++ b/src/python/jw/pkg/cmds/DistroBase.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +import re, sys +from argparse import ArgumentParser + +from ..App import App +from .Cmd import Cmd as Base + +class DistroBase(Base): # export + + def __init__(self, parent: App|Base, name: str, help: str) -> None: + self.__id = None + super().__init__(parent, name, help) + self._add_subcommands() + self.__interactive: bool|None = None + + @property + def distro_id(self): + if self.__id is None: + if self.app.args.id is not None: + # The distribution ID requested by the command line + self.__id = self.app.args.id + else: + # The ID of the distribution we run on + self.__id = self.app.distro_id + return self.__id + + def add_arguments(self, p: ArgumentParser) -> None: + super().add_arguments(p) + p.add_argument('--id', default=None, help='Distribution ID (default is taken from /etc/os-release)') + p.add_argument('--interactive', choices=['true', 'false', 'auto'], default='true', help="Wait for user input or try to proceed unattended") + + @property + def interactive(self) -> bool: + if self.__interactive is None: + match self.app.args.interactive: + case 'true': + self.__interactive = True + case 'false': + self.__interactive = False + case 'auto': + self.__interactive = sys.stdin.isatty() + return self.__interactive + + async def _run(self, args): + # Missing subcommand + self.parser.print_help() + sys.exit(1)