fix: SSE — отлов GeneratorExit при отключении клиента
Deploy drhider / validate (push) Waiting to run
Deploy drhider / validate (push) Waiting to run
- api_bp.py: try/except GeneratorExit после каждого yield в generate() - при F5 во время обработки поток освобождается, остальные файлы не обрабатываются - bump: 0.0.17 → 0.0.18
This commit is contained in:
+1
-1
@@ -20,7 +20,7 @@ if _sys_path_root not in sys.path:
|
||||
sys.path.insert(0, _sys_path_root)
|
||||
|
||||
# Версия приложения (меняется при изменениях)
|
||||
VERSION = "0.0.17"
|
||||
VERSION = "0.0.18"
|
||||
|
||||
|
||||
def create_app():
|
||||
|
||||
+10
-3
@@ -59,7 +59,11 @@ def process_stream(sid):
|
||||
all_mapping = {}
|
||||
for idx, (fname, content) in enumerate(files):
|
||||
# Отправляем: начали файл
|
||||
yield f"event: start\ndata: {json.dumps({'idx': idx, 'name': fname, 'total': total})}\n\n"
|
||||
try:
|
||||
yield f"event: start\ndata: {json.dumps({'idx': idx, 'name': fname, 'total': total})}\n\n"
|
||||
except GeneratorExit:
|
||||
return # клиент отключился
|
||||
|
||||
zip_data, _csv = obfuscate_files([(fname, content, "")], llm_client=llm)
|
||||
with zipfile.ZipFile(io.BytesIO(zip_data)) as zf:
|
||||
for name in zf.namelist():
|
||||
@@ -73,8 +77,11 @@ def process_stream(sid):
|
||||
all_mapping[parts[1]] = parts[2]
|
||||
elif not name.endswith("/"):
|
||||
all_results.append((name, zf.read(name)))
|
||||
# Отправляем: закончили файл
|
||||
yield f"event: done\ndata: {json.dumps({'idx': idx, 'name': fname, 'total': total})}\n\n"
|
||||
# Отправляем: закончили файл (если клиент ушёл — освобождаем поток)
|
||||
try:
|
||||
yield f"event: done\ndata: {json.dumps({'idx': idx, 'name': fname, 'total': total})}\n\n"
|
||||
except GeneratorExit:
|
||||
return # клиент отключился, НЕ обрабатываем остальные файлы
|
||||
|
||||
csv_str = build_mapping_csv(all_mapping) if all_mapping else ""
|
||||
final_zip = build_zip(all_results)
|
||||
|
||||
Reference in New Issue
Block a user