- run_preprocess_chain: WF1 자동 확정 · 서피스 바꿈 체인이 부름 · 다른 지형 없음 · 실패 = 한 벌 + meta.json 까닭 · 예상노선(공유)은 설계 지형 벌이 씀 - 자동 체인 배수 refresh=True — 저장분이 노선 바뀐 줄 모르던 틈 막음 - purge_output_folders 가 design_sets 도 지움 - run_redesign_chain(앱에서 부르는 곳 0) 걷음 — 시험 정리: test_342_2 의 그 함수 시험 셋 지움(함수 없음) · test_763_3 · test_351_1 은 두 벌 체인으로 · test_74 · test_user_values_survive 의 이월 차례 검사는 살아 있는 자리(B05_Profile_Route_Save)로 옮김 - 시험 test_765_design_sets 에 체인 차례 · 한 벌 · 다른 벌 실패 · 비우기 넷 덧 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
2.6 KiB
Python
50 lines
2.6 KiB
Python
"""서피스가 바뀐 뒤 전처리 체인 다시(763-3 · 요구 605) — 업로드와 같은 길 하나.
|
|
|
|
부르는 곳 = B04 다른 서피스 [확정] · B05 LAS 나중 올리기 뒤 전처리 다시(765-5). B05~B09 초기화 =
|
|
같은 지형 재업로드 길(`purge_project_outputs(keep_preprocess=True)` · 설계 벌 묶음까지 · 단계 2 이후
|
|
처음 · 초기값 스냅샷 버림) → `run_preprocess_chain`(지형마다 한 벌 · 끝에 추천 미리 셈 ·
|
|
실패 길에도). 전처리 결과(B04) · 확정은 그대로.
|
|
"""
|
|
|
|
import asyncio
|
|
import logging
|
|
from pathlib import Path
|
|
from uuid import UUID
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
async def run_surface_change_chain(project_id: UUID, surface_model_id: int | None) -> None:
|
|
"""B05~B09 를 지우고 자동 설계 체인을 새 확정 서피스로 다시 탐 — 실패는 로그만."""
|
|
from B03_FileInput.B03_FileInput_Repository import get_project_storage_relative_path
|
|
from B03_FileInput.B03_FileInput_Service_Chain import run_preprocess_chain
|
|
from B05_Profile.B05_Profile_Router_RouteInitial import schedule_precompute
|
|
from common_util.common_util_initial_snapshot import discard_initial_snapshot
|
|
from common_util.common_util_project_reset import purge_project_outputs
|
|
from common_util.common_util_storage import resolve_stored_project_path
|
|
from common_util.common_util_workflow_state import reset_stages_after_input_change
|
|
from config.config_db import get_db_pool
|
|
|
|
try:
|
|
async with get_db_pool().acquire() as connection:
|
|
stored_path = await get_project_storage_relative_path(connection, project_id)
|
|
if not stored_path:
|
|
return
|
|
root = Path(resolve_stored_project_path(stored_path))
|
|
await asyncio.to_thread(discard_initial_snapshot, root)
|
|
await connection.begin()
|
|
try:
|
|
await purge_project_outputs(connection, str(project_id), root, keep_preprocess=True)
|
|
async with connection.cursor() as cursor:
|
|
await reset_stages_after_input_change(cursor, str(project_id), 2)
|
|
await connection.commit()
|
|
except Exception:
|
|
await connection.rollback()
|
|
raise
|
|
except Exception: # noqa: BLE001 — 체인은 응답 뒤 · 추천은 새 서피스로 셈
|
|
logger.exception("서피스 바꿈 체인 — B05~B09 초기화 실패: project_id=%s", project_id)
|
|
schedule_precompute(project_id)
|
|
return
|
|
logger.info("서피스 바꿈 체인 — B05~B09 초기화 뒤 자동 설계: project_id=%s", project_id)
|
|
await run_preprocess_chain(project_id, surface_model_id)
|