Skip to content

Commit 81658b7

Browse files
committed
✨ Add project job management methods and refactor existing project RPC methods
1 parent f9f8598 commit 81658b7

File tree

1 file changed

+116
-10
lines changed
  • packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/webserver/v1

1 file changed

+116
-10
lines changed

packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/webserver/v1/projects.py

Lines changed: 116 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,59 @@
33
from typing import Any
44
from uuid import UUID
55

6+
from models_library.products import ProductName
7+
from models_library.projects import ProjectID
8+
from models_library.rest_pagination import PageOffsetInt
9+
from models_library.rpc.webserver.projects import (
10+
ListProjectsMarkedAsJobRpcFilters,
11+
PageRpcProjectJobRpcGet,
12+
ProjectJobRpcGet,
13+
)
14+
from models_library.rpc_pagination import (
15+
DEFAULT_NUMBER_OF_ITEMS_PER_PAGE,
16+
PageLimitInt,
17+
)
18+
from models_library.users import UserID
19+
620
from ._base import BaseRpcApi
721

822

923
class ProjectsRpcApi(BaseRpcApi):
1024
"""RPC client for project-related operations."""
1125

1226
async def get_project(
13-
self, user_id: int, project_uuid: UUID, *, include: list[str] | None = None
27+
self,
28+
*,
29+
product_name: ProductName,
30+
user_id: UserID,
31+
project_uuid: UUID,
32+
include: list[str] | None = None,
1433
) -> dict[str, Any]:
1534
"""Get a project by UUID."""
1635
return await self._request(
1736
"get_project",
37+
product_name=product_name,
1838
user_id=user_id,
1939
project_uuid=project_uuid,
2040
include=include or [],
2141
)
2242

2343
async def list_projects(
2444
self,
25-
user_id: int,
2645
*,
46+
product_name: ProductName,
47+
user_id: UserID,
2748
filter_by_services: list[str] | None = None,
2849
filter_by_study_services: list[str] | None = None,
2950
offset: int = 0,
3051
limit: int | None = None,
3152
order_by: dict[str, str] | None = None,
32-
search: str | None = None
53+
search: str | None = None,
3354
) -> dict[str, Any]:
3455
"""List projects for a user."""
3556
return await self._request(
3657
"list_projects",
58+
product_name=product_name,
3759
user_id=user_id,
3860
filter_by_services=filter_by_services or [],
3961
filter_by_study_services=filter_by_study_services or [],
@@ -44,34 +66,118 @@ async def list_projects(
4466
)
4567

4668
async def create_project(
47-
self, user_id: int, project: dict[str, Any], *, as_template: bool = False
69+
self,
70+
*,
71+
product_name: ProductName,
72+
user_id: UserID,
73+
project: dict[str, Any],
74+
as_template: bool = False,
4875
) -> dict[str, Any]:
4976
"""Create a new project."""
5077
return await self._request(
51-
"create_project", user_id=user_id, project=project, as_template=as_template
78+
"create_project",
79+
product_name=product_name,
80+
user_id=user_id,
81+
project=project,
82+
as_template=as_template,
5283
)
5384

5485
async def update_project(
55-
self, user_id: int, project_uuid: UUID, project_patch: dict[str, Any]
86+
self,
87+
*,
88+
product_name: ProductName,
89+
user_id: UserID,
90+
project_uuid: UUID,
91+
project_patch: dict[str, Any],
5692
) -> dict[str, Any]:
5793
"""Update an existing project."""
5894
return await self._request(
5995
"update_project",
96+
product_name=product_name,
6097
user_id=user_id,
6198
project_uuid=project_uuid,
6299
project_patch=project_patch,
63100
)
64101

65-
async def delete_project(self, user_id: int, project_uuid: UUID) -> None:
102+
async def delete_project(
103+
self, *, product_name: ProductName, user_id: UserID, project_uuid: UUID
104+
) -> None:
66105
"""Delete a project."""
67106
return await self._request(
68-
"delete_project", user_id=user_id, project_uuid=project_uuid
107+
"delete_project",
108+
product_name=product_name,
109+
user_id=user_id,
110+
project_uuid=project_uuid,
69111
)
70112

71113
async def clone_project(
72-
self, user_id: int, project_uuid: UUID, *, hidden: bool = False
114+
self,
115+
*,
116+
product_name: ProductName,
117+
user_id: UserID,
118+
project_uuid: UUID,
119+
hidden: bool = False,
73120
) -> dict[str, Any]:
74121
"""Clone an existing project."""
75122
return await self._request(
76-
"clone_project", user_id=user_id, project_uuid=project_uuid, hidden=hidden
123+
"clone_project",
124+
product_name=product_name,
125+
user_id=user_id,
126+
project_uuid=project_uuid,
127+
hidden=hidden,
128+
)
129+
130+
async def mark_project_as_job(
131+
self,
132+
*,
133+
product_name: ProductName,
134+
user_id: UserID,
135+
project_uuid: ProjectID,
136+
job_parent_resource_name: str,
137+
storage_assets_deleted: bool,
138+
) -> None:
139+
"""Mark a project as a job."""
140+
return await self._request(
141+
"mark_project_as_job",
142+
product_name=product_name,
143+
user_id=user_id,
144+
project_uuid=project_uuid,
145+
job_parent_resource_name=job_parent_resource_name,
146+
storage_assets_deleted=storage_assets_deleted,
147+
)
148+
149+
async def list_projects_marked_as_jobs(
150+
self,
151+
*,
152+
product_name: ProductName,
153+
user_id: UserID,
154+
offset: PageOffsetInt = 0,
155+
limit: PageLimitInt = DEFAULT_NUMBER_OF_ITEMS_PER_PAGE,
156+
filters: ListProjectsMarkedAsJobRpcFilters | None = None,
157+
) -> PageRpcProjectJobRpcGet:
158+
"""List projects marked as jobs."""
159+
return await self._request(
160+
"list_projects_marked_as_jobs",
161+
product_name=product_name,
162+
user_id=user_id,
163+
offset=offset,
164+
limit=limit,
165+
filters=filters,
166+
)
167+
168+
async def get_project_marked_as_job(
169+
self,
170+
*,
171+
product_name: ProductName,
172+
user_id: UserID,
173+
project_uuid: ProjectID,
174+
job_parent_resource_name: str,
175+
) -> ProjectJobRpcGet:
176+
"""Get a project marked as a job."""
177+
return await self._request(
178+
"get_project_marked_as_job",
179+
product_name=product_name,
180+
user_id=user_id,
181+
project_uuid=project_uuid,
182+
job_parent_resource_name=job_parent_resource_name,
77183
)

0 commit comments

Comments
 (0)