3
3
"""
4
4
import json
5
5
import logging
6
- from typing import Dict , List , Optional , Set
6
+ from typing import Any , Dict , List , Optional , Set
7
7
8
8
import aioredlock
9
9
from aiohttp import web
@@ -100,7 +100,10 @@ async def create_projects(request: web.Request):
100
100
101
101
# Appends state
102
102
project ["state" ] = await projects_api .get_project_state_for_user (
103
- user_id , project ["uuid" ], request .app
103
+ user_id = user_id ,
104
+ project_uuid = project ["uuid" ],
105
+ is_template = as_template is not None ,
106
+ app = request .app ,
104
107
)
105
108
106
109
except ValidationError as exc :
@@ -125,12 +128,30 @@ async def list_projects(request: web.Request):
125
128
db = request .config_dict [APP_PROJECT_DBAPI ]
126
129
127
130
# TODO: improve dbapi to list project
131
+ async def add_prj_state (project : Dict [str , Any ], is_template : bool ) -> None :
132
+ project ["state" ] = await projects_api .get_project_state_for_user (
133
+ user_id = user_id ,
134
+ project_uuid = project ["uuid" ],
135
+ is_template = is_template ,
136
+ app = request .app ,
137
+ )
138
+
128
139
projects_list = []
129
140
if ptype in ("template" , "all" ):
130
- projects_list += await db .load_template_projects (user_id = user_id )
141
+ template_projects = await db .load_template_projects (user_id = user_id )
142
+ await logged_gather (
143
+ * [add_prj_state (prj , is_template = True ) for prj in template_projects ],
144
+ reraise = True ,
145
+ )
146
+ projects_list += template_projects
131
147
132
148
if ptype in ("user" , "all" ): # standard only (notice that templates will only)
133
- projects_list += await db .load_user_projects (user_id = user_id )
149
+ user_projects = await db .load_user_projects (user_id = user_id )
150
+ await logged_gather (
151
+ * [add_prj_state (prj , is_template = False ) for prj in user_projects ],
152
+ reraise = True ,
153
+ )
154
+ projects_list += user_projects
134
155
135
156
start = int (request .query .get ("start" , 0 ))
136
157
count = int (request .query .get ("count" , len (projects_list )))
@@ -144,11 +165,8 @@ async def list_projects(request: web.Request):
144
165
)
145
166
146
167
# validate response
147
- async def validate_project (prj : Dict ) -> Optional [ Dict ]:
168
+ async def validate_project (prj : Dict [ str , Any ] ) -> Dict [ str , Any ]:
148
169
try :
149
- prj ["state" ] = await projects_api .get_project_state_for_user (
150
- user_id , project_uuid = prj ["uuid" ], app = request .app
151
- )
152
170
projects_api .validate_project (request .app , prj )
153
171
if await project_uses_available_services (prj , user_available_services ):
154
172
return prj
@@ -259,7 +277,10 @@ async def replace_project(request: web.Request):
259
277
await director_v2 .create_or_update_pipeline (request .app , user_id , project_uuid )
260
278
# Appends state
261
279
new_project ["state" ] = await projects_api .get_project_state_for_user (
262
- user_id , project_uuid , request .app
280
+ user_id = user_id ,
281
+ project_uuid = project_uuid ,
282
+ is_template = False ,
283
+ app = request .app ,
263
284
)
264
285
265
286
except ValidationError as exc :
@@ -369,7 +390,10 @@ async def try_add_project() -> Optional[Set[int]]:
369
390
370
391
# notify users that project is now locked
371
392
project ["state" ] = await projects_api .get_project_state_for_user (
372
- user_id , project_uuid , request .app
393
+ user_id = user_id ,
394
+ project_uuid = project_uuid ,
395
+ is_template = False ,
396
+ app = request .app ,
373
397
)
374
398
375
399
await projects_api .notify_project_state_update (request .app , project )
@@ -417,7 +441,10 @@ async def _close_project_task() -> None:
417
441
await rt .remove ("project_id" )
418
442
# ensure we notify the user whatever happens, the GC should take care of dangling services in case of issue
419
443
project ["state" ] = await projects_api .get_project_state_for_user (
420
- user_id , project_uuid , request .app
444
+ user_id = user_id ,
445
+ project_uuid = project_uuid ,
446
+ is_template = False ,
447
+ app = request .app ,
421
448
)
422
449
await projects_api .notify_project_state_update (request .app , project )
423
450
0 commit comments