server.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from flask import Flask, request, jsonify
  2. from flask_cors import CORS
  3. import subprocess
  4. import json
  5. import re
  6. import os
  7. app = Flask(__name__)
  8. CORS(app)
  9. import sys # Ajoute cet import en haut de ton fichier
  10. @app.route("/run-extraction", methods=["POST"])
  11. def run_extraction():
  12. data = request.json
  13. inputs = data.get("inputs", {})
  14. script_dir = os.path.dirname(os.path.abspath(__file__))
  15. main_path = os.path.join(script_dir, "main.py")
  16. # 1. Mise à jour du fichier main.py
  17. try:
  18. with open(main_path, "r", encoding="utf-8") as f:
  19. content = f.read()
  20. # Nettoyage de l'ancien bloc INPUTS (ton regex/logique actuelle)
  21. start_idx = content.find("INPUTS = {")
  22. if start_idx != -1:
  23. brace_count = 0
  24. end_idx = start_idx
  25. for i, char in enumerate(content[start_idx:]):
  26. if char == "{": brace_count += 1
  27. elif char == "}":
  28. brace_count -= 1
  29. if brace_count == 0:
  30. end_idx = start_idx + i + 1
  31. break
  32. content = content[:start_idx] + content[end_idx:].lstrip()
  33. # Insertion des nouveaux inputs
  34. new_inputs_str = f"INPUTS = {json.dumps(inputs, indent=4, ensure_ascii=False)}\n\n"
  35. content = new_inputs_str + content
  36. with open(main_path, "w", encoding="utf-8") as f:
  37. f.write(content)
  38. f.flush() # Force l'écriture sur le disque
  39. os.fsync(f.fileno()) # Sécurité supplémentaire pour Linux/Mac
  40. except Exception as e:
  41. return jsonify({"stdout": "", "stderr": f"Erreur écriture : {str(e)}", "returncode": -1})
  42. # 2. Exécution du script
  43. try:
  44. # Utilisation de sys.executable pour éviter les erreurs de chemin Python
  45. result = subprocess.run(
  46. [sys.executable, main_path],
  47. capture_output=True,
  48. text=True,
  49. cwd=script_dir,
  50. timeout=60
  51. )
  52. return jsonify({
  53. "stdout": result.stdout,
  54. "stderr": result.stderr,
  55. "returncode": result.returncode
  56. })
  57. except subprocess.TimeoutExpired:
  58. return jsonify({"stdout": "", "stderr": "Timeout dépassé (60s)", "returncode": -1})
  59. except Exception as e:
  60. return jsonify({"stdout": "", "stderr": f"Erreur exécution : {str(e)}", "returncode": -1})