Skip to content

Commit 639f866

Browse files
feat: add ArgumentEmail and ArgumentGroupName escalation recipient types
1 parent 3b4cba5 commit 639f866

4 files changed

Lines changed: 71 additions & 4 deletions

File tree

packages/uipath/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.10.43"
3+
version = "2.10.44"
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"

packages/uipath/src/uipath/agent/models/agent.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ class AgentEscalationRecipientType(str, CaseInsensitiveEnum):
134134
ASSET_USER_EMAIL = "AssetUserEmail"
135135
GROUP_NAME = "GroupName"
136136
ASSET_GROUP_NAME = "AssetGroupName"
137+
ARGUMENT_EMAIL = "ArgumentEmail"
138+
ARGUMENT_GROUP_NAME = "ArgumentGroupName"
137139

138140

139141
class AgentContextRetrievalMode(str, CaseInsensitiveEnum):
@@ -495,6 +497,8 @@ class AgentA2aResourceConfig(BaseAgentResourceConfig):
495497
5: AgentEscalationRecipientType.GROUP_NAME,
496498
"staticgroupname": AgentEscalationRecipientType.GROUP_NAME,
497499
6: AgentEscalationRecipientType.ASSET_GROUP_NAME,
500+
7: AgentEscalationRecipientType.ARGUMENT_EMAIL,
501+
8: AgentEscalationRecipientType.ARGUMENT_GROUP_NAME,
498502
}
499503

500504

@@ -550,8 +554,31 @@ class AssetRecipient(BaseEscalationRecipient):
550554
folder_path: str = Field(..., alias="folderPath")
551555

552556

557+
class ArgumentEmailRecipient(BaseEscalationRecipient):
558+
"""Argument email recipient resolved from a named input argument."""
559+
560+
type: Literal[AgentEscalationRecipientType.ARGUMENT_EMAIL,] = Field(
561+
..., alias="type"
562+
)
563+
argument_name: str = Field(..., alias="argumentName")
564+
565+
566+
class ArgumentGroupNameRecipient(BaseEscalationRecipient):
567+
"""Argument group name recipient resolved from a named input argument."""
568+
569+
type: Literal[AgentEscalationRecipientType.ARGUMENT_GROUP_NAME,] = Field(
570+
..., alias="type"
571+
)
572+
argument_name: str = Field(..., alias="argumentName")
573+
574+
553575
AgentEscalationRecipient = Annotated[
554-
Union[StandardRecipient, AssetRecipient],
576+
Union[
577+
StandardRecipient,
578+
AssetRecipient,
579+
ArgumentEmailRecipient,
580+
ArgumentGroupNameRecipient,
581+
],
555582
Field(discriminator="type"),
556583
BeforeValidator(_normalize_recipient_type),
557584
]

packages/uipath/tests/agent/models/test_agent.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Any
22

33
import pytest
4-
from pydantic import TypeAdapter
4+
from pydantic import TypeAdapter, ValidationError
55

66
from uipath.agent.models.agent import (
77
AgentA2aResourceConfig,
@@ -43,6 +43,8 @@
4343
AgentUnknownToolResourceConfig,
4444
AgentWordOperator,
4545
AgentWordRule,
46+
ArgumentEmailRecipient,
47+
ArgumentGroupNameRecipient,
4648
AssetRecipient,
4749
BatchTransformFileExtension,
4850
BatchTransformWebSearchGrounding,
@@ -3800,3 +3802,41 @@ def test_a2a_resource_case_insensitive(self):
38003802
]
38013803
assert len(a2a_resources) == 1
38023804
assert isinstance(a2a_resources[0], AgentA2aResourceConfig)
3805+
3806+
3807+
class TestArgumentRecipientDeserialization:
3808+
def test_argument_email_recipient_by_type_int(self):
3809+
payload = {"type": 7, "argumentName": "assigneeEmail"}
3810+
recipient: AgentEscalationRecipient = TypeAdapter(AgentEscalationRecipient).validate_python(payload)
3811+
assert isinstance(recipient, ArgumentEmailRecipient)
3812+
assert recipient.argument_name == "assigneeEmail"
3813+
assert recipient.type == AgentEscalationRecipientType.ARGUMENT_EMAIL
3814+
3815+
def test_argument_group_name_recipient_by_type_int(self):
3816+
payload = {"type": 8, "argumentName": "assigneeGroup"}
3817+
recipient: AgentEscalationRecipient = TypeAdapter(AgentEscalationRecipient).validate_python(payload)
3818+
assert isinstance(recipient, ArgumentGroupNameRecipient)
3819+
assert recipient.argument_name == "assigneeGroup"
3820+
assert recipient.type == AgentEscalationRecipientType.ARGUMENT_GROUP_NAME
3821+
3822+
def test_argument_email_recipient_by_type_string(self):
3823+
payload = {"type": "ArgumentEmail", "argumentName": "emailArg"}
3824+
recipient: AgentEscalationRecipient = TypeAdapter(AgentEscalationRecipient).validate_python(payload)
3825+
assert isinstance(recipient, ArgumentEmailRecipient)
3826+
assert recipient.argument_name == "emailArg"
3827+
3828+
def test_argument_group_name_recipient_by_type_string(self):
3829+
payload = {"type": "ArgumentGroupName", "argumentName": "groupArg"}
3830+
recipient: AgentEscalationRecipient = TypeAdapter(AgentEscalationRecipient).validate_python(payload)
3831+
assert isinstance(recipient, ArgumentGroupNameRecipient)
3832+
assert recipient.argument_name == "groupArg"
3833+
3834+
def test_argument_email_recipient_missing_argument_name_raises(self):
3835+
payload = {"type": 7}
3836+
with pytest.raises(ValidationError):
3837+
TypeAdapter(AgentEscalationRecipient).validate_python(payload)
3838+
3839+
def test_argument_group_name_recipient_missing_argument_name_raises(self):
3840+
payload = {"type": 8}
3841+
with pytest.raises(ValidationError):
3842+
TypeAdapter(AgentEscalationRecipient).validate_python(payload)

packages/uipath/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)