Skip to content

Commit 3ea787f

Browse files
committed
chore: add folder key helper
1 parent f6d9c51 commit 3ea787f

File tree

3 files changed

+93
-26
lines changed

3 files changed

+93
-26
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from typing import Optional
2+
3+
from .folder_service import FolderService
4+
5+
6+
def resolve_folder_key(
7+
folder_key: Optional[str],
8+
folder_path: Optional[str],
9+
folders_service: FolderService,
10+
context_folder_key: Optional[str] = None,
11+
context_folder_path: Optional[str] = None,
12+
) -> str:
13+
"""Resolve folder key from provided parameters or instance context.
14+
15+
Args:
16+
folder_key: Optional folder key to use directly
17+
folder_path: Optional folder path to resolve to a key
18+
folders_service: FolderService instance to resolve folder paths
19+
context_folder_key: Optional instance-level folder key fallback
20+
context_folder_path: Optional instance-level folder path fallback
21+
22+
Returns:
23+
The resolved folder key
24+
25+
Raises:
26+
ValueError: If folder key cannot be resolved
27+
"""
28+
if folder_key is not None:
29+
return folder_key
30+
31+
if folder_path is not None:
32+
return folders_service.retrieve_folder_key(folder_path=folder_path)
33+
34+
if context_folder_key is not None:
35+
return context_folder_key
36+
37+
if context_folder_path is not None:
38+
return folders_service.retrieve_folder_key(folder_path=context_folder_path)
39+
40+
raise ValueError("Failed to resolve folder key")

src/uipath/_services/context_grounding_service.py

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77
from .._config import Config
88
from .._execution_context import ExecutionContext
99
from .._folder_context import FolderContext
10-
from .._utils import Endpoint, RequestSpec, header_folder, resource_override
10+
from .._utils import (
11+
Endpoint,
12+
RequestSpec,
13+
header_folder,
14+
resource_override,
15+
)
1116
from .._utils.constants import (
1217
LLMV4_REQUEST,
1318
ORCHESTRATOR_STORAGE_BUCKET_DATA_SOURCE,
@@ -33,6 +38,7 @@
3338
from ..models.exceptions import UnsupportedDataSourceException
3439
from ..tracing import traced
3540
from ._base_service import BaseService
41+
from ._folder_helpers import resolve_folder_key
3642
from .buckets_service import BucketsService
3743
from .folder_service import FolderService
3844

@@ -672,7 +678,13 @@ def _ingest_spec(
672678
folder_key: Optional[str] = None,
673679
folder_path: Optional[str] = None,
674680
) -> RequestSpec:
675-
folder_key = self._resolve_folder_key(folder_key, folder_path)
681+
folder_key = resolve_folder_key(
682+
folder_key,
683+
folder_path,
684+
self._folders_service,
685+
self._folder_key,
686+
self._folder_path,
687+
)
676688

677689
return RequestSpec(
678690
method="POST",
@@ -688,7 +700,13 @@ def _retrieve_spec(
688700
folder_key: Optional[str] = None,
689701
folder_path: Optional[str] = None,
690702
) -> RequestSpec:
691-
folder_key = self._resolve_folder_key(folder_key, folder_path)
703+
folder_key = resolve_folder_key(
704+
folder_key,
705+
folder_path,
706+
self._folders_service,
707+
self._folder_key,
708+
self._folder_path,
709+
)
692710

693711
return RequestSpec(
694712
method="GET",
@@ -726,7 +744,13 @@ def _create_spec(
726744
Returns:
727745
RequestSpec for the create index request
728746
"""
729-
folder_key = self._resolve_folder_key(folder_key, folder_path)
747+
folder_key = resolve_folder_key(
748+
folder_key,
749+
folder_path,
750+
self._folders_service,
751+
self._folder_key,
752+
self._folder_path,
753+
)
730754

731755
data_source_dict = self._build_data_source(source)
732756

@@ -828,7 +852,13 @@ def _retrieve_by_id_spec(
828852
folder_key: Optional[str] = None,
829853
folder_path: Optional[str] = None,
830854
) -> RequestSpec:
831-
folder_key = self._resolve_folder_key(folder_key, folder_path)
855+
folder_key = resolve_folder_key(
856+
folder_key,
857+
folder_path,
858+
self._folders_service,
859+
self._folder_key,
860+
self._folder_path,
861+
)
832862

833863
return RequestSpec(
834864
method="GET",
@@ -844,7 +874,13 @@ def _delete_by_id_spec(
844874
folder_key: Optional[str] = None,
845875
folder_path: Optional[str] = None,
846876
) -> RequestSpec:
847-
folder_key = self._resolve_folder_key(folder_key, folder_path)
877+
folder_key = resolve_folder_key(
878+
folder_key,
879+
folder_path,
880+
self._folders_service,
881+
self._folder_key,
882+
self._folder_path,
883+
)
848884

849885
return RequestSpec(
850886
method="DELETE",
@@ -862,7 +898,13 @@ def _search_spec(
862898
folder_key: Optional[str] = None,
863899
folder_path: Optional[str] = None,
864900
) -> RequestSpec:
865-
folder_key = self._resolve_folder_key(folder_key, folder_path)
901+
folder_key = resolve_folder_key(
902+
folder_key,
903+
folder_path,
904+
self._folders_service,
905+
self._folder_key,
906+
self._folder_path,
907+
)
866908

867909
return RequestSpec(
868910
method="POST",
@@ -876,22 +918,6 @@ def _search_spec(
876918
},
877919
)
878920

879-
def _resolve_folder_key(self, folder_key, folder_path):
880-
if folder_key is None and folder_path is not None:
881-
folder_key = self._folders_service.retrieve_key(folder_path=folder_path)
882-
883-
if folder_key is None and folder_path is None:
884-
folder_key = self._folder_key or (
885-
self._folders_service.retrieve_key(folder_path=self._folder_path)
886-
if self._folder_path
887-
else None
888-
)
889-
890-
if folder_key is None:
891-
raise ValueError("ContextGrounding: Failed to resolve folder key")
892-
893-
return folder_key
894-
895921
def _extract_bucket_info(self, index: ContextGroundingIndex) -> Tuple[str, str]:
896922
"""Extract bucket information from the index, validating it's a storage bucket data source.
897923

tests/sdk/services/test_context_grounding_service.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -814,9 +814,10 @@ def test_all_requests_pass_spec_parameters(
814814
tenant: str,
815815
) -> None:
816816
"""Verify that all requests pass spec.method, spec.endpoint, spec.params, and spec.headers correctly."""
817-
# Mock folder service to always return the test folder key
818-
with patch.object(
819-
service._folders_service, "retrieve_key", return_value="test-folder-key"
817+
# Mock resolve_folder_key to always return the test folder key
818+
with patch(
819+
"uipath._services._folder_helpers.resolve_folder_key",
820+
return_value="test-folder-key",
820821
):
821822
# Test retrieve method
822823
with patch.object(service, "request") as mock_request:

0 commit comments

Comments
 (0)