Preserve extension names in form write selectors
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user