2026-01-23 14:54:27 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
import os, importlib
|
|
|
|
|
|
|
|
|
|
from ..Cmd import Cmd as Base
|
|
|
|
|
from ..CmdDistro import CmdDistro
|
|
|
|
|
|
|
|
|
|
class Cmd(Base): # export
|
|
|
|
|
|
|
|
|
|
def __init__(self, parent: CmdDistro, name: str, help: str) -> None:
|
|
|
|
|
super().__init__(parent, name, help)
|
|
|
|
|
self.__backend = None
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def distro_id(self) -> str:
|
|
|
|
|
return self.parent.distro_id
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def interactive(self) -> bool:
|
|
|
|
|
return self.parent.interactive
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def _backend(self):
|
|
|
|
|
if self.__backend is None:
|
|
|
|
|
class_name = self.__class__.__name__[3:] # Get rid of "Cmd"
|
|
|
|
|
backend_id = self.parent.distro_id.lower().replace('-', '_')
|
|
|
|
|
match backend_id:
|
2026-02-14 20:35:53 +01:00
|
|
|
case 'ubuntu' | 'raspbian' | 'kali':
|
2026-01-23 14:54:27 +01:00
|
|
|
backend_id = 'debian'
|
|
|
|
|
case 'centos':
|
|
|
|
|
backend_id = 'redhat'
|
|
|
|
|
case 'opensuse_tumbleweed':
|
|
|
|
|
backend_id = 'suse'
|
|
|
|
|
module_name = (
|
|
|
|
|
os.path.splitext(__name__)[0]
|
|
|
|
|
+ '.backend.'
|
|
|
|
|
+ backend_id
|
|
|
|
|
+ '.'
|
|
|
|
|
+ class_name
|
|
|
|
|
)
|
|
|
|
|
module = importlib.import_module(module_name)
|
|
|
|
|
cls = getattr(module, class_name)
|
|
|
|
|
self.__backend = cls(self)
|
|
|
|
|
return self.__backend
|