From a646b53aecaa7da271dbddc886e1f041db7771c0 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Fri, 14 Aug 2026 20:57:30 +0300 Subject: [PATCH] fix(1c): retain descriptor role in template inventory --- plugins/1c/connector/adapter_1c_server.py | 7 +++++-- tests/1c/test_payload_codec.py | 5 ++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/1c/connector/adapter_1c_server.py b/plugins/1c/connector/adapter_1c_server.py index 632acb1..6d546ca 100644 --- a/plugins/1c/connector/adapter_1c_server.py +++ b/plugins/1c/connector/adapter_1c_server.py @@ -4105,9 +4105,10 @@ def template_descriptor_type_code_from_part(part: dict[str, Any]) -> str | None: The code is useful evidence, but its numeric-to-TemplateType mapping is intentionally not guessed from the payload carrier or a template name. """ - if str(part.get("role") or "") != "metadata_payload": - return None classification = part.get("classification") if isinstance(part.get("classification"), dict) else {} + role = str(part.get("role") or classification.get("role") or "") + if role != "metadata_payload": + return None tree = classification.get("tree") if not isinstance(tree, dict): return None @@ -42511,6 +42512,8 @@ def metadata_object_templates(payload: dict[str, Any]) -> dict[str, Any]: for part in parts_result.get("parts") or []: classification = part.get("classification") or {} public_part = payload_public_properties(classification) + if classification.get("role"): + public_part["role"] = classification.get("role") descriptor_type_code = template_descriptor_type_code_from_part(part) if descriptor_type_code is not None: public_part["descriptor_type_code"] = descriptor_type_code diff --git a/tests/1c/test_payload_codec.py b/tests/1c/test_payload_codec.py index e683f69..cf0e586 100644 --- a/tests/1c/test_payload_codec.py +++ b/tests/1c/test_payload_codec.py @@ -7061,14 +7061,13 @@ def test_common_template_inventory_preserves_unmapped_descriptor_code(monkeypatc monkeypatch.setattr(adapter_server, "resolve_object_guid", lambda *_args, **_kwargs: ("a" * 36, None, {"name": "Оформление", "ref": "CommonTemplate.Оформление"}, None)) monkeypatch.setattr(adapter_server, "read_template_by_guid", lambda _payload: {"status": "ok", "source": {"kind": "live_sql"}, "templates": [{"guid": "a" * 36}]}) monkeypatch.setattr(adapter_server, "metadata_object_parts", lambda _payload: {"parts": [{ - "role": "metadata_payload", - "classification": {"tree": {"type": "list", "items": [ + "classification": {"role": "metadata_payload", "tree": {"type": "list", "items": [ {"type": "atom", "value": "1"}, {"type": "list", "items": [ {"type": "atom", "value": "4"}, {"type": "list", "items": []}, {"type": "atom", "value": "7"}, ]}, ]}}, - }, {"role": "content", "classification": {"xml_root": "AppearanceTemplate"}, "features": {}}]}) + }, {"classification": {"role": "binary_or_unknown_payload", "xml_root": "AppearanceTemplate"}, "features": {}}]}) result = adapter_server.metadata_object_templates({"base_id": "upo_test", "kind": "CommonTemplate", "name": "Оформление"})