2026-01-23 14:54:27 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
import re, sys
|
|
|
|
|
from argparse import ArgumentParser
|
|
|
|
|
|
|
|
|
|
from ..App import App
|
|
|
|
|
from .Cmd import Cmd 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:
|
|
|
|
|
self.__id = self.app.args.id
|
|
|
|
|
else:
|
|
|
|
|
os_release = '/etc/os-release'
|
|
|
|
|
with open(os_release, 'r') as file:
|
2026-02-14 20:36:27 +01:00
|
|
|
m = re.search(r'^\s*ID\s*=\s*("?)([^"\n]+)\1\s*$', file.read(), re.MULTILINE)
|
|
|
|
|
if m is None:
|
2026-01-23 14:54:27 +01:00
|
|
|
raise Exception(f'Could not read "ID=" from "{os_release}"')
|
2026-02-14 20:36:27 +01:00
|
|
|
self.__id = m.group(2)
|
2026-01-23 14:54:27 +01:00
|
|
|
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)')
|
2026-01-29 11:29:54 +01:00
|
|
|
p.add_argument('--interactive', choices=['true', 'false', 'auto'], default='true', help="Wait for user input or try to proceed unattended")
|
2026-01-23 14:54:27 +01:00
|
|
|
|
|
|
|
|
@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):
|
|
|
|
|
raise Exception("Running with args", args)
|