normalize: 문자열 아닌 필드(숫자·null)에 죽지 않고, 파일 하나 실패가 전체를 멈추지 않게
고객사 실측: 패키지 목록의 CHANGED_ON 에서 TypeError 가 나며 정규화가 중단돼 206본 중 49본만 처리됐다. clean_text_field 가 값을 문자열로 바꿔 처리하고, 파일별 처리 전체를 try 로 감싸 [FAIL] 기록 후 계속한다. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
db50ec9d46
commit
edb0b111a8
@@ -149,3 +149,26 @@ def test_sap_call_sends_fields_without_wrapper(monkeypatch):
|
||||
assert captured["body"] == {"IV_PACKAGE": "ZFI01", "IV_MAX_ROWS": 5} # 래퍼 없음, 빈 값 제외, 숫자 유지
|
||||
assert captured["url"].endswith("/GET_PROGRAM_LIST")
|
||||
assert res["return"]["type"] == "S" and res["parsed"]["RESULT"] == []
|
||||
|
||||
|
||||
def test_normalize_survives_non_string_fields_and_bad_file(tmp_path):
|
||||
"""JSON 규약 응답엔 숫자·null 이 섞인다. 파일 하나가 깨져도 나머지는 계속 처리해야 한다."""
|
||||
from ingest.normalize import clean_text_field
|
||||
assert clean_text_field(None) == "" and clean_text_field(20240102) == "20240102" and clean_text_field(0) == "0"
|
||||
|
||||
raw, out = tmp_path / "raw", tmp_path / "normalized"
|
||||
raw.mkdir()
|
||||
(raw / "ZPKG.txt").write_text(json.dumps([
|
||||
{"DEVCLASS": "ZPKG", "OBJ_NAME": "ZA", "TEXT": None, "CREATED_ON": "", "CHANGED_ON": 20240102},
|
||||
{"DEVCLASS": "ZPKG", "OBJ_NAME": "ZB", "TEXT": "b", "CREATED_ON": None, "CHANGED_ON": None},
|
||||
]), encoding="utf-8")
|
||||
(raw / "ZBAD.txt").write_text('{"MAIN_PROGRAM": "ZBAD", "INCLUDE_PROGRAM": "not-a-list"}', encoding="utf-8")
|
||||
(raw / "ZOK.txt").write_text(json.dumps({"MAIN_PROGRAM": "ZOK", "DESCRIPTION": "ok",
|
||||
"INCLUDE_PROGRAM": [{"INCLUDE": "ZOK", "SOURCE_CODE": "REPORT zok.\n"}]}),
|
||||
encoding="utf-8")
|
||||
stats = normalize_run(raw, out)
|
||||
assert stats["programs"] == 1 and stats["package_rows"] == 2 and stats["errors"] == 1
|
||||
assert (out / "ZOK" / "ZOK.abap").exists()
|
||||
rows = [json.loads(l) for l in (out / "packages.jsonl").read_text(encoding="utf-8").splitlines()]
|
||||
assert rows[0]["changed_on"] == "20240102" and rows[0]["text"] == "" and rows[1]["changed_on"] == ""
|
||||
assert "ZBAD.txt" in (out / "_errors.log").read_text(encoding="utf-8")
|
||||
|
||||
Reference in New Issue
Block a user