jw-pkg/src/python/jw/pkg/cmds/distro/Cmd.py
Jan Lindemann 78835ecc9c jw.pkg.cmds.distro.Cmd: Add property util
Provide a property .util from Cmd, instanciated on demand from to the
respective distribution directory's Util class.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-02-18 01:20:25 +01:00

62 lines
1.8 KiB
Python

# -*- coding: utf-8 -*-
import os, importlib
from ..Cmd import Cmd as Base
from ..CmdDistro import CmdDistro
from .backend.Util import Util
class Cmd(Base): # export
from .backend.Backend import Backend
def __init__(self, parent: CmdDistro, name: str, help: str) -> None:
super().__init__(parent, name, help)
self.__backend_path: str|None = None
self.__util: Util|None = None
self.__backend: Backend|None = None
@property
def distro_id(self) -> str:
return self.parent.distro_id
@property
def interactive(self) -> bool:
return self.parent.interactive
@property
def _backend_path(self):
if self.__backend_path is None:
backend_id = self.parent.distro_id.lower().replace('-', '_')
match backend_id:
case 'ubuntu' | 'raspbian' | 'kali':
backend_id = 'debian'
case 'centos':
backend_id = 'redhat'
case 'opensuse_tumbleweed':
backend_id = 'suse'
self.__backend_path = (
os.path.splitext(__name__)[0]
+ '.backend.'
+ backend_id
+ '.'
)
return self.__backend_path
def _instantiate(self, name: str, *args, **kwargs):
module = importlib.import_module(self._backend_path + name)
cls = getattr(module, name)
return cls(self, *args, **kwargs)
@property
def util(self) -> Util:
if self.__util is None:
self.__util = self._instantiate('Util')
return self.__util
@property
def _backend(self) -> Backend:
if self.__backend is None:
name = self.__class__.__name__[3:] # Get rid of "Cmd"
self.__backend = self._instantiate(name)
return self.__backend