atypique-api / sandbox /secure_executor.py
RDS777's picture
Backend v3.0 complet
8e3a425
Raw
History Blame Contribute Delete
1.4 kB
# sandbox/secure_executor.py
"""
Exécution de code Python sécurisée (sandbox basique via subprocess).
Remplace l'ancienne dépendance inexistante `ultra_sandbox`.
"""
import subprocess
import sys
import tempfile
from pathlib import Path
def execute_safe(code: str, timeout: int = 10, budget_remaining=None) -> dict:
"""
Exécute du code Python dans un sous-processus isolé avec timeout.
Retourne {'success': bool, 'result': str, 'error': str|None}.
"""
with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False) as f:
f.write(code)
tmp_path = Path(f.name)
try:
proc = subprocess.run(
[sys.executable, str(tmp_path)],
capture_output=True,
text=True,
timeout=timeout
)
if proc.returncode == 0:
return {"success": True, "result": proc.stdout[:2000], "error": None}
return {
"success": False,
"result": "",
"error": proc.stderr[:500] or f"Code retour {proc.returncode}"
}
except subprocess.TimeoutExpired:
return {"success": False, "result": "", "error": "Timeout"}
except Exception as e:
return {"success": False, "result": "", "error": str(e)}
finally:
tmp_path.unlink(missing_ok=True)
def sandbox_info() -> dict:
return {"level": "basic", "backend": "subprocess"}