from flask import Flask, request, jsonify from flask_cors import CORS import subprocess import json import re import os app = Flask(__name__) CORS(app) import sys # Ajoute cet import en haut de ton fichier @app.route("/run-extraction", methods=["POST"]) def run_extraction(): data = request.json inputs = data.get("inputs", {}) script_dir = os.path.dirname(os.path.abspath(__file__)) main_path = os.path.join(script_dir, "main.py") # 1. Mise à jour du fichier main.py try: with open(main_path, "r", encoding="utf-8") as f: content = f.read() # Nettoyage de l'ancien bloc INPUTS (ton regex/logique actuelle) start_idx = content.find("INPUTS = {") if start_idx != -1: brace_count = 0 end_idx = start_idx for i, char in enumerate(content[start_idx:]): if char == "{": brace_count += 1 elif char == "}": brace_count -= 1 if brace_count == 0: end_idx = start_idx + i + 1 break content = content[:start_idx] + content[end_idx:].lstrip() # Insertion des nouveaux inputs new_inputs_str = f"INPUTS = {json.dumps(inputs, indent=4, ensure_ascii=False)}\n\n" content = new_inputs_str + content with open(main_path, "w", encoding="utf-8") as f: f.write(content) f.flush() # Force l'écriture sur le disque os.fsync(f.fileno()) # Sécurité supplémentaire pour Linux/Mac except Exception as e: return jsonify({"stdout": "", "stderr": f"Erreur écriture : {str(e)}", "returncode": -1}) # 2. Exécution du script try: # Utilisation de sys.executable pour éviter les erreurs de chemin Python result = subprocess.run( [sys.executable, main_path], capture_output=True, text=True, cwd=script_dir, timeout=60 ) return jsonify({ "stdout": result.stdout, "stderr": result.stderr, "returncode": result.returncode }) except subprocess.TimeoutExpired: return jsonify({"stdout": "", "stderr": "Timeout dépassé (60s)", "returncode": -1}) except Exception as e: return jsonify({"stdout": "", "stderr": f"Erreur exécution : {str(e)}", "returncode": -1})