Remise en état Technique

This commit is contained in:
2025-07-26 10:04:07 +02:00
parent 9f5c5e35a5
commit 970fcc542a
4 changed files with 106 additions and 3 deletions

View File

@@ -10,3 +10,5 @@ paramiko~=3.5.1
python-dotenv python-dotenv
bcrypt bcrypt
ovh ovh
fpdf==1.7.2
altair

View File

@@ -173,7 +173,7 @@ if not st.session_state.get("authenticated"):
try: try:
conn = mysql.connector.connect(**db_config) conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True) cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM MotsDePasse WHERE utilisateur = %s", (login,)) cursor.execute("SELECT * FROM Sondes.MotsDePasse WHERE utilisateur = %s", (login,))
result = cursor.fetchone() result = cursor.fetchone()
def verifier_password(mot_de_passe_saisi, hash_en_base): def verifier_password(mot_de_passe_saisi, hash_en_base):
return bcrypt.checkpw(mot_de_passe_saisi.encode('utf-8'), hash_en_base.encode('utf-8')) return bcrypt.checkpw(mot_de_passe_saisi.encode('utf-8'), hash_en_base.encode('utf-8'))
@@ -181,7 +181,7 @@ if not st.session_state.get("authenticated"):
if result["Expiration"] and result["Expiration"] < date.today(): if result["Expiration"] and result["Expiration"] < date.today():
st.sidebar.error("⛔ Votre accès a expiré. Veuillez contacter un administrateur.") st.sidebar.error("⛔ Votre accès a expiré. Veuillez contacter un administrateur.")
cursor.close() cursor.close()
conn.close() conn.close()sondes
st.stop() st.stop()
st.session_state["authenticated"] = True st.session_state["authenticated"] = True
st.session_state["role"] = result["role"] st.session_state["role"] = result["role"]

View File

@@ -104,7 +104,7 @@ if sonde_selection:
) )
# Insérer une alerte dans Mysql en cas de sonde défectueuse # Insérer une alerte dans Mysql en cas de sonde défectueuse
def inserer_alerte_defaut_sonde(sonde, date_defaut): def inserer_alerte_defaut_sonde(sonde):
conn = None conn = None
cursor = None cursor = None
try: try:

101
utils/db.py Normal file
View File

@@ -0,0 +1,101 @@
# utils/db.py
import mysql.connector
import os
import sys
import logging
from datetime import datetime
def connect_to_mysql(db_name: str = None):
"""Connexion à MySQL via variables d'environnement."""
try:
mydb = mysql.connector.connect(
host=os.getenv("DB_HOST"),
user=os.getenv("DB_USER"),
password=os.getenv("DB_PASSWORD"),
database=db_name if db_name else os.getenv("DB_NAME")
)
return mydb
except mysql.connector.Error as err:
logging.error(f"Erreur de connexion MySQL : {err}")
sys.exit(1)
def get_latest_chaufferie():
"""Renvoie les dernières valeurs par sonde dans la table 'Chaufferie'."""
db = connect_to_mysql()
cursor = db.cursor(dictionary=True)
query = """
SELECT c1.*
FROM Chaufferie c1
INNER JOIN (
SELECT Sonde, MAX(Date) AS MaxDate
FROM Chaufferie
GROUP BY Sonde
) c2 ON c1.Sonde = c2.Sonde AND c1.Date = c2.MaxDate
ORDER BY c1.Sonde;
"""
cursor.execute(query)
result = cursor.fetchall()
cursor.close()
db.close()
return result
def get_history_by_sonde(sonde: str, start: datetime, end: datetime):
"""Retourne lhistorique des températures dune sonde entre deux dates."""
db = connect_to_mysql()
cursor = db.cursor(dictionary=True)
query = """
SELECT * FROM Chaufferie
WHERE Sonde = %s AND Date BETWEEN %s AND %s
ORDER BY Date;
"""
cursor.execute(query, (sonde, start, end))
result = cursor.fetchall()
cursor.close()
db.close()
return result
def verifier_utilisateur_commun(utilisateur: str, motdepasse: str):
"""Vérifie si un utilisateur (non superviseur) existe dans la table MotsDePasse."""
db = connect_to_mysql()
cursor = db.cursor(dictionary=True)
query = """
SELECT * FROM MotsDePasse
WHERE utilisateur = %s AND motdepasse = %s AND role = 'utilisateur'
"""
cursor.execute(query, (utilisateur, motdepasse))
result = cursor.fetchone()
cursor.close()
db.close()
return result
def lire_alertes_sondes():
"""Renvoie la liste des alertes non acquittées dans la table Alertes_Chaufferie."""
db = connect_to_mysql()
cursor = db.cursor(dictionary=True)
query = """
SELECT * FROM Alertes_Chaufferie
WHERE Etat != 'Acquitté'
ORDER BY Debut_defaut DESC
"""
cursor.execute(query)
result = cursor.fetchall()
cursor.close()
db.close()
return result
def acquitter_alerte(id_alerte: int):
"""Met à jour une alerte comme acquittée dans la base."""
db = connect_to_mysql()
cursor = db.cursor()
query = "UPDATE Alertes_Chaufferie SET Etat = 'Acquitté' WHERE Id = %s"
cursor.execute(query, (id_alerte,))
db.commit()
cursor.close()
db.close()