19
19
import os
20
20
from copy import deepcopy
21
21
from subprocess import Popen , PIPE , DEVNULL
22
+ from typing import (
23
+ TYPE_CHECKING , Any , Dict , Iterable , List , Union
24
+ )
22
25
23
26
from graphql .language .base import print_ast
24
27
25
- from cylc .flow .network .resolvers import BaseResolvers
26
28
from cylc .flow .data_store_mgr import WORKFLOW
29
+ from cylc .flow .network .resolvers import BaseResolvers
30
+
31
+
32
+ if TYPE_CHECKING :
33
+ from logging import Logger
34
+ from graphql import ResolveInfo
35
+ from cylc .flow .data_store_mgr import DataStoreMgr
36
+ from cylc .flow .id import Tokens
37
+ from cylc .uiserver .workflows_mgr import WorkflowsManager
27
38
28
39
29
40
# show traceback from cylc commands
@@ -180,33 +191,47 @@ async def play(cls, workflows, args, workflows_mgr, log):
180
191
class Resolvers (BaseResolvers ):
181
192
"""UI Server context GraphQL query and mutation resolvers."""
182
193
183
- workflows_mgr = None
184
-
185
- def __init__ (self , data , log , ** kwargs ):
194
+ def __init__ (
195
+ self ,
196
+ data : 'DataStoreMgr' ,
197
+ log : 'Logger' ,
198
+ workflows_mgr : 'WorkflowsManager' ,
199
+ ** kwargs
200
+ ):
186
201
super ().__init__ (data )
187
202
self .log = log
203
+ self .workflows_mgr = workflows_mgr
188
204
189
205
# Set extra attributes
190
206
for key , value in kwargs .items ():
191
207
if hasattr (self , key ):
192
208
setattr (self , key , value )
193
209
194
210
# Mutations
195
- async def mutator (self , info , * m_args ):
211
+ async def mutator (
212
+ self ,
213
+ info : 'ResolveInfo' ,
214
+ command : str ,
215
+ w_args : Dict [str , Any ],
216
+ _kwargs : Dict [str , Any ],
217
+ _meta : Dict [str , Any ]
218
+ ) -> List [Dict [str , Any ]]:
196
219
"""Mutate workflow."""
197
- req_meta = {}
198
- _ , w_args , _ , _ = m_args
199
- req_meta ['auth_user' ] = info .context .get (
200
- 'current_user' , 'unknown user' )
220
+ req_meta = {
221
+ 'auth_user' : info .context .get ( # type: ignore[union-attr]
222
+ 'current_user' , 'unknown user'
223
+ )
224
+ }
201
225
w_ids = [
202
226
flow [WORKFLOW ].id
203
227
for flow in await self .get_workflows_data (w_args )]
204
228
if not w_ids :
205
229
return [{
206
230
'response' : (False , 'No matching workflows' )}]
207
231
# Pass the request to the workflow GraphQL endpoints
208
- _ , variables , _ , _ = info .context .get ('graphql_params' )
209
-
232
+ _ , variables , _ , _ = info .context .get ( # type: ignore[union-attr]
233
+ 'graphql_params'
234
+ )
210
235
# Create a modified request string,
211
236
# containing only the current mutation/field.
212
237
operation_ast = deepcopy (info .operation )
@@ -216,14 +241,20 @@ async def mutator(self, info, *m_args):
216
241
'request_string' : print_ast (operation_ast ),
217
242
'variables' : variables ,
218
243
}
219
- return await self .workflows_mgr .multi_request (
244
+ return await self .workflows_mgr .multi_request ( # type: ignore # TODO
220
245
'graphql' , w_ids , graphql_args , req_meta = req_meta
221
246
)
222
247
223
- async def service (self , info , * m_args ):
248
+ async def service (
249
+ self ,
250
+ info : 'ResolveInfo' ,
251
+ command : str ,
252
+ workflows : Iterable ['Tokens' ],
253
+ kwargs : Dict [str , Any ]
254
+ ) -> List [Union [bool , str ]]:
224
255
return await Services .play (
225
- m_args [ 1 ][ ' workflows' ] ,
226
- m_args [ 2 ] ,
256
+ workflows ,
257
+ kwargs ,
227
258
self .workflows_mgr ,
228
259
log = self .log
229
260
)
0 commit comments