|
30 | 30 | from . import draft2tool
|
31 | 31 | from .builder import adjustFileObjs, adjustDirObjs
|
32 | 32 | from .stdfsaccess import StdFsAccess
|
| 33 | +from .pack import pack |
33 | 34 |
|
34 | 35 | _logger = logging.getLogger("cwltool")
|
35 | 36 |
|
@@ -495,74 +496,9 @@ def makeRelative(ob):
|
495 | 496 |
|
496 | 497 | stdout.write(json.dumps(deps, indent=4))
|
497 | 498 |
|
498 |
| -def flatten_deps(d, files): # type: (Any, Set[Text]) -> None |
499 |
| - if isinstance(d, list): |
500 |
| - for s in d: |
501 |
| - flatten_deps(s, files) |
502 |
| - elif isinstance(d, dict): |
503 |
| - files.add(d["location"]) |
504 |
| - if "secondaryFiles" in d: |
505 |
| - flatten_deps(d["secondaryFiles"], files) |
506 |
| - |
507 |
| -def find_run(d, runs): # type: (Any, Set[Text]) -> None |
508 |
| - if isinstance(d, list): |
509 |
| - for s in d: |
510 |
| - find_run(s, runs) |
511 |
| - elif isinstance(d, dict): |
512 |
| - if "run" in d and isinstance(d["run"], (Text, Text)): |
513 |
| - runs.add(d["run"]) |
514 |
| - for s in d.values(): |
515 |
| - find_run(s, runs) |
516 |
| - |
517 |
| -def replace_refs(d, rewrite, stem, newstem): |
518 |
| - # type: (Any, Dict[Text, Text], Text, Text) -> None |
519 |
| - if isinstance(d, list): |
520 |
| - for s,v in enumerate(d): |
521 |
| - if isinstance(v, (str, Text)) and v.startswith(stem): |
522 |
| - d[s] = newstem + v[len(stem):] |
523 |
| - else: |
524 |
| - replace_refs(v, rewrite, stem, newstem) |
525 |
| - elif isinstance(d, dict): |
526 |
| - if "run" in d and isinstance(d["run"], (str, Text)): |
527 |
| - d["run"] = rewrite[d["run"]] |
528 |
| - for s,v in d.items(): |
529 |
| - if isinstance(v, (str, Text)) and v.startswith(stem): |
530 |
| - d[s] = newstem + v[len(stem):] |
531 |
| - replace_refs(v, rewrite, stem, newstem) |
532 |
| - |
533 | 499 | def print_pack(document_loader, processobj, uri, metadata):
|
534 |
| - # type: (Loader, Any, Text, Dict[Text, Text]) -> Text |
535 |
| - def loadref(b, u): |
536 |
| - # type: (Text, Text) -> Union[Dict, List, Text] |
537 |
| - return document_loader.resolve_ref(u, base_url=b)[0] |
538 |
| - deps = scandeps(uri, processobj, set(("run",)), set(), loadref) |
539 |
| - |
540 |
| - fdeps = set((uri,)) |
541 |
| - flatten_deps(deps, fdeps) |
542 |
| - |
543 |
| - runs = set() # type: Set[Text] |
544 |
| - for f in fdeps: |
545 |
| - find_run(document_loader.idx[f], runs) |
546 |
| - |
547 |
| - rewrite = {} |
548 |
| - if isinstance(processobj, list): |
549 |
| - for p in processobj: |
550 |
| - rewrite[p["id"]] = "#" + shortname(p["id"]) |
551 |
| - else: |
552 |
| - rewrite[uri] = "#main" |
553 |
| - |
554 |
| - for r in runs: |
555 |
| - rewrite[r] = "#" + shortname(r) |
556 |
| - |
557 |
| - packed = {"$graph": [], "cwlVersion": metadata["cwlVersion"] |
558 |
| - } # type: Dict[Text, Any] |
559 |
| - for r,v in rewrite.items(): |
560 |
| - dc = cast(Dict[Text, Any], copy.deepcopy(document_loader.idx[r])) |
561 |
| - dc["id"] = v |
562 |
| - dc["name"] = v |
563 |
| - replace_refs(dc, rewrite, r+"/" if "#" in r else r+"#", v+"/") |
564 |
| - packed["$graph"].append(dc) |
565 |
| - |
| 500 | + # type: (Loader, Union[Dict[unicode, Any], List[Dict[unicode, Any]]], unicode, Dict[unicode, Any]) -> str |
| 501 | + packed = pack(document_loader, processobj, uri, metadata) |
566 | 502 | if len(packed["$graph"]) > 1:
|
567 | 503 | return json.dumps(packed, indent=4)
|
568 | 504 | else:
|
|
0 commit comments