wip(z01): 총칙 기본 감춤 잣대화 — 병합 전 임시 보관

This commit is contained in:
2026-09-17 16:58:05 +09:00
parent c044726d41
commit 6680cb0ff3
4 changed files with 89 additions and 26 deletions
+33 -10
View File
@@ -156,17 +156,33 @@ def _facets(kind: str) -> dict[str, dict[str, str]]:
return {_key(i): {key: str(i.get(key) or "") for key in FILTER_KEYS} for i in items}
def _role_names() -> dict[str, str]:
"""줄 구실 이름 — `axis_policy.json`(데스크탑 서브 잣대) 한 곳에서."""
def _policy() -> dict[str, Any]:
"""줄 구실 잣대 — `axis_policy.json`(데스크탑 서브) 한 곳에서."""
path = FOLDER / "axis_policy.json"
if not path.is_file():
return {}
roles = _read(str(path), path.stat().st_mtime_ns).get("roles") or {}
return {key: str(role.get("name_ko") or key) for key, role in roles.items()}
return _read(str(path), path.stat().st_mtime_ns) if path.is_file() else {}
def _role_names() -> dict[str, str]:
"""거르기 상자에 뜰 이름. 목록에서는 「총칙」이 아니라 「공종 아님 · 규정·기준」으로 적는다."""
roles = _policy().get("roles") or {}
return {
key: str(role.get("list_label") or role.get("name_ko") or key)
for key, role in roles.items()
}
def _default_of(key: str) -> str:
"""이 가름의 기본값 — **잣대가 정한다**(화면도 서버도 스스로 가르지 않음).
총칙 줄은 표가 붙어 목록에 섞여 뜨지만 공종이 아니라 규정·기준이다. 기본은 안 보이되
상자를 고르면 보인다 — ⚠ **지운 것이 아니라 감춘 것**이다(2026-09-17 브레인).
"""
wanted = _policy().get("list_default") or {}
return str(wanted.get("value") or ALL) if wanted.get("filter") == key else ALL
def filters(kind: str, rows: list[dict[str, Any]]) -> list[dict[str, Any]]:
"""거르기 상자 — 값이 둘 이상 갈리는 가름만 · 기본은 「전부」(안 거름)."""
"""거르기 상자 — 값이 둘 이상 갈리는 가름만. 기본값은 **잣대**가 정한다(`list_default`)."""
facets = _facets(kind)
labels = {"division": ("부문", {}), "axis_role": ("줄 구실", _role_names())}
out = []
@@ -179,13 +195,14 @@ def filters(kind: str, rows: list[dict[str, Any]]) -> list[dict[str, Any]]:
if len(values) < 2:
continue
label, names = labels[key]
default = _default_of(key)
out.append(
{
"key": key,
"label": label,
"options": [{"value": ALL, "label": "전부", "rows": len(rows)}]
+ [{"value": v, "label": names.get(v, v), "rows": counts[v]} for v in values],
"default": ALL,
"default": default if default in values else ALL,
}
)
return out
@@ -194,9 +211,15 @@ def filters(kind: str, rows: list[dict[str, Any]]) -> list[dict[str, Any]]:
def apply_filters(
kind: str, rows: list[dict[str, Any]], picked: dict[str, str]
) -> list[dict[str, Any]]:
"""고른 값으로 거른다. **안 고른 가름은 잣대의 기본값**을 쓴다.
⚠ 기본값을 서버가 매기는 까닭 — 화면만 기본값을 알면 「상자엔 공종이라 떠 있는데 목록엔
총칙이 섞여 있는」 어긋남이 난다. 「전부」는 빈 값을 **적어 보내면** 된다.
"""
facets = _facets(kind)
for key, value in picked.items():
if key in FILTER_KEYS and value != ALL:
for key in FILTER_KEYS:
value = picked[key] if key in picked else _default_of(key)
if value != ALL:
rows = [r for r in rows if facets.get(r["@id"], {}).get(key) == value]
return rows