54
54
}
55
55
})
56
56
57
+ def resolve_tool_uri (argsworkflow , # type: Union[Text, Dict[Text, Any]]
58
+ resolver = None , # type: Callable[[Loader, Union[Text, Dict[Text, Any]]], Text]
59
+ ):
60
+ # type: (...) -> Tuple[Text, Text]
61
+
62
+ uri = None # type: Text
63
+ split = urllib .parse .urlsplit (argsworkflow )
64
+ # In case of Windows path, urlsplit misjudge Drive letters as scheme, here we are skipping that
65
+ if split .scheme and split .scheme in [u'http' ,u'https' ,u'file' ]:
66
+ uri = argsworkflow
67
+ elif os .path .exists (os .path .abspath (argsworkflow )):
68
+ uri = file_uri (str (os .path .abspath (argsworkflow )))
69
+ elif resolver :
70
+ uri = resolver (document_loader , argsworkflow )
71
+
72
+ if uri is None :
73
+ raise ValidationException ("Not found: '%s'" % argsworkflow )
74
+
75
+ if argsworkflow != uri :
76
+ _logger .info ("Resolved '%s' to '%s'" , argsworkflow , uri )
77
+
78
+ fileuri = urllib .parse .urldefrag (uri )[0 ]
79
+ return (uri , fileuri )
80
+
81
+
57
82
def fetch_document (argsworkflow , # type: Union[Text, Dict[Text, Any]]
58
83
resolver = None , # type: Callable[[Loader, Union[Text, Dict[Text, Any]]], Text]
59
84
fetcher_constructor = None
@@ -67,22 +92,7 @@ def fetch_document(argsworkflow, # type: Union[Text, Dict[Text, Any]]
67
92
uri = None # type: Text
68
93
workflowobj = None # type: CommentedMap
69
94
if isinstance (argsworkflow , string_types ):
70
- split = urllib .parse .urlsplit (argsworkflow )
71
- # In case of Windows path, urlsplit misjudge Drive letters as scheme, here we are skipping that
72
- if split .scheme and split .scheme in [u'http' ,u'https' ,u'file' ]:
73
- uri = argsworkflow
74
- elif os .path .exists (os .path .abspath (argsworkflow )):
75
- uri = file_uri (str (os .path .abspath (argsworkflow )))
76
- elif resolver :
77
- uri = resolver (document_loader , argsworkflow )
78
-
79
- if uri is None :
80
- raise ValidationException ("Not found: '%s'" % argsworkflow )
81
-
82
- if argsworkflow != uri :
83
- _logger .info ("Resolved '%s' to '%s'" , argsworkflow , uri )
84
-
85
- fileuri = urllib .parse .urldefrag (uri )[0 ]
95
+ uri , fileuri = resolve_tool_uri (argsworkflow , resolver )
86
96
workflowobj = document_loader .fetch (fileuri )
87
97
elif isinstance (argsworkflow , dict ):
88
98
uri = "#" + Text (id (argsworkflow ))
@@ -326,6 +336,6 @@ def resolve_overrides(ov, baseurl): # type: (CommentedMap, Text) -> List[Dict[T
326
336
raise Exception ("Expected CommentedMap, got %s" % type (ret ))
327
337
return ret ["overrides" ]
328
338
329
- def load_overrides (ov ): # type: (Text) -> List[Dict[Text, Any]]
339
+ def load_overrides (ov , base_url ): # type: (Text, Text) -> List[Dict[Text, Any]]
330
340
ovloader = Loader (overrides_ctx )
331
- return resolve_overrides (ovloader .fetch (ov ), ov )
341
+ return resolve_overrides (ovloader .fetch (ov ), base_url )
0 commit comments