Decode appearance template style rules

This commit is contained in:
2026-08-14 13:34:10 +03:00
parent 9d8dccc993
commit 1a3624f3e0
2 changed files with 18 additions and 2 deletions
+15
View File
@@ -51,11 +51,26 @@ def inspect_appearance_payload(data: bytes) -> dict[str, Any]:
for ordinal, item in enumerate((node for node in root if _local_name(node.tag) == "item"), start=1):
parameter, value = _child_text(item, "parameter"), _child_text(item, "value")
items.append({"ordinal": ordinal, "parameter": parameter, "value": value})
appearances = []
for ordinal, appearance in enumerate((node for node in root.iter() if _local_name(node.tag) == "appearance"), start=1):
rules = []
for item in (node for node in appearance if _local_name(node.tag) == "item"):
value_node = next((child for child in item if _local_name(child.tag) == "value"), None)
rule: dict[str, Any] = {"parameter": _child_text(item, "parameter"), "value": _child_text(item, "value")}
if value_node is not None:
value_type = value_node.attrib.get("{http://www.w3.org/2001/XMLSchema-instance}type") or value_node.attrib.get("type")
if value_type:
rule["value_type"] = value_type
if value_node.attrib:
rule["value_attributes"] = {key.rsplit("}", 1)[-1]: value for key, value in value_node.attrib.items()}
rules.append(rule)
appearances.append({"ordinal": ordinal, "rules": rules})
tag_counts = Counter(_local_name(node.tag) for node in root.iter())
return {
"status": "ok",
"container": {"compression": decoded.get("compression"), "raw_bytes": decoded.get("raw_bytes"), "payload_bytes": decoded.get("payload_bytes"), "xml_offset": start, "xml_bytes": len(xml_bytes), "xml_root": "AppearanceTemplate"},
"items": items,
"appearances": appearances,
"outline": {"tag_counts": dict(sorted(tag_counts.items(), key=lambda item: item[0].casefold()))},
"diagnostics": {"write": "unsupported_until_reverse_codec_fixture"},
}