From 9449311ebf45497957d9f7a0f96ef828bc4bfbc1 Mon Sep 17 00:00:00 2001 From: misano Date: Fri, 23 Aug 2024 02:12:05 +0330 Subject: [PATCH] i code them in oop logic --- src/parch-profiler/pckmng/__init__.py | 12 ++++++++++++ src/parch-profiler/pckmng/aur.py | 19 +++++++++++++++++++ src/parch-profiler/pckmng/base.py | 24 ++++++++++++++++++++++++ src/parch-profiler/pckmng/flatpak.py | 20 ++++++++++++++++++++ src/parch-profiler/pckmng/pacman.py | 19 +++++++++++++++++++ 5 files changed, 94 insertions(+) create mode 100644 src/parch-profiler/pckmng/__init__.py create mode 100644 src/parch-profiler/pckmng/aur.py create mode 100644 src/parch-profiler/pckmng/base.py create mode 100644 src/parch-profiler/pckmng/flatpak.py create mode 100644 src/parch-profiler/pckmng/pacman.py diff --git a/src/parch-profiler/pckmng/__init__.py b/src/parch-profiler/pckmng/__init__.py new file mode 100644 index 0000000..fd35ed0 --- /dev/null +++ b/src/parch-profiler/pckmng/__init__.py @@ -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 + + + diff --git a/src/parch-profiler/pckmng/aur.py b/src/parch-profiler/pckmng/aur.py new file mode 100644 index 0000000..f27980a --- /dev/null +++ b/src/parch-profiler/pckmng/aur.py @@ -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()) diff --git a/src/parch-profiler/pckmng/base.py b/src/parch-profiler/pckmng/base.py new file mode 100644 index 0000000..d379a8d --- /dev/null +++ b/src/parch-profiler/pckmng/base.py @@ -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() diff --git a/src/parch-profiler/pckmng/flatpak.py b/src/parch-profiler/pckmng/flatpak.py new file mode 100644 index 0000000..f9d0f2a --- /dev/null +++ b/src/parch-profiler/pckmng/flatpak.py @@ -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()) + diff --git a/src/parch-profiler/pckmng/pacman.py b/src/parch-profiler/pckmng/pacman.py new file mode 100644 index 0000000..35feb7a --- /dev/null +++ b/src/parch-profiler/pckmng/pacman.py @@ -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())