diff --git a/M02_MasterTemplete/M02_Doc_Copy.py b/M02_MasterTemplete/M02_Doc_Copy.py index cfe4bed21..b05fc9229 100644 --- a/M02_MasterTemplete/M02_Doc_Copy.py +++ b/M02_MasterTemplete/M02_Doc_Copy.py @@ -32,7 +32,6 @@ _SCRIPTS = str(Path(__file__).resolve().parents[1] / "resources/master_data/scri if _SCRIPTS not in sys.path: sys.path.insert(0, _SCRIPTS) -import master_auto as mau # noqa: E402 import master_doc as md # noqa: E402 import master_doc_calc as mc # noqa: E402 import master_doc_convert as cv # noqa: E402 @@ -225,14 +224,15 @@ def _apart(doc: dict, lines: list[dict], n: int) -> None: def given_of(whole: Any, code: str, given: Any) -> dict: - """옛 `run_line` 과 같은 입력 — 빈 입력 = 자동값(M01 줄) › 받은 값.""" + """문서 옵션 값 — M01 수식 탭 기본(자동값 › 기본 제안 · `master_equation.given_of`) › + 받은 값(빈 값 = 기본 · 802-4b-1 자재지역 자동값 0 이 「포항」 을 덮던 흠).""" from M01_MasterData import M01_MasterData_Store as m01 + mine = {k: v for k, v in m01._dec(given or {}).items() if v not in (None, "")} try: - auto = {k: v for k, v in mau.values(whole, whole.logic(code)).items() if v is not None} + return cv.meq.given_of(whole, whole.logic(code), mine) except _ERR: - auto = {} - return {**auto, **m01._dec(given or {})} + return mine def apart_of(marks: Any, mats: Any) -> list[int]: diff --git a/resources/tester/test_802_4a_m02_doc.py b/resources/tester/test_802_4a_m02_doc.py index 1c86c5261..537dfe7b6 100644 --- a/resources/tester/test_802_4a_m02_doc.py +++ b/resources/tester/test_802_4a_m02_doc.py @@ -258,3 +258,19 @@ def test_delete_tolerant_and_blank(world): empty = _sk(me) got = _calc(me, _doc(me, empty)) assert got["기준"] is None and "빈 문서" in got["수식셈"]["까닭"] + + +def test_option_value_is_m01_default_not_auto(world): + """파생 SK 옵션 값 = M01 문서 기본(자재지역 · 자동값 0 아님) · 받은 값이 이김 · 금액 = 옛 셈.""" + me = world["personal"] + m01 = next(v for v in dc.folder()[FORM]["변수"] if v["열쇠"] == "자재지역")["연결"]["값"] + for given, want in (({}, m01), ({"자재지역": ""}, m01), ({"자재지역": "울진"}, "울진")): + key = _sk(me, 바탕={"로직": FORM}, 입력값=given) + got = _at(me, path.read, key) + assert next(v for v in got["문서"]["변수"] if v["열쇠"] == "자재지역")["연결"]["값"] == want + token = dsk.OLD.set(True) + try: + old = _sum(me, key) + finally: + dsk.OLD.reset(token) + assert got["셈"]["계"] == old == _sum(me, key)