Merge branch 'sub_laptop_3' of C:/Aislo_wt/sub_laptop_3 into main_laptop_1
This commit is contained in:
@@ -64,3 +64,19 @@ def fill(copy: dict) -> dict:
|
||||
if not keys:
|
||||
return copy
|
||||
return {**copy, **skc.grow(dc.values_of(copy), skc.snap([], keys))}
|
||||
|
||||
|
||||
def fill_imported(sk: dict, doc: Any) -> dict:
|
||||
"""가져온 식 SK(823-1) — 문서 셈(단가기준 · 바꿔 끼운 줄)이 읽은 줄 가운데
|
||||
SK 로직 사본에 없는 것 + 내 기계 = 지금 값으로 로직 사본에 더함 ·
|
||||
사본 없음 · 빈틈 없음 = 그대로."""
|
||||
from M02_MasterTemplete import M02_Doc_Import as dim
|
||||
|
||||
if not skc.has(sk) or not isinstance(doc, dict):
|
||||
return sk
|
||||
seen = _Seen(dim._index(sk, None, doc))
|
||||
dim.run(doc, sk, index=seen) # 셈 틀림 = 읽은 데까지(run 이 받음)
|
||||
keys = sorted({*seen.keys, *mym.keys_in(doc)} - _have(sk[skc.KEY]))
|
||||
if not keys:
|
||||
return sk
|
||||
return {**sk, skc.KEY: skc.grow(sk[skc.KEY], skc.snap([], keys))}
|
||||
|
||||
@@ -51,12 +51,18 @@ def basis_of(sk: dict) -> str:
|
||||
return "우리" if (sk.get(imp.KEY) or {}).get("단가기준") == "우리" else "엑셀"
|
||||
|
||||
|
||||
def _index(sk: dict, master: Any = None) -> Any:
|
||||
"""셈 색인 — 우리 = 로직 사본 위(822-1 · 이음 값이 M01 따라 안 바뀜 · [단가 갱신] 으로만) ·
|
||||
엑셀 = 받은 색인 · 없으면 지금 M01."""
|
||||
def swapped(doc: Any) -> int:
|
||||
"""바꿔 끼운 가져온 줄 수(823-1 · 연결 `바꿈` = 원래 · 엑셀 값 뗌 = 우리 값)."""
|
||||
vars_ = (doc or {}).get("변수") or [] if isinstance(doc, dict) else []
|
||||
return sum(1 for v in vars_ if isinstance(v.get("연결"), dict) and v["연결"].get("바꿈"))
|
||||
|
||||
|
||||
def _index(sk: dict, master: Any = None, doc: Any = None) -> Any:
|
||||
"""셈 색인 — 우리 · 바꾼 줄 있음(823-1) = 로직 사본 위(822-1 · 이음 값이 M01 따라 안 바뀜 ·
|
||||
[단가 갱신] 으로만) · 엑셀 = 받은 색인 · 없으면 지금 M01."""
|
||||
from M02_MasterTemplete import M02_Sangeun_Copy as skc
|
||||
|
||||
if basis_of(sk) == "우리":
|
||||
if basis_of(sk) == "우리" or swapped(doc):
|
||||
return skc.over(sk, imp._whole())
|
||||
return master or imp._whole()
|
||||
|
||||
@@ -524,7 +530,7 @@ def record(doc: dict, sk: dict) -> dict[str, Any]:
|
||||
import master_doc_record as mr # `M02_Doc_Copy` 가 scripts 를 길에 둔 뒤
|
||||
|
||||
basis = basis_of(sk)
|
||||
links = Links(_index(sk), basis)
|
||||
links = Links(_index(sk, None, doc), basis)
|
||||
mine = view(doc, basis)
|
||||
rec = mr.Rec(links)
|
||||
try:
|
||||
@@ -536,10 +542,11 @@ def record(doc: dict, sk: dict) -> dict[str, Any]:
|
||||
return rec.out()
|
||||
|
||||
|
||||
def run(doc: dict, sk: dict, master: Any = None) -> dict:
|
||||
"""가져온 식 문서 셈(SK 단가기준) — 계산기 = M01 과 같은 `master_doc_calc`."""
|
||||
def run(doc: dict, sk: dict, master: Any = None, index: Any = None) -> dict:
|
||||
"""가져온 식 문서 셈(SK 단가기준) — 계산기 = M01 과 같은 `master_doc_calc` ·
|
||||
`index` = 셈 색인 갈음(빈틈 적기 · 823-1)."""
|
||||
basis = basis_of(sk)
|
||||
links = Links(_index(sk, master), basis)
|
||||
links = Links(index or _index(sk, master, doc), basis)
|
||||
mine = view(doc, basis)
|
||||
try:
|
||||
links.learn(mine)
|
||||
|
||||
@@ -49,6 +49,8 @@ def _strip(v: Any) -> Any:
|
||||
return {k: _strip(x) for k, x in v.items() if k not in _STAMPED}
|
||||
if isinstance(v, list):
|
||||
return [_strip(x) for x in v]
|
||||
if isinstance(v, float) and v.is_integer(): # 파일 24554.0 = 화면 왕복 24554(823-1)
|
||||
return int(v)
|
||||
return v
|
||||
|
||||
|
||||
@@ -188,6 +190,8 @@ def settle(out: dict, whole: Any, job: Any, raw: Any) -> dict:
|
||||
raw = raw if isinstance(raw, dict) else {}
|
||||
mine = SAVING.get()
|
||||
if mine is not None and mine.get("키") == out.get("키"): # 수식 길 저장 — 서버가 지은 사본
|
||||
if dim.is_imported(out): # 가져온 식 — 셈이 읽은 줄(바꿔 끼운 줄 등)을 로직 사본에(823-1)
|
||||
out = gap.fill_imported(out, mine["사본"].get("문서"))
|
||||
return {**out, KEY: norm(mine["사본"])}
|
||||
file = stored(out.get("키")) or {}
|
||||
have = file.get(KEY) if dc.has(file) else (raw.get(KEY) if dc.has(raw) else None)
|
||||
|
||||
Reference in New Issue
Block a user