from mysql.connector import Error from engine.db import get_connection from engine.engine_components.active_courses import get_active_con_ids from engine.engine_components.process_course import process_course from engine.logger import log_info, log_debug, log_warn, log_error def run_once(): try: cnx = get_connection() cur = cnx.cursor(dictionary=True) con_ids = get_active_con_ids(cur) if not con_ids: log_info("[INFO] Aucune course active.") return # ------------------------------------------------- # Appliquer les PAUSE_REQUEST avant tout traitement # ------------------------------------------------- active_courses = get_active_con_ids(cur) for con_id in active_courses: engine_table = f"resultv2_{con_id}_lecture" # Lire le statut actuel cur.execute(f"SELECT process_status FROM `{engine_table}` LIMIT 1") row = cur.fetchone() if not row: continue status = (row["process_status"] or "").upper() # Si CI4 a demandé une pause → Python applique la pause maintenant if status == "PAUSE_REQUEST": cur.execute(f"UPDATE `{engine_table}` SET process_status = 'PAUSE'") cnx.commit() log_info(f"[PAUSE APPLIED] con_id={con_id}") for con_id in con_ids: process_course(cur, cnx, con_id) except Error as e: log_error(f"[ERREUR MYSQL] {e}") finally: try: cur.close() cnx.close() except: pass if __name__ == "__main__": import time import msvcrt # Spécifique Windows log_info("[TEST MODE] Boucle continue — appuyer ENTER pour arrêter.") try: while True: run_once() time.sleep(0.5) if msvcrt.kbhit(): # Une touche a été pressée key = msvcrt.getch() if key == b'\r': # ENTER = arrêt log_info("[TEST MODE] Arrêt demandé via ENTER.") break except KeyboardInterrupt: log_info("[TEST MODE] Arrêt via CTRL+C.")