19
19
20
20
_logger = logging .getLogger ("cwltool" )
21
21
22
- def fetch_document (argsworkflow ):
23
- # type: (Union[Text, Text, dict[Text, Any]]) -> Tuple[Loader, Dict[Text, Any], Text]
22
+ def fetch_document (argsworkflow , resolver = None ):
23
+ # type: (Union[Text, dict[Text, Any]], Any ) -> Tuple[Loader, Dict[Text, Any], Text]
24
24
"""Retrieve a CWL document."""
25
25
document_loader = Loader ({"cwl" : "https://w3id.org/cwl/cwl#" , "id" : "@id" })
26
26
@@ -30,8 +30,17 @@ def fetch_document(argsworkflow):
30
30
split = urlparse .urlsplit (argsworkflow )
31
31
if split .scheme :
32
32
uri = argsworkflow
33
- else :
33
+ elif os . path . exists ( os . path . abspath ( argsworkflow )) :
34
34
uri = "file://" + os .path .abspath (argsworkflow )
35
+ elif resolver :
36
+ uri = resolver (document_loader , argsworkflow )
37
+
38
+ if uri is None :
39
+ raise ValidationException ("Not found: '%s'" % argsworkflow )
40
+
41
+ if argsworkflow != uri :
42
+ _logger .info ("Resolved '%s' to '%s'" , argsworkflow , uri )
43
+
35
44
fileuri = urlparse .urldefrag (uri )[0 ]
36
45
workflowobj = document_loader .fetch (fileuri )
37
46
elif isinstance (argsworkflow , dict ):
@@ -193,9 +202,10 @@ def make_tool(document_loader, avsc_names, metadata, uri, makeTool, kwargs):
193
202
194
203
def load_tool (argsworkflow , makeTool , kwargs = None ,
195
204
enable_dev = False ,
196
- strict = True ):
197
- # type: (Union[Text, dict[Text,Any]], Callable[...,Process], Dict[AnyStr, Any], bool, bool) -> Any
198
- document_loader , workflowobj , uri = fetch_document (argsworkflow )
205
+ strict = True ,
206
+ resolver = None ):
207
+ # type: (Union[Text, dict[Text, Any]], Callable[...,Process], Dict[AnyStr, Any], bool, bool, Any) -> Any
208
+ document_loader , workflowobj , uri = fetch_document (argsworkflow , resolver = resolver )
199
209
document_loader , avsc_names , processobj , metadata , uri = validate_document (
200
210
document_loader , workflowobj , uri , enable_dev = enable_dev ,
201
211
strict = strict )
0 commit comments