|
25 | 25 | import rdflib
|
26 | 26 | import hashlib
|
27 | 27 | from typing import Union, Any, cast, Callable, Dict, Tuple, IO
|
| 28 | +try: |
| 29 | + from galaxy.tools import deps |
| 30 | +except ImportError: |
| 31 | + deps = None |
28 | 32 |
|
29 | 33 | _logger = logging.getLogger("cwltool")
|
30 | 34 |
|
31 | 35 | defaultStreamHandler = logging.StreamHandler()
|
32 | 36 | _logger.addHandler(defaultStreamHandler)
|
33 | 37 | _logger.setLevel(logging.INFO)
|
34 | 38 |
|
| 39 | +if deps is not None: |
| 40 | + deps.log = _logger |
| 41 | + |
35 | 42 |
|
36 | 43 | def arg_parser(): # type: () -> argparse.ArgumentParser
|
37 | 44 | parser = argparse.ArgumentParser(description='Reference executor for Common Workflow Language')
|
@@ -129,6 +136,9 @@ def arg_parser(): # type: () -> argparse.ArgumentParser
|
129 | 136 | exgroup.add_argument("--quiet", action="store_true", help="Only print warnings and errors.")
|
130 | 137 | exgroup.add_argument("--debug", action="store_true", help="Print even more logging")
|
131 | 138 |
|
| 139 | + parser.add_argument("--dependency-resolvers-configuration", help="Dependency resolver configuration file describing how to adapt 'Dependency' hints to current system.", default=None) |
| 140 | + parser.add_argument("--dependencies-directory", help="Defaut root directory used by dependency resolvers configuration.", default=None) |
| 141 | + |
132 | 142 | parser.add_argument("--tool-help", action="store_true", help="Print command line help for tool")
|
133 | 143 |
|
134 | 144 | parser.add_argument("--relative-deps", choices=['primary', 'cwd'], default="primary",
|
@@ -544,6 +554,12 @@ def main(argsl=None,
|
544 | 554 | if not hasattr(args, k):
|
545 | 555 | setattr(args, k, v)
|
546 | 556 |
|
| 557 | + if deps is not None: |
| 558 | + tool_dependencies_configuartion = DependenciesConfigruation(args) |
| 559 | + tool_dependency_manager = deps.build_dependency_manager(tool_dependencies_configuartion) |
| 560 | + else: |
| 561 | + tool_dependency_manager = None |
| 562 | + |
547 | 563 | if args.quiet:
|
548 | 564 | _logger.setLevel(logging.WARN)
|
549 | 565 | if args.debug:
|
@@ -588,8 +604,11 @@ def main(argsl=None,
|
588 | 604 | printdot(uri, processobj, document_loader.ctx, stdout)
|
589 | 605 | return 0
|
590 | 606 |
|
| 607 | + make_tool_kwargs = { |
| 608 | + 'tool_dependency_manager': tool_dependency_manager, |
| 609 | + } |
591 | 610 | tool = make_tool(document_loader, avsc_names, processobj, metadata,
|
592 |
| - uri, makeTool, {}) |
| 611 | + uri, makeTool, make_tool_kwargs) |
593 | 612 | except (validate.ValidationException) as exc:
|
594 | 613 | _logger.error(u"Tool definition failed validation:\n%s", exc,
|
595 | 614 | exc_info=(exc if args.debug else False))
|
@@ -676,5 +695,20 @@ def main(argsl=None,
|
676 | 695 | _logger.removeHandler(stderr_handler)
|
677 | 696 | _logger.addHandler(defaultStreamHandler)
|
678 | 697 |
|
| 698 | + |
| 699 | +class DependenciesConfigruation(object): |
| 700 | + |
| 701 | + def __init__(self, args): |
| 702 | + conf_file = getattr(args, "dependency_resolvers_configuration", None) |
| 703 | + tool_dependency_dir = getattr(args, "dependencies_directory", None) |
| 704 | + if conf_file is not None and os.path.exists(conf_file): |
| 705 | + self.use_tool_dependencies = True |
| 706 | + if not tool_dependency_dir: |
| 707 | + tool_dependency_dir = os.path.abspath(os.path.dirname(conf_file)) |
| 708 | + self.tool_dependency_dir = tool_dependency_dir |
| 709 | + self.dependency_resolvers_config_file = conf_file |
| 710 | + else: |
| 711 | + self.use_tool_dependencies = False |
| 712 | + |
679 | 713 | if __name__ == "__main__":
|
680 | 714 | sys.exit(main(sys.argv[1:]))
|
0 commit comments