@@ -44,7 +44,7 @@ def fetch_document(argsworkflow):
44
44
45
45
def validate_document (document_loader , workflowobj , uri ,
46
46
enable_dev = False , strict = True , preprocess_only = False ):
47
- # type: (Loader, Dict[unicode, Any], unicode, bool, bool, bool) -> Tuple[Loader, Names, Dict[unicode, Any], Dict[unicode, Any], unicode]
47
+ # type: (Loader, Dict[unicode, Any], unicode, bool, bool, bool) -> Tuple[Loader, Names, Union[ Dict[unicode, Any], List[Dict[unicode, Any]] ], Dict[unicode, Any], unicode]
48
48
"""Validate a CWL document."""
49
49
jobobj = None
50
50
if "cwl:tool" in workflowobj :
@@ -83,10 +83,13 @@ def validate_document(document_loader, workflowobj, uri,
83
83
84
84
workflowobj ["id" ] = fileuri
85
85
processobj , metadata = document_loader .resolve_all (workflowobj , fileuri )
86
- if not isinstance (processobj , dict ):
87
- raise validate .ValidationException ("Workflow must be a dict." )
86
+ if not isinstance (processobj , ( dict , list ) ):
87
+ raise validate .ValidationException ("Workflow must be a dict or list ." )
88
88
89
89
if not metadata :
90
+ if not isinstance (processobj , dict ):
91
+ raise validate .ValidationException (
92
+ "Draft-2 workflows must be a dict." )
90
93
metadata = {"$namespaces" : processobj .get ("$namespaces" , {}),
91
94
"$schemas" : processobj .get ("$schemas" , []),
92
95
"cwlVersion" : processobj ["cwlVersion" ]}
@@ -106,9 +109,8 @@ def validate_document(document_loader, workflowobj, uri,
106
109
return document_loader , avsc_names , processobj , metadata , uri
107
110
108
111
109
- def make_tool (document_loader , avsc_names , processobj , metadata , uri , makeTool ,
110
- kwargs ):
111
- # type: (Loader, Names, Dict[unicode, Any], Dict[unicode, Any], unicode, Callable[..., Process], Dict[str, Any]) -> Process
112
+ def make_tool (document_loader , avsc_names , metadata , uri , makeTool , kwargs ):
113
+ # type: (Loader, Names, Dict[unicode, Any], unicode, Callable[..., Process], Dict[str, Any]) -> Process
112
114
"""Make a Python CWL object."""
113
115
resolveduri = document_loader .resolve_ref (uri )[0 ]
114
116
@@ -122,7 +124,7 @@ def make_tool(document_loader, avsc_names, processobj, metadata, uri, makeTool,
122
124
urlparse .urldefrag (i ["id" ])[1 ] for i in resolveduri
123
125
if "id" in i ))
124
126
else :
125
- processobj = cast ( Dict [ unicode , Any ], resolveduri )
127
+ processobj = resolveduri
126
128
127
129
kwargs = kwargs .copy ()
128
130
kwargs .update ({
@@ -150,5 +152,5 @@ def load_tool(argsworkflow, makeTool, kwargs=None,
150
152
document_loader , avsc_names , processobj , metadata , uri = validate_document (
151
153
document_loader , workflowobj , uri , enable_dev = enable_dev ,
152
154
strict = strict )
153
- return make_tool (document_loader , avsc_names , processobj , metadata , uri ,
155
+ return make_tool (document_loader , avsc_names , metadata , uri ,
154
156
makeTool , kwargs if kwargs else {})
0 commit comments