Skip to content

Commit ba8cf52

Browse files
feat: add rpc interface
1 parent ae61013 commit ba8cf52

File tree

6 files changed

+45
-27
lines changed

6 files changed

+45
-27
lines changed

packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/storage/simcore_s3.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,21 @@ async def start_export_data(
5555
export_as=export_as,
5656
)
5757
return async_job_rpc_get, job_filter
58+
59+
60+
async def start_search(
61+
rabbitmq_rpc_client: RabbitMQRPCClient,
62+
*,
63+
user_id: UserID,
64+
product_name: ProductName,
65+
name_pattern: str,
66+
) -> tuple[AsyncJobGet, AsyncJobFilter]:
67+
job_filter = get_async_job_filter(user_id=user_id, product_name=product_name)
68+
async_job_rpc_get = await submit(
69+
rabbitmq_rpc_client,
70+
rpc_namespace=STORAGE_RPC_NAMESPACE,
71+
method_name=TypeAdapter(RPCMethodName).validate_python("start_search"),
72+
job_filter=job_filter,
73+
name_pattern=name_pattern,
74+
)
75+
return async_job_rpc_get, job_filter

services/storage/src/simcore_service_storage/api/_worker_tasks/_simcore_s3.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,18 +132,18 @@ async def export_data_as_download_link(
132132
return PresignedLink(link=download_link)
133133

134134

135-
async def search_files(
135+
async def search(
136136
task: Task,
137137
task_id: TaskID,
138138
*,
139139
user_id: UserID,
140140
project_id: ProjectID | None,
141-
filename_pattern: str,
141+
name_pattern: str,
142142
) -> list[FileMetaData]:
143143
with log_context(
144144
_logger,
145145
logging.INFO,
146-
f"'{task_id}' search file {filename_pattern=}",
146+
f"'{task_id}' search file {name_pattern=}",
147147
):
148148
dsm = get_dsm_provider(get_app_server(task.app).app).get(
149149
SimcoreS3DataManager.get_location_id()
@@ -152,10 +152,10 @@ async def search_files(
152152
assert isinstance(dsm, SimcoreS3DataManager) # nosec
153153

154154
pages = []
155-
async for page in dsm.search_files(
155+
async for page in dsm.search(
156156
user_id=user_id,
157-
filename_pattern=filename_pattern,
158157
project_id=project_id,
158+
name_pattern=name_pattern,
159159
):
160160
# TODO: publish temporary result
161161
pages.extend(page)

services/storage/src/simcore_service_storage/api/_worker_tasks/tasks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
deep_copy_files_from_project,
1919
export_data,
2020
export_data_as_download_link,
21-
search_files,
21+
search,
2222
)
2323

2424
_logger = logging.getLogger(__name__)
@@ -39,4 +39,4 @@ def setup_worker_tasks(app: Celery) -> None:
3939
register_task(app, complete_upload_file)
4040
register_task(app, delete_paths)
4141
register_task(app, deep_copy_files_from_project)
42-
register_task(app, search_files)
42+
register_task(app, search)

services/storage/src/simcore_service_storage/api/rpc/_simcore_s3.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
deep_copy_files_from_project,
1515
export_data,
1616
export_data_as_download_link,
17-
search_files,
17+
search,
1818
)
1919

2020
router = RPCRouter()
@@ -68,13 +68,13 @@ async def start_export_data(
6868

6969

7070
@router.expose()
71-
async def start_search_files(
71+
async def start_search(
7272
task_manager: TaskManager,
7373
job_filter: AsyncJobFilter,
74-
filename_pattern: str,
74+
name_pattern: str,
7575
project_id: str | None = None,
7676
) -> AsyncJobGet:
77-
task_name = search_files.__name__
77+
task_name = search.__name__
7878
task_filter = TaskFilter.model_validate(job_filter.model_dump())
7979
task_uuid = await task_manager.submit_task(
8080
task_metadata=TaskMetadata(
@@ -83,7 +83,7 @@ async def start_search_files(
8383
),
8484
task_filter=task_filter,
8585
user_id=job_filter.user_id,
86-
filename_pattern=filename_pattern,
86+
name_pattern=name_pattern,
8787
project_id=project_id,
8888
)
8989
return AsyncJobGet(job_id=task_uuid, job_name=task_name)

services/storage/src/simcore_service_storage/simcore_s3_dsm.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,11 +1047,11 @@ async def _search_project_s3_files(
10471047
):
10481048
return
10491049

1050-
async def search_files(
1050+
async def search(
10511051
self,
10521052
user_id: UserID,
10531053
*,
1054-
filename_pattern: str,
1054+
name_pattern: str,
10551055
project_id: ProjectID | None = None,
10561056
items_per_page: NonNegativeInt = 100,
10571057
) -> AsyncGenerator[list[FileMetaData], None]:
@@ -1076,7 +1076,7 @@ async def search_files(
10761076
# Search each accessible project
10771077
for proj_id in accessible_projects_ids:
10781078
async for page_results in self._search_project_s3_files(
1079-
proj_id, filename_pattern, user_id, items_per_page
1079+
proj_id, name_pattern, user_id, items_per_page
10801080
):
10811081
yield page_results
10821082

services/storage/tests/unit/test_simcore_s3_dsm.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,9 @@ async def test_search_files(
201201

202202
# Test 1: Search for all .txt files
203203
txt_results = []
204-
async for page in simcore_s3_dsm.search_files(
204+
async for page in simcore_s3_dsm.search(
205205
user_id=user_id,
206-
filename_pattern="*.txt",
206+
name_pattern="*.txt",
207207
project_id=project_id,
208208
items_per_page=10,
209209
):
@@ -216,9 +216,9 @@ async def test_search_files(
216216

217217
# Test 2: Search with specific prefix pattern
218218
data_results = []
219-
async for page in simcore_s3_dsm.search_files(
219+
async for page in simcore_s3_dsm.search(
220220
user_id=user_id,
221-
filename_pattern="data_*",
221+
name_pattern="data_*",
222222
project_id=project_id,
223223
items_per_page=10,
224224
):
@@ -230,9 +230,9 @@ async def test_search_files(
230230

231231
# Test 3: Search with pattern that matches multiple extensions
232232
temp_results = []
233-
async for page in simcore_s3_dsm.search_files(
233+
async for page in simcore_s3_dsm.search(
234234
user_id=user_id,
235-
filename_pattern="temp_*",
235+
name_pattern="temp_*",
236236
project_id=project_id,
237237
items_per_page=10,
238238
):
@@ -244,9 +244,9 @@ async def test_search_files(
244244

245245
# Test 4: Search with pattern that doesn't match anything
246246
no_match_results = []
247-
async for page in simcore_s3_dsm.search_files(
247+
async for page in simcore_s3_dsm.search(
248248
user_id=user_id,
249-
filename_pattern="nonexistent_*",
249+
name_pattern="nonexistent_*",
250250
project_id=project_id,
251251
items_per_page=10,
252252
):
@@ -256,9 +256,9 @@ async def test_search_files(
256256

257257
# Test 5: Search without project_id restriction (all accessible projects)
258258
all_results = []
259-
async for page in simcore_s3_dsm.search_files(
259+
async for page in simcore_s3_dsm.search(
260260
user_id=user_id,
261-
filename_pattern="*",
261+
name_pattern="*",
262262
items_per_page=10,
263263
):
264264
all_results.extend(page)
@@ -277,9 +277,9 @@ async def test_search_files(
277277
# Test 6: Test pagination with small page size
278278
paginated_results = []
279279
page_count = 0
280-
async for page in simcore_s3_dsm.search_files(
280+
async for page in simcore_s3_dsm.search(
281281
user_id=user_id,
282-
filename_pattern="*",
282+
name_pattern="*",
283283
project_id=project_id,
284284
items_per_page=2, # Small page size to test pagination
285285
):

0 commit comments

Comments
 (0)