Inherit hardcore template metadata
This commit is contained in:
@@ -34,6 +34,43 @@ def template_metadata(item: Any) -> dict[str, Any]:
|
||||
return {key: item[key] for key in TEMPLATE_METADATA_KEYS if key in item}
|
||||
|
||||
|
||||
def merge_template_metadata(*metadata_values: Any) -> dict[str, Any]:
|
||||
merged: dict[str, Any] = {}
|
||||
for value in metadata_values:
|
||||
metadata = template_metadata(value)
|
||||
if not metadata:
|
||||
continue
|
||||
for key in ("action_family", "action_type", "family", "position_family", "position_key"):
|
||||
if str(metadata.get(key) or "").strip():
|
||||
merged[key] = metadata[key]
|
||||
if metadata.get("position_keys") is not None:
|
||||
merged["position_keys"] = merge_position_keys(
|
||||
template_position_keys(merged),
|
||||
template_position_keys(metadata),
|
||||
)
|
||||
hint_map = formatter_hints(metadata)
|
||||
if hint_map:
|
||||
existing = formatter_hints(merged)
|
||||
for route, hints in hint_map.items():
|
||||
for hint in hints:
|
||||
if hint not in existing.setdefault(route, []):
|
||||
existing[route].append(hint)
|
||||
merged["formatter_hint"] = existing
|
||||
return merged
|
||||
|
||||
|
||||
def inherited_template_metadata(*containers: Any) -> dict[str, Any]:
|
||||
metadata_parts: list[dict[str, Any]] = []
|
||||
for container in containers:
|
||||
if not isinstance(container, dict):
|
||||
continue
|
||||
nested = container.get("item_template_metadata")
|
||||
if isinstance(nested, dict):
|
||||
metadata_parts.append(nested)
|
||||
metadata_parts.append(container)
|
||||
return merge_template_metadata(*metadata_parts)
|
||||
|
||||
|
||||
def template_position_family(metadata: dict[str, Any]) -> str:
|
||||
return normalize_hardcore_position_family(
|
||||
metadata.get("position_family") or metadata.get("family"),
|
||||
|
||||
Reference in New Issue
Block a user