Skip to content

Commit a8b3f0f

Browse files
cristipufuionmincu
authored andcommitted
feat: add connections retrieve payload
1 parent 2ebde90 commit a8b3f0f

4 files changed

Lines changed: 104 additions & 3 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.1.17"
3+
version = "2.1.18"
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.10"

src/uipath/_services/connections_service.py

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
import json
12
import logging
3+
from typing import Any, Dict
4+
5+
import httpx
26

37
from .._config import Config
48
from .._execution_context import ExecutionContext
59
from .._utils import Endpoint, RequestSpec
6-
from ..models import Connection, ConnectionToken
10+
from .._utils._ssl_context import get_httpx_client_kwargs
11+
from ..models import Connection, ConnectionToken, EventArguments
712
from ..tracing._traced import traced
813
from ._base_service import BaseService
914

@@ -112,6 +117,84 @@ async def retrieve_token_async(self, key: str) -> ConnectionToken:
112117
)
113118
return ConnectionToken.model_validate(response.json())
114119

120+
@traced(
121+
name="connections_retrieve_event_payload",
122+
run_type="uipath",
123+
)
124+
def retrieve_event_payload(self, event_args: EventArguments) -> Dict[str, Any]:
125+
"""Retrieve event payload from UiPath Integration Service.
126+
127+
Args:
128+
key (str): The unique identifier of the connection.
129+
event_args (EventArguments): The event arguments. Should be passed along from the job's input.
130+
131+
Returns:
132+
Dict[str, Any]: The event payload data
133+
"""
134+
if not event_args.additional_event_data:
135+
raise ValueError("additional_event_data is required")
136+
137+
# Parse additional event data to get event id
138+
event_data = json.loads(event_args.additional_event_data)
139+
140+
event_id = None
141+
if "processedEventId" in event_data:
142+
event_id = event_data["processedEventId"]
143+
elif "rawEventId" in event_data:
144+
event_id = event_data["rawEventId"]
145+
else:
146+
raise ValueError("Event Id not found in additional event data")
147+
148+
# Build request URL using connection token's API base URI
149+
spec = self._retrieve_event_payload_spec("v1", event_id)
150+
151+
response = self.request(spec.method, url=spec.endpoint)
152+
153+
return response.json()
154+
155+
@traced(
156+
name="connections_retrieve_event_payload",
157+
run_type="uipath",
158+
)
159+
async def retrieve_event_payload_async(
160+
self, event_args: EventArguments
161+
) -> Dict[str, Any]:
162+
"""Retrieve event payload from UiPath Integration Service.
163+
164+
Args:
165+
key (str): The unique identifier of the connection.
166+
event_args (EventArguments): The event arguments. Should be passed along from the job's input.
167+
168+
Returns:
169+
Dict[str, Any]: The event payload data
170+
"""
171+
if not event_args.additional_event_data:
172+
raise ValueError("additional_event_data is required")
173+
174+
# Parse additional event data to get event id
175+
event_data = json.loads(event_args.additional_event_data)
176+
177+
event_id = None
178+
if "processedEventId" in event_data:
179+
event_id = event_data["processedEventId"]
180+
elif "rawEventId" in event_data:
181+
event_id = event_data["rawEventId"]
182+
else:
183+
raise ValueError("Event Id not found in additional event data")
184+
185+
# Build request URL using connection token's API base URI
186+
spec = self._retrieve_event_payload_spec("v1", event_id)
187+
188+
response = await self.request_async(spec.method, url=spec.endpoint)
189+
190+
return response.json()
191+
192+
def _retrieve_event_payload_spec(self, version: str, event_id: str) -> RequestSpec:
193+
return RequestSpec(
194+
method="GET",
195+
endpoint=Endpoint(f"/elements_/{version}/events/{event_id}"),
196+
)
197+
115198
def _retrieve_spec(self, key: str) -> RequestSpec:
116199
return RequestSpec(
117200
method="GET",

src/uipath/models/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from .assets import Asset, UserAsset
44
from .attachment import Attachment
55
from .buckets import Bucket
6-
from .connections import Connection, ConnectionToken
6+
from .connections import Connection, ConnectionToken, EventArguments
77
from .context_grounding import ContextGroundingQueryResponse
88
from .context_grounding_index import ContextGroundingIndex
99
from .errors import BaseUrlMissingError, SecretMissingError
@@ -39,6 +39,7 @@
3939
"TransactionItemResult",
4040
"Connection",
4141
"ConnectionToken",
42+
"EventArguments",
4243
"Job",
4344
"InvokeProcess",
4445
"ActionSchema",

src/uipath/models/connections.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,20 @@ class ConnectionToken(BaseModel):
4949
expires_in: Optional[int] = Field(default=None, alias="expiresIn")
5050
api_base_uri: Optional[str] = Field(default=None, alias="apiBaseUri")
5151
element_instance_id: Optional[int] = Field(default=None, alias="elementInstanceId")
52+
53+
54+
class EventArguments(BaseModel):
55+
event_connector: Optional[str] = Field(default=None, alias="UiPathEventConnector")
56+
event: Optional[str] = Field(default=None, alias="UiPathEvent")
57+
event_object_type: Optional[str] = Field(
58+
default=None, alias="UiPathEventObjectType"
59+
)
60+
event_object_id: Optional[str] = Field(default=None, alias="UiPathEventObjectId")
61+
additional_event_data: Optional[str] = Field(
62+
default=None, alias="UiPathAdditionalEventData"
63+
)
64+
65+
model_config = ConfigDict(
66+
populate_by_name=True,
67+
extra="allow",
68+
)

0 commit comments

Comments
 (0)