# -*- 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)