MIRA_LANG — api_server.py

Bienvenue sur CFTPfr.fr Forums modules MIRA_LANG — api_server.py

  • Ce sujet est vide.
Affichage de 1 message (sur 1 au total)
  • Auteur
    Messages
  • #217
    Mario Da Conceicao
    Maître des clés

    Sauvegarde de travail — version du 25/07/2026. Serveur Flask local (127.0.0.1:5000) qui exécute le langage maison MIRA_LANG. Nouveau composant découvert lors de l’audit, absent du README d’origine.

    from flask import Flask, request, jsonify
    import subprocess
    from pathlib import Path
    import importlib.util
    import sys
    
    app = Flask(__name__)
    
    MIRA_LANG_PATH = Path(r"D:\MIRA_Project\mira_lang\main.py")
    PYTHONW = Path(r"D:\MIRA_Project\WPy64-313130\python\pythonw.exe")
    PLUGINS_DIR = Path(r"D:\MIRA_Project\mira_lang\plugins")
    
    import logging
    logging.basicConfig(filename='api_server.log', level=logging.ERROR)
    
    @app.route('/execute', methods=['POST'])
    def execute_code():
        try:
            code = request.json.get('code', '')
            if not code:
                return jsonify({"error": "Aucun code fourni"}), 400
            result = subprocess.run(
                [str(PYTHONW), str(MIRA_LANG_PATH)],
                input=code,
                capture_output=True,
                text=True,
                cwd=str(MIRA_LANG_PATH.parent)
            )
            if result.returncode != 0:
                return jsonify({"error": result.stderr}), 400
            return jsonify({"output": result.stdout})
        except Exception as e:
            logging.error(f"Erreur dans /execute: {e}")
            return jsonify({"error": str(e)}), 500
    
    @app.route('/plugins', methods=['GET'])
    def list_plugins():
        try:
            plugins = []
            if PLUGINS_DIR.exists():
                for file in PLUGINS_DIR.glob("*.py"):
                    if not file.name.startswith("_"):
                        plugins.append(file.stem)
            return jsonify({"plugins": plugins})
        except Exception as e:
            logging.error(f"Erreur dans /plugins: {e}")
            return jsonify({"error": str(e)}), 500
    
    @app.route('/plugins/<plugin_name>', methods=['POST'])
    def call_plugin(plugin_name):
        try:
            args = request.json.get('args', [])
            plugin_file = PLUGINS_DIR / f"{plugin_name}.py"
            if not plugin_file.exists():
                return jsonify({"error": f"Plugin {plugin_name} introuvable"}), 404
            spec = importlib.util.spec_from_file_location(plugin_name, plugin_file)
            module = importlib.util.module_from_spec(spec)
            spec.loader.exec_module(module)
            if hasattr(module, "executer"):
                result = module.executer(*args)
                return jsonify({"result": result})
            else:
                return jsonify({"error": f"Plugin {plugin_name} n'a pas de fonction executer"}), 400
        except Exception as e:
            logging.error(f"Erreur dans /plugins/{plugin_name}: {e}")
            return jsonify({"error": str(e)}), 500
    
    if __name__ == '__main__':
        try:
            app.run(host='127.0.0.1', port=5000, debug=False)
        except Exception as e:
            logging.error(f"Erreur de démarrage du serveur: {e}")
Affichage de 1 message (sur 1 au total)
  • Vous devez être connecté pour répondre à ce sujet.
Retour en haut