feat(b09-print): 인쇄 미리보기 틀 — draft 길 선언 glob 등록 · 페이지(영역 셋 · 쪽 체크 · PDF 보기 · 내려받기) · 서버 표 PDF(Playwright) · 엑셀(openpyxl) · B09 Router 초안 길 끼우기 (302-1)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QfHKQs7J3hQELKMWQMUJEy
This commit is contained in:
2026-10-13 07:52:49 +09:00
co-authored by Claude Opus 5.5
parent 5034fa4ea8
commit ed47306209
9 changed files with 1157 additions and 5 deletions
+18
View File
@@ -29,6 +29,8 @@
from __future__ import annotations
import asyncio
import importlib
import logging
from pathlib import Path
from typing import Any
from uuid import UUID
@@ -341,3 +343,19 @@ async def library_inputs(
# 166-4 견적서 파일 길 — 같은 머리 · 같은 권한
router.include_router(quotes_router)
# 302 초안 길(draft/*_Router.py 의 router · 폴더째 지우면 길도 없음) — 같은 머리 · 같은 권한
def include_drafts(target: APIRouter, folder: Path, package: str) -> list[str]:
"""folder 의 *_Router.py 마다 router 를 끼움 → 끼운 파일 이름(못 읽은 초안은 건너뜀)."""
done = []
for path in sorted(folder.glob("*_Router.py")):
try:
target.include_router(importlib.import_module(f"{package}.{path.stem}").router)
done.append(path.stem)
except (ImportError, AttributeError) as error: # 한 초안이 막혀도 B09 는 뜸
logging.getLogger(__name__).warning("초안 길 %s 못 읽음 — %s", path.name, error)
return done
include_drafts(router, Path(__file__).parent / "draft", "B09_Estimation.draft")