1
1
import os
2
- from typing import Any , Dict , Optional
2
+ from typing import Any , Dict , List , Optional
3
3
4
4
import yaml
5
5
14
14
assert _JOB_DEFINITIONS
15
15
16
16
_WORKFLOW_DEFINITION_ID_FORMAT : str = "workflow-00000000-0000-0000-0000-{id:012d}"
17
+ _RUNNING_WORKFLOW_ID_FORMAT : str = "r-workflow-00000000-0000-0000-0000-{id:012d}"
18
+ _RUNNING_WORKFLOW_STEP_ID_FORMAT : str = (
19
+ "r-workflow-step-00000000-0000-0000-0000-{id:012d}"
20
+ )
17
21
18
22
19
23
class UnitTestDatabaseAdapter (DatabaseAdapter ):
@@ -25,23 +29,72 @@ def __init__(self):
25
29
super ().__init__ ()
26
30
# A map of workflow definitions, keyed by workflow definition ID.
27
31
self ._workflow_definitions : Dict [str , Dict [str , Any ]] = {}
32
+ self ._running_workflow : Dict [str , Dict [str , Any ]] = {}
33
+ self ._running_workflow_steps : Dict [str , Dict [str , Any ]] = {}
28
34
29
35
def save_workflow (self , * , workflow_definition : Dict [str , Any ]) -> str :
30
36
next_id : int = len (self ._workflow_definitions ) + 1
31
37
workflow_definition_id : str = _WORKFLOW_DEFINITION_ID_FORMAT .format (id = next_id )
32
38
self ._workflow_definitions [workflow_definition_id ] = workflow_definition
33
- return workflow_definition_id
39
+ return { "id" : workflow_definition_id }
34
40
35
- def get_workflow (self , * , workflow_definition_id : str ) -> Optional [Dict [str , Any ]]:
36
- return self ._workflow_definitions .get (workflow_definition_id , None )
41
+ def get_workflow (self , * , workflow_definition_id : str ) -> Dict [str , Any ]:
42
+ if workflow_definition_id not in self ._workflow_definitions :
43
+ return {}
44
+ return {"workflow" : self ._workflow_definitions [workflow_definition_id ]}
37
45
38
- def get_workflow_by_name (
39
- self , * , name : str , version : str
40
- ) -> Optional [Dict [str , Any ]]:
41
- return next (
42
- (wd for wd in self ._workflow_definitions .values () if wd ["name" ] == name ),
43
- None ,
46
+ def get_workflow_by_name (self , * , name : str , version : str ) -> Dict [str , Any ]:
47
+ item = {}
48
+ for wfid , value in self ._workflow_definitions .items ():
49
+ if value ["name" ] == name :
50
+ item = {"id" : wfid , "workflow" : value }
51
+ return item
52
+
53
+ def create_running_workflow (self , * , workflow_definition_id : str ) -> str :
54
+ next_id : int = len (self ._running_workflow ) + 1
55
+ running_workflow_id : str = _RUNNING_WORKFLOW_ID_FORMAT .format (id = next_id )
56
+ record = {"done" : False , "success" : False , "workflow" : workflow_definition_id }
57
+ self ._running_workflow [running_workflow_id ] = record
58
+ return {"id" : running_workflow_id }
59
+
60
+ def get_running_workflow (self , * , running_workflow_id : str ) -> Dict [str , Any ]:
61
+ if running_workflow_id not in self ._running_workflow :
62
+ return {}
63
+ return {"running-workflow" : self ._running_workflow [running_workflow_id ]}
64
+
65
+ def create_running_workflow_step (self , * , running_workflow_id : str ) -> str :
66
+ next_id : int = len (self ._running_workflow_steps ) + 1
67
+ running_workflow_step_id : str = _RUNNING_WORKFLOW_STEP_ID_FORMAT .format (
68
+ id = next_id
44
69
)
70
+ record = {
71
+ "done" : False ,
72
+ "success" : False ,
73
+ "running-workflow" : running_workflow_id ,
74
+ }
75
+ self ._running_workflow_steps [running_workflow_step_id ] = record
76
+ return {"id" : running_workflow_step_id }
77
+
78
+ def get_running_workflow_step (
79
+ self , * , running_workflow_step_id : str
80
+ ) -> Dict [str , Any ]:
81
+ if running_workflow_step_id not in self ._running_workflow_steps :
82
+ return {}
83
+ return {"id" : self ._running_workflow_steps [running_workflow_step_id ]}
84
+
85
+ def get_running_workflow_steps (
86
+ self , * , running_workflow_id : str
87
+ ) -> List [Dict [str , Any ]]:
88
+ steps = []
89
+ for key , value in self ._running_workflow_steps .items ():
90
+ if value ["running-workflow" ] == running_workflow_id :
91
+ item = {"running-workflow-step" : value , "id" : key }
92
+ steps .append (item )
93
+ count = len (steps )
94
+ response = {"count" : len (steps )}
95
+ if count :
96
+ response ["running-workflow-steps" ] = steps
97
+ return response
45
98
46
99
def get_job (
47
100
self , * , collection : str , job : str , version : str
0 commit comments