Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

[python] pamac

#1Messageil y a 5 ans

:bjr: depuis aujourd'hui, nous avons avec pamac une bibliothèque pour jouer en python avec ce gestionnaire de paquets

Un petit script qui va faire un pamac list ou pacman -Q, donc un petit ls sans prétention, qui a plus un intérêt pédagogique que pratique.
Pour faire mumuse (corser le facile), il va prendre deux paramètres optionnels :
  • le premier l'ordre de tri (size par défaut) (name,desc,repo,size,version)
  • deuxième, afficher en plus le détail d'un paquet (pour test sans intérêt ici)
Après lui avoir donné des droits en exécution (chmod +x pacls) , on peut donc l'utiliser avec

./pacls size gcc
Le code:

#!/usr/bin/python
# fichier pacls excécutable
import gi, sys
gi.require_version('Pamac', '1.0')
from gi.repository import Pamac     # import /usr/share/gir-1.0/Pamac-1.0.gir

class bcolors:		# un terminal coloré est un plus
    HEADER = '\033[95m'
    BLUE = '\033[94m'
    GREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
    DISABLE = '\033[02m'
    WHITE = '\033[97m'

fr = {	# je ne parle pas angliche
    'app_name':'Application', 
    'desc':'Description',
    'download_size':'Taille du paquet',
    'icon':'Icône',
    'installed_version':'Version',
    'name':'Nom',
    'origin':'Installé',
    'repo':'Dépôt',
    'size':'Taille installée',
    'version':'Version'
}

def list_installed_pkgs(order: str, detail: str):
    pkgs = db.get_installed_pkgs()
    if not order in dir(pkgs[0]):
        print(f'not found order:{order}')
        order = 'size'
    pkgs.sort(key=lambda x: getattr(x, order), reverse=False)

    total = 0 
    for pkg in pkgs:
        total += pkg.size
        size = round(pkg.size/1000/1000, 2)
        if size > 30:
            size = str(size) + "Mo"
        else:
            size = ""
        CORIGIN = bcolors.WHITE
        if pkg.repo == "":        # un méchant paquet non officiels !
            CORIGIN = bcolors.FAIL
            pkg.repo = '-'
        line = (
            f"{bcolors.GREEN}{pkg.name:{26}}{bcolors.ENDC}"
            f"{bcolors.BOLD}{pkg.installed_version:{19}}{bcolors.ENDC}"
            f"{CORIGIN}{pkg.repo:{10}}{bcolors.ENDC}"
            f"{bcolors.DISABLE}{pkg.desc[:35]:{37}}{bcolors.ENDC}"
            f"{size:{8}}"
        )
        print(line)

        # juste pour voir ce que nous retourne cette fonction comme infos
        if detail == pkg.name:
            attributs = dir(pkg)
            for a in attributs:
                if a[0] == '_':
                    continue
                print(f'{fr[a]} ({a}): {getattr(pkg,a)}')        
        i += 1
    total = round(total/1000/1000/1000, 2)
    print(f"\n{len(pkgs)} packages {total}Go")

if __name__ == "__main__":
    config = Pamac.Config(conf_path="/etc/pamac.conf")
    db = Pamac.Database(config=config)

    order = 'size'
    detail = ''
    if len(sys.argv) > 1:
        order = sys.argv[1]
        if len(sys.argv) > 2:
            detail = sys.argv[2]

    list_installed_pkgs(order, detail)
ce qui donne en couleur:

fpc-src                   community 3.0.4-1            Sources for the FreePascal compiler  252.14Mo
komodo-edit               -         11.1.0_18196-1     Free & Open-Source counterpart of A  267.46Mo
papirus-icon-theme-kde    -         20161113-1         Papirus icon theme for KDE           309.75Mo
linux-firmware            core      20180815.f1b95fe-1 Firmware files for Linux             311.05Mo
go                        extra     2:1.10.3-1         Core compiler tools for the Go prog  352.97Mo
libreoffice-fresh         extra     6.1.0-2            LibreOffice branch which contains n  394.22Mo
lazarus                   community 1.8.4-3            Delphi-like IDE for FreePascal comm  734.37Mo
1349 packages 12.06Go

[python] pamac

#2Messageil y a 5 ans

Et un petit deuxième ./pamacsearch , il fait quoi? il prend quoi comme paramètre ? :saispas:
ici il ne fait rien de plus que pamac bien au contraire

#!/usr/bin/python
# une recherche avec pamacsearch
import gi, sys
gi.require_version('Pamac', '1.0')
from gi.repository import Pamac     # import xml /usr/share/gir-1.0/Pamac-1.0.gir

class bcolors:
    BLUE = '\033[94m'
    GREEN = '\033[92m'
    RED = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    DISABLE = '\033[02m'

config = Pamac.Config(conf_path="/etc/pamac.conf")
db = Pamac.Database(config=config)  # view src/database.vala

pn = ""
if len(sys.argv) > 1:
    pn = sys.argv[1]
print(f"search \"{bcolors.GREEN}{pn}{bcolors.ENDC}\" (name and description) in Manjaro repos \n")

pkgs = db.search_pkgs(pn)
if len(pkgs) <1:
    print(f"Error: Package {bcolors.RED}\"{pn}\"{bcolors.ENDC} not found")
else:
    for pkg in pkgs:
        for attr in dir(pkg):
            if attr[0] == '_':
                continue
            if getattr(pkg,attr):
                if attr == 'origin' and getattr(pkg,attr) == 2:
                    print(
                        f"{bcolors.DISABLE}{attr}{bcolors.ENDC} : "
                        f"{bcolors.BLUE}Installed{bcolors.ENDC}"
                    )
                else:
                    print(
                        f"{bcolors.DISABLE}{attr}{bcolors.ENDC} : "
                        f"{bcolors.GREEN}{getattr(pkg,attr)}{bcolors.ENDC}"
                    )
        print("------")
Répondre