Skip to content

Commit 9d400af

Browse files
committed
fix(ConnectionIdOverwrites): connection id overwrites in eval
In eval context `studio_client.get_resource_overwrites()` is invoked. This client provides overrides for connections as `ConnectionId` instead of `connectionId`. Allowing parsing of both fields using `AliasChoice`, but we prioritize `connectionId` over `ConnectionId` for backwards compatibility. Serialization will always be done to `connectionId`.
1 parent 1dbd63b commit 9d400af

4 files changed

Lines changed: 64 additions & 4 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "uipath"
3-
version = "2.4.4"
3+
version = "2.4.5"
44
description = "Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools."
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.11"

src/uipath/_utils/_bindings.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
Union,
1414
)
1515

16-
from pydantic import BaseModel, ConfigDict, Field, TypeAdapter
16+
from pydantic import AliasChoices, BaseModel, ConfigDict, Field, TypeAdapter
1717

1818
T = TypeVar("T")
1919

@@ -56,7 +56,11 @@ def folder_identifier(self) -> str:
5656

5757
class ConnectionResourceOverwrite(ResourceOverwrite):
5858
resource_type: Literal["connection"]
59-
connection_id: str = Field(alias="connectionId")
59+
# In eval context, studio web provides "ConnectionId".
60+
connection_id: str = Field(
61+
alias="connectionId",
62+
validation_alias=AliasChoices("connectionId", "ConnectionId"),
63+
)
6064
folder_key: str = Field(alias="folderKey")
6165

6266
model_config = ConfigDict(

tests/sdk/test_bindings.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
from uipath._utils import resource_override
66
from uipath._utils._bindings import (
7+
ConnectionResourceOverwrite,
78
GenericResourceOverwrite,
9+
ResourceOverwriteParser,
810
ResourceOverwritesContext,
911
_resource_overwrites,
1012
)
@@ -335,3 +337,57 @@ def get_asset(name, folder_path):
335337
# Verify context was cleaned up despite the exception
336338
result_after = get_asset("test", "original")
337339
assert result_after == ("test", "original")
340+
341+
342+
class TestConnectionResourceOverwriteAliases:
343+
"""Test that ConnectionResourceOverwrite accepts both connectionId and ConnectionId aliases."""
344+
345+
def test_connection_resource_overwrite_with_lowercase_alias(self):
346+
"""Test that connectionId alias works."""
347+
overwrite = ConnectionResourceOverwrite(
348+
resource_type="connection",
349+
connectionId="conn-123",
350+
folderKey="folder1",
351+
)
352+
assert overwrite.connection_id == "conn-123"
353+
assert overwrite.folder_key == "folder1"
354+
355+
def test_connection_resource_overwrite_with_capitalized_alias(self):
356+
"""Test that ConnectionId alias works."""
357+
overwrite = ConnectionResourceOverwrite(
358+
resource_type="connection",
359+
ConnectionId="conn-456",
360+
folderKey="folder2",
361+
)
362+
assert overwrite.connection_id == "conn-456"
363+
assert overwrite.folder_key == "folder2"
364+
365+
def test_connection_resource_overwrite_with_field_name(self):
366+
"""Test that the actual field name connection_id also works."""
367+
overwrite = ConnectionResourceOverwrite(
368+
resource_type="connection",
369+
connection_id="conn-789",
370+
folder_key="folder3",
371+
)
372+
assert overwrite.connection_id == "conn-789"
373+
assert overwrite.folder_key == "folder3"
374+
375+
def test_parse_connection_with_lowercase_alias(self):
376+
"""Test parsing a connection resource with lowercase connectionId alias."""
377+
overwrite = ResourceOverwriteParser.parse(
378+
key="connection.conn-123",
379+
value={"connectionId": "conn-123", "folderKey": "folder1"},
380+
)
381+
assert isinstance(overwrite, ConnectionResourceOverwrite)
382+
assert overwrite.connection_id == "conn-123"
383+
assert overwrite.folder_key == "folder1"
384+
385+
def test_parse_connection_with_capitalized_alias(self):
386+
"""Test parsing a connection resource with capitalized ConnectionId alias."""
387+
overwrite = ResourceOverwriteParser.parse(
388+
key="connection.conn-456",
389+
value={"ConnectionId": "conn-456", "folderKey": "folder2"},
390+
)
391+
assert isinstance(overwrite, ConnectionResourceOverwrite)
392+
assert overwrite.connection_id == "conn-456"
393+
assert overwrite.folder_key == "folder2"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)