|
32 | 32 | ResolveType, |
33 | 33 | json_dumps, |
34 | 34 | ) |
| 35 | +from schema_salad.fetcher import Fetcher |
35 | 36 |
|
36 | 37 | from ruamel.yaml.comments import CommentedMap, CommentedSeq |
37 | 38 |
|
@@ -318,8 +319,11 @@ def fast_parser( |
318 | 319 | fileuri: Optional[str], |
319 | 320 | uri: str, |
320 | 321 | loadingContext: LoadingContext, |
| 322 | + fetcher: Fetcher, |
321 | 323 | ) -> Tuple[Union[CommentedMap, CommentedSeq], CommentedMap]: |
322 | | - lopt = cwl_v1_2.LoadingOptions(idx=loadingContext.codegen_idx, fileuri=fileuri) |
| 324 | + lopt = cwl_v1_2.LoadingOptions( |
| 325 | + idx=loadingContext.codegen_idx, fileuri=fileuri, fetcher=fetcher |
| 326 | + ) |
323 | 327 |
|
324 | 328 | if uri not in loadingContext.codegen_idx: |
325 | 329 | cwl_v1_2.load_document_with_metadata( |
@@ -359,18 +363,26 @@ def fast_parser( |
359 | 363 | # Need to match the document loader's index with the fast parser index |
360 | 364 | # Get the base URI (no fragments) for documents that use $graph |
361 | 365 | nofrag = urllib.parse.urldefrag(uri)[0] |
362 | | - objects, loadopt = loadingContext.codegen_idx[nofrag] |
363 | | - fileobj = cmap( |
364 | | - cast( |
365 | | - Union[int, float, str, Dict[str, Any], List[Any], None], |
366 | | - cwl_v1_2.save(objects, relative_uris=False), |
| 366 | + |
| 367 | + flag = "fastparser-idx-from:" + nofrag |
| 368 | + if not loadingContext.loader.idx.get(flag): |
| 369 | + objects, loadopt = loadingContext.codegen_idx[nofrag] |
| 370 | + fileobj = cmap( |
| 371 | + cast( |
| 372 | + Union[int, float, str, Dict[str, Any], List[Any], None], |
| 373 | + cwl_v1_2.save(objects, relative_uris=False), |
| 374 | + ) |
367 | 375 | ) |
368 | | - ) |
369 | | - visit_class( |
370 | | - fileobj, |
371 | | - ("CommandLineTool", "Workflow", "ExpressionTool"), |
372 | | - partial(update_index, loadingContext.loader), |
373 | | - ) |
| 376 | + visit_class( |
| 377 | + fileobj, |
| 378 | + ("CommandLineTool", "Workflow", "ExpressionTool"), |
| 379 | + partial(update_index, loadingContext.loader), |
| 380 | + ) |
| 381 | + loadingContext.loader.idx[flag] = flag |
| 382 | + for u in lopt.imports: |
| 383 | + loadingContext.loader.idx["import:" + u] = "import:" + u |
| 384 | + for u in lopt.includes: |
| 385 | + loadingContext.loader.idx["include:" + u] = "include:" + u |
374 | 386 |
|
375 | 387 | return cast( |
376 | 388 | Union[CommentedMap, CommentedSeq], |
@@ -519,7 +531,9 @@ def resolve_and_validate_document( |
519 | 531 | # |
520 | 532 | processobj, metadata = document_loader.resolve_ref(uri) |
521 | 533 | elif loadingContext.fast_parser: |
522 | | - processobj, metadata = fast_parser(workflowobj, fileuri, uri, loadingContext) |
| 534 | + processobj, metadata = fast_parser( |
| 535 | + workflowobj, fileuri, uri, loadingContext, document_loader.fetcher |
| 536 | + ) |
523 | 537 | else: |
524 | 538 | document_loader.resolve_all(workflowobj, fileuri) |
525 | 539 | processobj, metadata = document_loader.resolve_ref(uri) |
@@ -594,7 +608,9 @@ def make_tool( |
594 | 608 | and isinstance(uri, str) |
595 | 609 | and not loadingContext.skip_resolve_all |
596 | 610 | ): |
597 | | - resolveduri, metadata = fast_parser(None, None, uri, loadingContext) |
| 611 | + resolveduri, metadata = fast_parser( |
| 612 | + None, None, uri, loadingContext, loadingContext.loader.fetcher |
| 613 | + ) |
598 | 614 | else: |
599 | 615 | resolveduri, metadata = loadingContext.loader.resolve_ref(uri) |
600 | 616 |
|
|
0 commit comments