Remise en état Technique
This commit is contained in:
@@ -10,3 +10,5 @@ paramiko~=3.5.1
|
||||
python-dotenv
|
||||
bcrypt
|
||||
ovh
|
||||
fpdf==1.7.2
|
||||
altair
|
||||
|
||||
@@ -173,7 +173,7 @@ if not st.session_state.get("authenticated"):
|
||||
try:
|
||||
conn = mysql.connector.connect(**db_config)
|
||||
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()
|
||||
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'))
|
||||
@@ -181,7 +181,7 @@ if not st.session_state.get("authenticated"):
|
||||
if result["Expiration"] and result["Expiration"] < date.today():
|
||||
st.sidebar.error("⛔ Votre accès a expiré. Veuillez contacter un administrateur.")
|
||||
cursor.close()
|
||||
conn.close()
|
||||
conn.close()sondes
|
||||
st.stop()
|
||||
st.session_state["authenticated"] = True
|
||||
st.session_state["role"] = result["role"]
|
||||
|
||||
@@ -104,7 +104,7 @@ if sonde_selection:
|
||||
)
|
||||
|
||||
# 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
|
||||
cursor = None
|
||||
try:
|
||||
|
||||
101
utils/db.py
Normal file
101
utils/db.py
Normal 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 l’historique des températures d’une 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()
|
||||
Reference in New Issue
Block a user