Skip to content

Commit b9bcaab

Browse files
feat: add fallback for folder_key in mcp service (#1484)
1 parent 3e525cc commit b9bcaab

7 files changed

Lines changed: 36 additions & 17 deletions

File tree

packages/uipath-platform/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-platform"
3-
version = "0.1.12"
3+
version = "0.1.13"
44
description = "HTTP client library for programmatic access to UiPath Platform"
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.11"

packages/uipath-platform/src/uipath/platform/common/_bindings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ def process_args(args, kwargs) -> dict[str, Any]:
239239
matched_overwrite.folder_identifier,
240240
)
241241
else:
242-
logger.debug(
242+
logger.info(
243243
"No resource overwrite matched for %s key='%s' on %s",
244244
resource_type,
245245
key,

packages/uipath-platform/src/uipath/platform/orchestrator/_mcp_service.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,19 @@ async def main():
200200
def custom_headers(self) -> dict[str, str]:
201201
return self.folder_headers
202202

203+
def _resolve_folder_key(self, folder_path: str | None) -> str | None:
204+
"""Resolve folder key from folder_path, falling back to FolderContext."""
205+
if folder_path is not None:
206+
return self._folders_service.retrieve_folder_key(folder_path)
207+
208+
return self._folder_key
209+
203210
def _list_spec(
204211
self,
205212
*,
206213
folder_path: str | None,
207214
) -> RequestSpec:
208-
folder_key = self._folders_service.retrieve_folder_key(folder_path)
215+
folder_key = self._resolve_folder_key(folder_path)
209216
return RequestSpec(
210217
method="GET",
211218
endpoint=Endpoint("/agenthub_/api/servers"),
@@ -220,7 +227,7 @@ def _retrieve_spec(
220227
*,
221228
folder_path: str | None,
222229
) -> RequestSpec:
223-
folder_key = self._folders_service.retrieve_folder_key(folder_path)
230+
folder_key = self._resolve_folder_key(folder_path)
224231
return RequestSpec(
225232
method="GET",
226233
endpoint=Endpoint(f"/agenthub_/api/servers/{slug}"),

packages/uipath-platform/tests/services/test_mcp_service.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,18 @@ def test_list_with_folder_path(
105105
assert HEADER_FOLDER_KEY in servers_request.headers
106106
assert servers_request.headers[HEADER_FOLDER_KEY] == "resolved-folder-key"
107107

108-
def test_list_without_folder_raises_error(
108+
def test_list_without_folder_path_falls_back_to_folder_key(
109109
self,
110+
httpx_mock: HTTPXMock,
110111
config: UiPathApiConfig,
111112
execution_context: UiPathExecutionContext,
113+
base_url: str,
114+
org: str,
115+
tenant: str,
112116
monkeypatch: pytest.MonkeyPatch,
113117
) -> None:
114-
"""Test that listing servers without a folder_path raises ValueError."""
115-
monkeypatch.delenv("UIPATH_FOLDER_KEY", raising=False)
118+
"""Test that listing servers without folder_path falls back to folder_key from FolderContext."""
119+
monkeypatch.setenv("UIPATH_FOLDER_KEY", "fallback-folder-key")
116120
monkeypatch.delenv("UIPATH_FOLDER_PATH", raising=False)
117121

118122
folders_service = FolderService(
@@ -124,11 +128,19 @@ def test_list_without_folder_raises_error(
124128
folders_service=folders_service,
125129
)
126130

127-
with pytest.raises(
128-
ValueError,
129-
match="Cannot obtain folder_key without providing folder_path",
130-
):
131-
service.list()
131+
httpx_mock.add_response(
132+
url=f"{base_url}{org}{tenant}/agenthub_/api/servers",
133+
status_code=200,
134+
json=[],
135+
)
136+
137+
servers = service.list()
138+
139+
assert servers == []
140+
requests = httpx_mock.get_requests()
141+
assert len(requests) == 1
142+
assert HEADER_FOLDER_KEY in requests[0].headers
143+
assert requests[0].headers[HEADER_FOLDER_KEY] == "fallback-folder-key"
132144

133145
@pytest.mark.anyio
134146
async def test_list_async(

packages/uipath-platform/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.

packages/uipath/pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
[project]
22
name = "uipath"
3-
version = "2.10.34"
3+
version = "2.10.35"
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"
77
dependencies = [
88
"uipath-core>=0.5.8, <0.6.0",
99
"uipath-runtime>=0.10.0, <0.11.0",
10-
"uipath-platform>=0.1.4, <0.2.0",
10+
"uipath-platform>=0.1.13, <0.2.0",
1111
"click>=8.3.1",
1212
"httpx>=0.28.1",
1313
"pyjwt>=2.10.1",

packages/uipath/uv.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)