Preserve extension names in form write selectors

This commit is contained in:
2026-07-26 17:14:45 +03:00
parent 1ca47dce13
commit 9d7c4f38f3
2 changed files with 53 additions and 2 deletions
+8 -2
View File
@@ -40949,7 +40949,7 @@ def saved_state_form_search_row(
if descriptor_identity.get("guid") and not form.get("guid"): if descriptor_identity.get("guid") and not form.get("guid"):
form["guid"] = descriptor_identity.get("guid") form["guid"] = descriptor_identity.get("guid")
owner = decoded.get("owner") if isinstance(decoded.get("owner"), dict) else {} owner = decoded.get("owner") if isinstance(decoded.get("owner"), dict) else {}
if not owner.get("name") and not bool(payload.get("include_storage")): if not owner.get("name"):
related_owner = saved_state_related_descriptor_identity( related_owner = saved_state_related_descriptor_identity(
base_id=base_id, base_id=base_id,
table=table, table=table,
@@ -40986,6 +40986,7 @@ def public_saved_state_form_search_row(
row: dict[str, Any], row: dict[str, Any],
*, *,
requested_owner_kind: str | None = None, requested_owner_kind: str | None = None,
requested_extension: str | None = None,
) -> dict[str, Any]: ) -> dict[str, Any]:
owner = row.get("owner") if isinstance(row.get("owner"), dict) else {} owner = row.get("owner") if isinstance(row.get("owner"), dict) else {}
form = row.get("form") if isinstance(row.get("form"), dict) else {} form = row.get("form") if isinstance(row.get("form"), dict) else {}
@@ -41011,6 +41012,7 @@ def public_saved_state_form_search_row(
if part if part
) )
form_selector = { form_selector = {
**({"extension": requested_extension} if requested_extension else {}),
**({"ref": owner_ref} if owner_ref else {}), **({"ref": owner_ref} if owner_ref else {}),
**({"form": form_name} if form_name else {}), **({"form": form_name} if form_name else {}),
**({"qualified_name": qualified_name} if qualified_name else {}), **({"qualified_name": qualified_name} if qualified_name else {}),
@@ -41168,7 +41170,11 @@ def metadata_saved_state_forms_search(payload: dict[str, Any]) -> dict[str, Any]
if len(rows) >= int(limit or 50): if len(rows) >= int(limit or 50):
break break
public_rows = rows if include_storage else [ public_rows = rows if include_storage else [
public_saved_state_form_search_row(row, requested_owner_kind=owner_kind) public_saved_state_form_search_row(
row,
requested_owner_kind=owner_kind,
requested_extension=extension_filter or None,
)
for row in rows for row in rows
] ]
return { return {
+45
View File
@@ -3024,6 +3024,7 @@ def test_saved_state_forms_search_disambiguates_same_form_name_by_owner(monkeypa
def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.MonkeyPatch) -> None: def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.MonkeyPatch) -> None:
file_name = "extension-guid__form-guid.0" file_name = "extension-guid__form-guid.0"
monkeypatch.setattr(adapter_server, "extension_filter_to_guid", lambda *args, **kwargs: ("extension-guid", None))
monkeypatch.setattr( monkeypatch.setattr(
adapter_server, adapter_server,
"storage_files_list", "storage_files_list",
@@ -3080,6 +3081,7 @@ def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.Monk
{ {
"base_id": "upo_test", "base_id": "upo_test",
"tables": ["ConfigCASSave"], "tables": ["ConfigCASSave"],
"extension": "test2",
"ref": "Catalog.test2", "ref": "Catalog.test2",
"form": "t_Форма", "form": "t_Форма",
"command": "ЗаменаДомена", "command": "ЗаменаДомена",
@@ -3092,11 +3094,13 @@ def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.Monk
form = result["forms"][0] form = result["forms"][0]
assert form["qualified_name"] == "test2.t_Форма" assert form["qualified_name"] == "test2.t_Форма"
assert form["selector"] == { assert form["selector"] == {
"extension": "test2",
"ref": "Catalog.test2", "ref": "Catalog.test2",
"form": "t_Форма", "form": "t_Форма",
"qualified_name": "test2.t_Форма", "qualified_name": "test2.t_Форма",
} }
assert form["matches"][0]["selector"] == { assert form["matches"][0]["selector"] == {
"extension": "test2",
"ref": "Catalog.test2", "ref": "Catalog.test2",
"form": "t_Форма", "form": "t_Форма",
"qualified_name": "test2.t_Форма", "qualified_name": "test2.t_Форма",
@@ -3125,6 +3129,47 @@ def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.Monk
assert storage_marker not in str(result) assert storage_marker not in str(result)
def test_saved_state_form_search_resolves_owner_for_internal_name_first_write(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(
adapter_server,
"metadata_form_decode",
lambda payload: {
"status": "ok",
"source": {"kind": "live_sql", "table": payload["table"], "file_name": payload["file_name"]},
"form": {"file_name": payload["file_name"]},
"profile": {"items": [], "commands": []},
"counts": {"items": 0, "commands": 0},
},
)
monkeypatch.setattr(
adapter_server,
"saved_state_form_descriptor_identity",
lambda **kwargs: {"name": "t_Форма", "synonym": "T форма", "guid": "form-guid"},
)
monkeypatch.setattr(
adapter_server,
"saved_state_related_descriptor_identity",
lambda **kwargs: {
"kind": "Catalog",
"name": "test2",
"synonym": "Test2",
"guid": "owner-guid",
},
)
row = adapter_server.saved_state_form_search_row(
base_id="upo_test",
table="ConfigCASSave",
file_name="extension-guid__form-guid.0",
payload={"include_storage": True, "form": "t_Форма"},
timeout_seconds=30,
)
assert row is not None
assert row["owner"]["kind"] == "Catalog"
assert row["owner"]["name"] == "test2"
def test_saved_state_forms_search_help_exposes_owner_and_form_selectors() -> None: def test_saved_state_forms_search_help_exposes_owner_and_form_selectors() -> None:
method = { method = {
row["name"]: row row["name"]: row