libs.zazac.link
Libs/simplesuit

simplesuit v0.2.1

Des petites libs pour le terminal, réunies dans un seul paquet

installer
python3 -m pip install --user simplesuit
Télécharger .tar.gz

import simplesuit · PyPI : simplesuit · Python 3.9+ · dépend de psutil

Présentation

Des petites libs pour le terminal, réunies dans un seul paquet. Des couleurs, des icônes, un fichier JSON qui se souvient, les infos de ta machine, et une saisie de mot de passe avec des *. Chaque sous-module se charge seulement quand on l'importe.

En bref#

ModulePour…En une ligne
colorscolorer le texte du terminal (246 couleurs, dégradés, gras…)print(sc.tomato("Salut"))
iconsafficher des icônes Nerd Font (109 icônes)print(si.python, "main.py")
jsongarder des données entre deux lancementssj.put("score", 42)
syslire batterie, CPU, RAM, disque, réseau, son… et demander un mot de passess.battery()

Installer#

terminal
python3 -m pip install --user simplesuit

Puis importe seulement ce dont tu as besoin, avec un petit surnom (c'est la convention de toute la doc) :

python
from simplesuit import colors as sc   # Couleurs RGB 24 bits, dégradés, styles
from simplesuit import icons as si    # Icônes Nerd Fonts
from simplesuit import json as sj     # Un fichier JSON comme un petit dictionnaire qui reste
from simplesuit import sys as ss      # Infos système, et saisie de mot de passe

N'écris pas import json tout court pour simplesuit

simplesuit.json et simplesuit.sys portent le même nom que des modules de Python. Écris toujours from simplesuit import json as sj : ton import json et ton import sys habituels restent intacts.

Un tour rapide#

demo.py
from simplesuit import colors as sc, icons as si, json as sj, sys as ss

print(sc.gradient("simplesuit", "cyan", "magenta", styles="bold"))   # Un titre en dégradé

lancements = sj.get("lancements", 0) + 1                             # Retenu dans data.json
sj.put("lancements", lancements)
print(si.rocket, f"Lancement n°{lancements}")

print(si.battery(ss.battery() or 0, plugged=bool(ss.plugged())), f"{ss.battery()} %")
print(si.cpu, "CPU", sc.mint(f"{ss.cpu()} %"), "·", si.memory, "RAM", sc.peach(ss.ram_used()))
résultat
simplesuit
 Lancement n°3
 66 %
 CPU 12.4 % ·  RAM 6.6 Go

Les icônes s'affichent comme des carrés ?

Il te faut une Nerd Font dans ton terminal. Tout est expliqué dans le guide des icônes.

Ce que les quatre ont en commun#

  • Des erreurs qui aident : une faute de frappe dans un nom de couleur ou d'icône propose le bon nom.
python
sc.to_rgb("tomatto")   # ValueError: simplesuit.colors : unknown color: tomatto (did you mean: tomato ?)
si.icon("pythn")       # ValueError: simplesuit.icons : unknown icon: pythn (did you mean: python ?)
  • Des raccourcis : le nom d'une couleur ou d'une icône devient directement une fonction ou une valeur (sc.red("…"), si.apple).
  • Aucune configuration : tout marche dès l'import, avec des valeurs par défaut raisonnables.

Astuces#

Voir tout ce qui existe

sc.show_palette() affiche les 246 couleurs avec leur nom, si.show_icons() les 109 icônes. Sur ce site, les pages colors et icons les montrent aussi : un clic copie le nom.

Mesurer un texte coloré

Les couleurs ajoutent des caractères invisibles : len(sc.red("abc")) ne vaut pas 3. Pour aligner des colonnes, mesure len(sc.strip(texte)).

Ça marche sous Windows et Linux ?

Oui pour colors, icons, json et presque tout sys. Le volume du son et le nom du wifi lisent des réglages de macOS : ailleurs, ces fonctions renvoient None. Sous Windows, utilise Windows Terminal pour les couleurs.

Exemples

Couleurs et styles

Colorer un texte par nom, HEX ou RGB, avec un fond et des styles (gras, italique…).

couleurs_et_styles.py
from simplesuit import colors as sc

print(sc.color("Par nom", "tomato"))
print(sc.color("En HEX", "#1E90FF"))
print(sc.color("En RGB", (120, 200, 80)))
print(sc.color(" Avec un fond ", "white", bg="crimson", styles="bold"))
print(sc.color("Plusieurs styles", "gold", styles=["bold", "underline"]))

# Raccourci : le nom de la couleur devient une fonction
print(sc.mint("succès"), sc.error("erreur"), sc.mochamauve("Catppuccin"))
print(sc.bold("gras"), sc.italic("italique"), sc.underline("souligné"))

Dégradés

Un dégradé lettre par lettre, avec autant de couleurs que tu veux.

degrades.py
from simplesuit import colors as sc

print(sc.gradient("Bienvenue dans orsh", "cyan", "magenta"))
print(sc.gradient("Coucher de soleil", "gold", "orange", "crimson", styles="bold"))
print(sc.gradient("━" * 40, "mochablue", "mochamauve", "mochapink"))

# strip() enlève les couleurs : pratique pour mesurer la vraie longueur
titre = sc.gradient("Titre", "lime", "teal")
print(len(titre), "caractères avec les codes,", len(sc.strip(titre)), "sans")

Trouver une couleur

Voir une couleur en détail, convertir en RGB, et se faire proposer un nom quand on se trompe.

trouver_une_couleur.py
from simplesuit import colors as sc

sc.show_color("coral")          # Aperçu + nom, HEX et RGB
print(sc.to_rgb("#F80"))        # (255, 136, 0)
print(sc.to_rgb("rgb(1, 2, 3)"))  # (1, 2, 3)

try:
    sc.color("texte", "tomatto")
except ValueError as e:
    print(e)  # simplesuit.colors : unknown color: tomatto (did you mean: tomato ?)

# sc.show_palette() affiche les 246 couleurs disponibles

Les icônes

Des icônes Nerd Font par leur nom, avec une couleur si tu veux. ⚠️ Il faut une Nerd Font dans le terminal (sinon : des carrés vides).

icones.py
from simplesuit import icons as si

print(si.icon("python", "yellow"), "Python")
print(si.icon("apple"), si.icon("linux"), si.icon("windows"))
print(si.icon("heart", "crimson", styles="bold"), "avec un style")
print(si.github, "raccourci : si.github au lieu de si.icon('github')")

print(si.search("arrow"))  # ['arrow_right', 'arrow_left', 'arrow_up', 'arrow_down']

Batterie et fichiers

La bonne icône selon le niveau de batterie, ou selon le type de fichier.

batterie_et_fichiers.py
from simplesuit import icons as si

for niveau in (95, 70, 40, 15, 5):
    print(si.battery(niveau), f"{niveau} %")
print(si.battery(50, plugged=True), "en charge")

for fichier in ("main.py", "photo.png", "notes.md", "archive.zip", "."):
    print(si.file_icon(fichier), fichier)

Animation de chargement

spinner(i) donne l'image n°i d'un cercle qui tourne : à afficher en boucle.

spinner.py
import time

from simplesuit import icons as si

for i in range(30):
    print(f"\r{si.spinner(i)} Chargement…", end="", flush=True)
    time.sleep(0.08)
print(f"\r{si.icon('check', 'lime')} Terminé !   ")

Sauvegarder des réglages

Un fichier JSON utilisé comme un petit dictionnaire qui reste après la fermeture du programme. Le fichier (data.json par défaut) est créé à côté du script lancé.

reglages.py
from simplesuit import json as sj

sj.put("theme", "sombre")
sj.put("volume", 70)
sj.put("favoris", ["capy", "simplesuit"])

print(sj.get("theme"))                  # sombre
print(sj.get("langue", default="fr"))   # fr (la clé n'existe pas encore)
print(sj.has("volume"))                 # True
print(sj.load())                        # tout le fichier, en dict

sj.delete("volume")
print(sj.get_file())                    # chemin du fichier utilisé

Compter les lancements

Le nombre augmente à chaque fois que tu relances le script.

compteur.py
from simplesuit import json as sj

lancements = sj.get("lancements", 0) + 1
sj.put("lancements", lancements)

print(f"Ce script a été lancé {lancements} fois")

Plusieurs fichiers

set() choisit le fichier pour toutes les fonctions ; file= pour un seul appel.

plusieurs_fichiers.py
from simplesuit import json as sj

sj.set("scores.json")
sj.put("alice", 120)
sj.put("bob", 95)

sj.put("derniere_partie", "2026-10-18", file="historique.json")

meilleur = max(sj.load(), key=sj.load().get)
print("Meilleur score :", meilleur)                     # alice
print(sj.get("derniere_partie", file="historique.json"))

sj.clear()  # Vide scores.json

Résumé du système

Toutes les infos en une ligne de code.

resume.py
from simplesuit import sys as ss

for nom, valeur in ss.summary().items():
    print(f"{nom:>10} : {valeur}")

Jauge de batterie en couleur

sys donne les chiffres, colors et icons les mettent en forme.

jauge_batterie.py
from simplesuit import colors as sc
from simplesuit import icons as si
from simplesuit import sys as ss

niveau = ss.battery()
if niveau is None:
    print("Pas de batterie sur cet ordinateur")
else:
    couleur = "lime" if niveau > 50 else "orange" if niveau > 20 else "red"
    barre = "█" * (niveau // 5) + "░" * (20 - niveau // 5)
    reste = ss.time_left_text() or "-"
    print(si.battery(niveau, ss.plugged()), sc.color(barre, couleur), f"{niveau} %  (reste {reste})")

Réseau et machine

Connexion, adresses IP, mémoire, disque et temps depuis le démarrage.

reseau_et_machine.py
from simplesuit import sys as ss

print("Connecté à internet :", ss.online())
print("IP locale :", ss.local_ip())
print("IP publique :", ss.public_ip())          # Demande internet (≈ 1 s)
print("Données reçues :", ss.net_received())

print(f"Processeur : {ss.cpu()} % ({ss.cpu_cores()} cœurs, {ss.cpu_type()})")
print(f"Mémoire : {ss.ram_used()} / {ss.ram_total()}")
print(f"Disque : {ss.disk_free()} libres sur {ss.disk_total()}")
print("Allumé depuis :", ss.uptime_text())

Une liste qui grandit, et un bel affichage

append() ajoute à la liste d'une clé (et la crée si elle n'existe pas encore). show() affiche le fichier avec des couleurs et des retours à la ligne.

liste_et_affichage.py
from simplesuit import json as sj

sj.set("users.json")

sj.append("users", {"name": "Zoe", "age": 14, "id": 30})
sj.append("users", {"name": "Izac", "age": 15, "id": 31})

sj.show()                    # Tout le fichier, en couleurs
sj.show({"ok": True})        # Marche aussi avec un dict
texte = sj.pretty(sj.load()) # Le même texte coloré, sans l'afficher

Demander un mot de passe avec des *

password() affiche une * par lettre tapée. Retour arrière efface, Ctrl+U efface tout, Ctrl+C ou Ctrl+D annulent (KeyboardInterrupt / EOFError).

mot_de_passe.py
from simplesuit import colors as sc
from simplesuit import sys as ss

try:
    mdp = ss.password("password > ")
    confirmation = ss.password("encore une fois > ", mask="•")
except (KeyboardInterrupt, EOFError):
    exit("\nannulé")

if mdp != confirmation:
    exit(sc.red("Les deux mots de passe sont différents"))
print(sc.green(f"OK, {len(mdp)} caractères"))  # On n'affiche jamais le mot de passe lui-même

Une bannière de démarrage

Un dégradé sur des lignes de ═ autour d'un titre : 3 lignes pour un démarrage qui a de la gueule.

banniere.py
from simplesuit import colors as sc
from simplesuit import icons as si

LARGEUR = 40
titre = f" {si.rocket}  mon super programme  {si.rocket} "

print(sc.gradient("═" * LARGEUR, "cyan", "magenta"))
print(sc.gradient(titre.center(LARGEUR), "cyan", "magenta", styles="bold"))
print(sc.gradient("═" * LARGEUR, "magenta", "cyan"))
print(sc.color("v1.0 · tape help pour l'aide".center(LARGEUR), "gray", styles="italic"))

Mini tableau de bord

Toutes les secondes : on efface l'écran, puis on affiche les infos avec des icônes et des couleurs. Ctrl+C pour quitter.

tableau_de_bord.py
import time

from simplesuit import colors as sc
from simplesuit import icons as si
from simplesuit import sys as ss


# Une barre de progression colorée selon le niveau (vert, orange, rouge)
def barre(pourcentage, largeur=20):
    plein = round(pourcentage / 100 * largeur)
    couleur = "mint" if pourcentage < 60 else "orange" if pourcentage < 85 else "tomato"
    return sc.color("█" * plein, couleur) + sc.color("░" * (largeur - plein), "dimgray")


try:
    while True:
        cpu, ram, disque = ss.cpu(), ss.ram(), ss.disk()  # cpu() attend 0,3 s : c'est notre pause
        print("\033[2J\033[H", end="")                   # Effacer l'écran, curseur en haut
        print(sc.gradient(f" {ss.hostname()} ", "cyan", "magenta", styles="bold"), "\n")
        print(f"{si.cpu}  CPU    {barre(cpu)} {cpu:5.1f} %")
        print(f"{si.memory}  RAM    {barre(ram)} {ram:5.1f} %  {ss.ram_used()}")
        print(f"{si.disk}  Disque {barre(disque)} {disque:5.1f} %  {ss.disk_free()} libres")
        if ss.battery() is not None:
            print(f"{si.battery(ss.battery(), bool(ss.plugged()))}  Batterie {ss.battery()} %")
        print(sc.color(f"\nAllumé depuis {ss.uptime_text()} · Ctrl+C pour quitter", "gray"))
        time.sleep(0.7)
except KeyboardInterrupt:
    print()

Son propre ls, avec des icônes

file_icon() choisit l'icône selon le type : dossier, .py, .json, .md, image, musique… Les dossiers en bleu et en premier, les tailles alignées à droite.

mon_ls.py
import os

from simplesuit import colors as sc
from simplesuit import icons as si
from simplesuit import sys as ss

noms = sorted(os.listdir("."), key=lambda n: (not os.path.isdir(n), n.lower()))

for nom in noms:
    if nom.startswith("."):
        continue
    if os.path.isdir(nom):
        print(sc.color(f"{si.file_icon(nom)}  {nom}/", "cornflowerblue", styles="bold"))
    else:
        taille = ss.human_size(os.path.getsize(nom))
        print(f"{si.file_icon(nom)}  {nom:<30} {sc.color(f'{taille:>9}', 'gray')}")