From 23fea9846b77afb08260bcd1e8cf4a564aecf5d9 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 2 Sep 2026 08:11:56 +0900 Subject: [PATCH] =?UTF-8?q?fix(B07):=20=ED=91=9C=EC=A7=80=EB=8F=84=20?= =?UTF-8?q?=ED=91=9C=EC=A0=9C=EB=9E=80=20=EA=B0=92=EC=9D=84=20=EB=B0=9B?= =?UTF-8?q?=EA=B2=8C=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 교차검증에서 표지만 빈칸으로 나갔음 — 문맥값을 합치는 자리가 `frame_entities` 안에 있어, 도각을 두르지 않는 표지 경로(`build_cover_drawing`)가 비껴갔음. - 합치는 자리를 치환 함수 `_fill_placeholders` 한 곳으로 옮김. 도각을 쓰든 안 쓰든 `{{키}}` 를 치환하는 모든 경로가 같은 값을 받음 — 앞으로 생길 경로도 자동으로 닿음. - 표지 docstring 의 "값 공급은 다음 판 몫" 문구 정정. 검증: `tmp/tests/test_b07_title_block_fields.py` 에 표지 케이스 추가(공사명·위치가 표지에 실리고 `{{` 잔존 0). `pytest tmp/tests/ -q` 132 passed / 0 failed. Co-Authored-By: Claude Opus 5 (1M context) --- B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py | 4 ++-- B07_DesignDetail/B07_DesignDetail_Engine_Template.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py index 3c54ffb6..1e7adad4 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py @@ -42,8 +42,8 @@ NOTE_LAYER_ID = "b08-cover-note" def build_cover_drawing(drawing_id: str, fields: dict[str, str] | None = None) -> dict[str, Any]: """표지 도면 문서. 템플릿이 없으면 빈 도면을 낸다. - `fields` 의 `{{키}}` 는 도각과 같은 규약으로 치환하고, 값이 없으면 빈칸으로 둔다 - (남의 값이 남지 않는다). 값 공급은 다음 판(메타 배선) 몫이다. + `{{키}}` 는 도각과 같은 규약으로 치환한다 — 값은 요청 문맥(`use_title_fields`)에서 + 오고, `fields` 로 준 것이 그 위에 얹힌다. 값이 없으면 빈칸(남의 값이 남지 않는다). """ template = _load_template(COVER_TEMPLATE) or {} entities: list[dict[str, Any]] = [] diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Template.py b/B07_DesignDetail/B07_DesignDetail_Engine_Template.py index b170ca98..df74288b 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Template.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Template.py @@ -264,7 +264,13 @@ _PLACEHOLDER = re.compile(r"\{\{\s*([^}]+?)\s*\}\}") def _fill_placeholders(entities: list[dict[str, Any]], fields: dict[str, str]) -> None: - """도각 텍스트의 {{키}}를 값으로 바꾼다. 값이 없으면 빈칸 — 남의 값이 남지 않는다.""" + """도각 텍스트의 {{키}}를 값으로 바꾼다. 값이 없으면 빈칸 — 남의 값이 남지 않는다. + + 요청 문맥의 표제란 값(`use_title_fields`)이 바탕이고, 인자로 준 값(도면마다 다른 + 도면명 등)이 위에 얹힌다. 합치는 자리를 **치환 함수 한 곳**에 둬야 도각을 두르지 + 않는 표지처럼 다른 경로로 들어온 도면도 같은 값을 받는다(2026-09-02 표지 누락). + """ + fields = {**_title_fields.get(), **(fields or {})} for entity in entities: if entity.get("type") != "Text": continue @@ -317,6 +323,5 @@ def frame_entities( _transform_entity(entity, f"{drawing_id}:frame:{index}", scale, dx, dy) for index, entity in enumerate(template.get("entities", [])) ] - # 요청 문맥의 값이 바탕, 호출부가 준 값(도면명 등 도면마다 다른 것)이 위에 얹힌다. - _fill_placeholders(placed, {**_title_fields.get(), **(fields or {})}) + _fill_placeholders(placed, fields or {}) return placed