i code them in oop logic

This commit is contained in:
misano 2024-08-23 02:12:05 +03:30
parent 40902f3f5b
commit 9449311ebf
5 changed files with 94 additions and 0 deletions

View file

@ -0,0 +1,12 @@
from .base import PackageConfig, PackageManager
from .pacman import PacmanConf, Pacman
from .aur import ParuConf, Paru
try:
from .flatpak import FlatpakConf, Flatpak
except:
pass # TODO: write a log for flatpak

View file

@ -0,0 +1,19 @@
from plumbum.cmd import sudo, paru
from .base import PackageConfig, PackageManager
class ParuConf(PackageConfig):
pm: str = 'paru'
class Paru(PackageManager):
pckconf: ParuConf = ParuConf
def install(self):
cmd = sudo[paru['-Syu', self.pckconf.packages]]
cmd()
def list(self):
cmd = paru["-Qeq"]
return ParuConf(packages=cmd().splitlines())

View file

@ -0,0 +1,24 @@
from typing import Type, List
from abc import ABC, abstractmethod
from pydantic import BaseModel
class PackageConfig(BaseModel):
pm: str # package manager name
packages: List[str]
class PackageManager(ABC):
pckconf: Type[PackageConfig] = None
def __init__(self, pckconf: PackageConfig):
if isinstance(pckconf, self.pckconf):
self.pckconf = pckconf
@abstractmethod
def install(self):
raise NotImplemented()
@property
def list(self):
raise NotImplemented()

View file

@ -0,0 +1,20 @@
from plumbum.cmd import flatpak
from .base import PackageConfig, PackageManager
class FlatpakConf(PackageConfig):
pm: str = 'flatpak'
class Flatpak(PackageManager):
pckconf: FlatpakConf = FlatpakConf
def install(self):
cmd = flatpak["install", "-y", self.pckconf.packages]
return cmd()
def list(self):
cmd = flatpak["list", "--app", "--columns=application"]
return FlatpakConf(packages=cmd().splitlines())

View file

@ -0,0 +1,19 @@
from plumbum.cmd import sudo, pacman
from .base import PackageConfig, PackageManager
class PacmanConf(PackageConfig):
pm: str = 'pacman'
class Pacman(PackageManager):
pckconf: PacmanConf = PacmanConf
def install(self):
cmd = sudo[pacman['-Syu', self.pckconf.packages]]
cmd()
def list(self):
cmd = pacman["-Qeq"]
return PacmanConf(packages=cmd().splitlines())