Centralize formatter route metadata

This commit is contained in:
2026-06-27 02:24:30 +02:00
parent 7d112c0f98
commit c0c2fb2b40
8 changed files with 115 additions and 29 deletions
+62
View File
@@ -0,0 +1,62 @@
from __future__ import annotations
import re
from typing import Any
try:
from . import category_template_metadata as template_metadata_policy
from .hardcore_action_metadata import normalize_hardcore_action_family
from .hardcore_position_config import normalize_hardcore_position_family, normalize_hardcore_position_values
except ImportError: # Allows local smoke tests from the repository root.
import category_template_metadata as template_metadata_policy
from hardcore_action_metadata import normalize_hardcore_action_family
from hardcore_position_config import normalize_hardcore_position_family, normalize_hardcore_position_values
def row_action_family(row: Any, default: str = "") -> str:
if not isinstance(row, dict):
return default
return normalize_hardcore_action_family(row.get("action_family"), default)
def row_position_family(row: Any, default: str = "") -> str:
if not isinstance(row, dict):
return default
return normalize_hardcore_position_family(str(row.get("position_family") or "").strip().lower(), default)
def _raw_position_key_values(row: dict[str, Any]) -> list[Any]:
values: list[Any] = []
position_keys = row.get("position_keys")
if isinstance(position_keys, list):
values.extend(position_keys)
elif position_keys is not None:
values.append(position_keys)
if row.get("position_key") is not None:
values.append(row.get("position_key"))
return values
def _position_key_slug(value: Any) -> str:
text = str(value or "").strip()
if not text or text == "any":
return ""
return re.sub(r"[^a-z0-9]+", "_", text.lower()).strip("_")
def row_position_keys(row: Any, *, include_unknown: bool = False) -> list[str]:
if not isinstance(row, dict):
return []
values = _raw_position_key_values(row)
selected = normalize_hardcore_position_values(values)
if not include_unknown:
return selected
for value in values:
normalized = _position_key_slug(value)
if normalized and normalized not in selected:
selected.append(normalized)
return selected
def row_formatter_hints(row: Any, route: str) -> list[str]:
return template_metadata_policy.formatter_hints_for_route(row, route)