38
38
u"id" : u"@id"
39
39
}
40
40
41
- _cwldl = get_schema ("v1.0" )[0 ]
42
- overrides_ctx = copy .copy (_cwldl .ctx )
43
- overrides_ctx .update ({
41
+
42
+ overrides_ctx = {
44
43
u"overrideTarget" : {u"@type" : u"@id" },
45
44
u"cwltool" : "http://commonwl.org/cwltool#" ,
46
45
u"overrides" : {
52
51
"@id" : "cwltool:override" ,
53
52
"mapSubject" : "class"
54
53
}
55
- })
54
+ }
56
55
57
56
def resolve_tool_uri (argsworkflow , # type: Union[Text, Dict[Text, Any]]
58
- resolver = None , # type: Callable[[Loader, Union[Text, Dict[Text, Any]]], Text]
57
+ resolver = None , # type: Callable[[Loader, Union[Text, Dict[Text, Any]]], Text]
58
+ fetcher_constructor = None ,
59
+ # type: Callable[[Dict[Text, Text], requests.sessions.Session], Fetcher]
60
+ document_loader = None # type: Loader
59
61
):
60
62
# type: (...) -> Tuple[Text, Text]
61
63
@@ -67,6 +69,8 @@ def resolve_tool_uri(argsworkflow, # type: Union[Text, Dict[Text, Any]]
67
69
elif os .path .exists (os .path .abspath (argsworkflow )):
68
70
uri = file_uri (str (os .path .abspath (argsworkflow )))
69
71
elif resolver :
72
+ if document_loader is None :
73
+ document_loader = Loader (jobloaderctx , fetcher_constructor = fetcher_constructor ) # type: ignore
70
74
uri = resolver (document_loader , argsworkflow )
71
75
72
76
if uri is None :
@@ -76,7 +80,7 @@ def resolve_tool_uri(argsworkflow, # type: Union[Text, Dict[Text, Any]]
76
80
_logger .info ("Resolved '%s' to '%s'" , argsworkflow , uri )
77
81
78
82
fileuri = urllib .parse .urldefrag (uri )[0 ]
79
- return ( uri , fileuri )
83
+ return uri , fileuri
80
84
81
85
82
86
def fetch_document (argsworkflow , # type: Union[Text, Dict[Text, Any]]
@@ -92,7 +96,7 @@ def fetch_document(argsworkflow, # type: Union[Text, Dict[Text, Any]]
92
96
uri = None # type: Text
93
97
workflowobj = None # type: CommentedMap
94
98
if isinstance (argsworkflow , string_types ):
95
- uri , fileuri = resolve_tool_uri (argsworkflow , resolver )
99
+ uri , fileuri = resolve_tool_uri (argsworkflow , resolver = resolver , document_loader = document_loader )
96
100
workflowobj = document_loader .fetch (fileuri )
97
101
elif isinstance (argsworkflow , dict ):
98
102
uri = "#" + Text (id (argsworkflow ))
@@ -190,7 +194,7 @@ def validate_document(document_loader, # type: Loader
190
194
del cast (dict , jobobj )["https://w3id.org/cwl/cwl#tool" ]
191
195
192
196
if "http://commonwl.org/cwltool#overrides" in jobobj :
193
- overrides .extend (resolve_overrides (jobobj , uri ))
197
+ overrides .extend (resolve_overrides (jobobj , uri , uri ))
194
198
del jobobj ["http://commonwl.org/cwltool#overrides" ]
195
199
196
200
workflowobj = fetch_document (uri , fetcher_constructor = fetcher_constructor )[1 ]
@@ -329,15 +333,15 @@ def load_tool(argsworkflow, # type: Union[Text, Dict[Text, Any]]
329
333
return make_tool (document_loader , avsc_names , metadata , uri ,
330
334
makeTool , kwargs if kwargs else {})
331
335
332
- def resolve_overrides (ov , baseurl ): # type: (CommentedMap, Text) -> List[Dict[Text, Any]]
336
+ def resolve_overrides (ov , ov_uri , baseurl ): # type: (CommentedMap, Text) -> List[Dict[Text, Any]]
333
337
ovloader = Loader (overrides_ctx )
334
- del ov ["id" ]
335
- del ov ["name" ]
336
338
ret , _ = ovloader .resolve_all (ov , baseurl )
337
339
if not isinstance (ret , CommentedMap ):
338
340
raise Exception ("Expected CommentedMap, got %s" % type (ret ))
341
+ cwl_docloader = get_schema ("v1.0" )[0 ]
342
+ cwl_docloader .resolve_all (ret , ov_uri )
339
343
return ret ["overrides" ]
340
344
341
345
def load_overrides (ov , base_url ): # type: (Text, Text) -> List[Dict[Text, Any]]
342
346
ovloader = Loader (overrides_ctx )
343
- return resolve_overrides (ovloader .fetch (ov ), base_url )
347
+ return resolve_overrides (ovloader .fetch (ov ), ov , base_url )
0 commit comments