IT-Stock/scripts/seed.py
maxsoch 8bb5c9406a Initial scaffold: gestion de stock IT pour le département IT
App FastAPI + SQLite + SQLModel + Jinja2 pour gérer le stock de matériel
IT (catégories/sous-catégories/matériels), avec recherche par scan de
code-barres et alertes email de stock bas.
2026-07-14 18:38:59 +02:00

97 lines
3.1 KiB
Python

"""
Peuple la base locale (data/stock.db) avec des catégories/sous-catégories/
matériels de démonstration, incluant des codes-barres, pour pouvoir tester
l'écran de scan et le déclenchement des alertes email sans tout recréer à
la main à chaque fois.
Ne fait rien si la base contient déjà des matériels (pour ne pas dupliquer
les données à chaque exécution).
Usage : python scripts/seed.py
"""
import sys
from pathlib import Path
# Permet de lancer "python scripts/seed.py" directement : ajoute la racine
# du projet à sys.path pour que "import app" fonctionne quel que soit le
# répertoire courant d'où le script est appelé.
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from sqlmodel import Session, select # noqa: E402
from app.database import engine, init_db # noqa: E402
from app.models import Categorie, DestinataireAlerte, Materiel, SousCategorie # noqa: E402
# (categorie, sous_categorie, [(nom, code_barre, quantite, seuil_alerte), ...])
# Les quantités sont volontairement sous le seuil pour certains matériels,
# afin de pouvoir vérifier immédiatement que les alertes se déclenchent bien.
DONNEES_DEMO = [
(
"Ordinateurs",
"Portables",
[
("PC Dell XPS 13 (modèle 9310)", "1111111111111", 3, 5),
("PC Lenovo ThinkPad T14", "1111111111112", 8, 3),
],
),
(
"Réseau",
"Câbles",
[
("Câble RJ45 2m", "2222222222221", 42, 10),
("Câble RJ45 5m", "2222222222222", 15, 10),
],
),
(
"Périphériques",
"Souris/claviers",
[
("Souris USB filaire", "3333333333331", 2, 5),
("Clavier USB AZERTY", "3333333333332", 6, 3),
],
),
]
DESTINATAIRE_DEMO = "it-dept@clinique.local"
def peupler() -> None:
init_db()
with Session(engine) as session:
if session.exec(select(Materiel)).first():
print("La base contient déjà des matériels, rien à faire.")
return
for nom_categorie, nom_sous_categorie, materiels in DONNEES_DEMO:
categorie = Categorie(nom=nom_categorie)
session.add(categorie)
session.commit()
session.refresh(categorie)
sous_categorie = SousCategorie(
nom=nom_sous_categorie, categorie_id=categorie.id
)
session.add(sous_categorie)
session.commit()
session.refresh(sous_categorie)
for nom, code_barre, quantite, seuil_alerte in materiels:
session.add(
Materiel(
nom=nom,
code_barre=code_barre,
quantite=quantite,
seuil_alerte=seuil_alerte,
sous_categorie_id=sous_categorie.id,
)
)
session.add(DestinataireAlerte(email=DESTINATAIRE_DEMO))
session.commit()
print("Données de démo créées : 3 catégories, 6 matériels, 1 destinataire.")
if __name__ == "__main__":
peupler()