@@ -97,7 +97,7 @@ def match_types(sinktype, src, iid, inputobj, linkMerge, valueFrom):
9797
9898
9999def check_types (srctype , sinktype , linkMerge , valueFrom ):
100- # type: (Union[List[Text],Text], Union[List[Text],Text] , Text, Text) -> Text
100+ # type: (Any, Any , Text, Text) -> Text
101101 """Check if the source and sink types are "pass", "warning", or "exception".
102102 """
103103
@@ -110,18 +110,25 @@ def check_types(srctype, sinktype, linkMerge, valueFrom):
110110 return "warning"
111111 else :
112112 return "exception"
113+ elif linkMerge == "merge_nested" :
114+ return check_types ({"items" : srctype , "type" : "array" }, sinktype , None , None )
115+ elif linkMerge == "merge_flattened" :
116+ return check_types (merge_flatten_type (srctype ), sinktype , None , None )
113117 else :
114- if not isinstance (sinktype , dict ):
115- return "exception"
116- elif linkMerge == "merge_nested" :
117- return check_types (srctype , sinktype ["items" ], None , None )
118- elif linkMerge == "merge_flattened" :
119- if not isinstance (srctype , dict ):
120- return check_types (srctype , sinktype ["items" ], None , None )
121- else :
122- return check_types (srctype , sinktype , None , None )
123- else :
124- raise WorkflowException (u"Unrecognized linkMerge enum '%s'" % linkMerge )
118+ raise WorkflowException (u"Unrecognized linkMerge enu_m '%s'" % linkMerge )
119+
120+
121+ def merge_flatten_type (src ):
122+ # type: (Any) -> Any
123+ """Return the merge flattened type of the source type
124+ """
125+
126+ if isinstance (src , list ):
127+ return [merge_flatten_type (t ) for t in src ]
128+ elif isinstance (src , dict ) and src .get ("type" ) == "array" :
129+ return src
130+ else :
131+ return {"items" : src , "type" : "array" }
125132
126133
127134def can_assign_src_to_sink (src , sink , strict = False ): # type: (Any, Any, bool) -> bool
@@ -581,7 +588,7 @@ def static_checker(workflow_inputs, workflow_outputs, step_inputs, step_outputs)
581588 " with sink '%s' of type %s"
582589 % (shortname (sink ["id" ]), json .dumps (sink ["type" ])))
583590 if linkMerge :
584- msg += "\n " + SourceLine (sink ).makeError (" sink has linkMerge method %s" % linkMerge )
591+ msg += "\n " + SourceLine (sink ).makeError (" source has linkMerge method %s" % linkMerge )
585592 warning_msgs .append (msg )
586593 for exception in exceptions :
587594 src = exception .src
@@ -594,7 +601,7 @@ def static_checker(workflow_inputs, workflow_outputs, step_inputs, step_outputs)
594601 " with sink '%s' of type %s"
595602 % (shortname (sink ["id" ]), json .dumps (sink ["type" ])))
596603 if linkMerge :
597- msg += "\n " + SourceLine (sink ).makeError (" sink has linkMerge method %s" % linkMerge )
604+ msg += "\n " + SourceLine (sink ).makeError (" source has linkMerge method %s" % linkMerge )
598605 exception_msgs .append (msg )
599606
600607 for sink in step_inputs :
0 commit comments