11"""GraphQL payload data mappers for project operations."""
22
3- from typing import Dict
3+ from typing import Dict , Union
4+
5+ from kili .domain .project import Workflow , WorkflowStepCreate , WorkflowStepUpdate
46
57from .types import ProjectWorkflowDataKiliAPIGatewayInput
68
@@ -9,7 +11,41 @@ def project_input_mapper(data: ProjectWorkflowDataKiliAPIGatewayInput) -> Dict:
911 """Build the GraphQL ProjectWorfklowData variable to be sent in an operation."""
1012 return {
1113 "enforceStepSeparation" : data .enforce_step_separation ,
14+ "steps" : {
15+ "creates" : [update_step_mapper (step ) for step in data .create_steps ]
16+ if data .create_steps
17+ else [],
18+ "updates" : [update_step_mapper (step ) for step in data .update_steps ]
19+ if data .update_steps
20+ else [],
21+ "deletes" : data .delete_steps if data .delete_steps else [],
22+ },
23+ }
24+
25+
26+ def create_project_workflow_mapper (data : Workflow ) -> Dict :
27+ """Build the GraphQL Workflow variable to be sent in an operation."""
28+ return {
29+ "enforceStepSeparation" : data ["enforce_step_separation" ],
30+ "steps" : [update_step_mapper (step ) for step in data ["steps" ]] if data ["steps" ] else [],
31+ }
32+
33+
34+ def update_step_mapper (data : Union [WorkflowStepCreate , WorkflowStepUpdate ]) -> Dict :
35+ """Build the GraphQL create StepData variable to be sent in an operation."""
36+ step = {
37+ "id" : data ["id" ] if "id" in data else None ,
38+ "name" : data ["name" ] if "name" in data else None ,
39+ "consensusCoverage" : data ["consensus_coverage" ] if "consensus_coverage" in data else None ,
40+ "numberOfExpectedLabelsForConsensus" : data ["number_of_expected_labels_for_consensus" ]
41+ if "number_of_expected_labels_for_consensus" in data
42+ else None ,
43+ "order" : data ["order" ] if "order" in data else None ,
44+ "stepCoverage" : data ["step_coverage" ] if "step_coverage" in data else None ,
45+ "type" : data ["type" ] if "type" in data else None ,
46+ "assignees" : data ["assignees" ] if "assignees" in data else None ,
1247 }
48+ return {k : v for k , v in step .items () if v is not None }
1349
1450
1551def step_data_mapper (data : Dict ) -> Dict :
0 commit comments