Files
drhider/site/routes/process_bp.py
T

48 lines
2.0 KiB
Python

"""
POST /api/process/{sid} — обработать ВСЕ файлы сессии по одному.
Блокирует до завершения. Результат сохраняется в сессии.
"""
import io, zipfile, traceback
from flask import Blueprint, jsonify
from drhider import obfuscate_files, LLMClient
from drhider.builder import build_zip, build_mapping_csv
from session import get_files, store_result
process_bp = Blueprint("process", __name__, url_prefix="/api")
@process_bp.route("/process/<sid>", methods=["POST"])
def process(sid):
files = get_files(sid)
if files is None:
return jsonify({"ok": False, "error": "Session not found"}), 404
if not files:
return jsonify({"ok": False, "error": "No files"}), 400
try:
llm = LLMClient()
all_results = []
all_mapping = {}
for fname, content in files:
zip_data, _csv = obfuscate_files([(fname, content, "")], llm_client=llm)
with zipfile.ZipFile(io.BytesIO(zip_data)) as zf:
for name in zf.namelist():
if name == "mapping.csv":
csv_text = zf.read(name).decode("utf-8")
lines = csv_text.strip().split("\n")
if len(lines) > 1:
for line in lines[1:]:
parts = line.split(",", 2)
if len(parts) >= 3:
all_mapping[parts[1]] = parts[2]
elif not name.endswith("/"):
all_results.append((name, zf.read(name)))
csv_str = build_mapping_csv(all_mapping) if all_mapping else ""
final_zip = build_zip(all_results, mapping_csv=csv_str)
store_result(sid, final_zip)
return jsonify({"ok": True, "status": "done", "files": len(all_results)})
except Exception as e:
traceback.print_exc()
return jsonify({"ok": False, "error": str(e)}), 500