33from typing import Any
44from 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+
620from ._base import BaseRpcApi
721
822
923class 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