Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/planemo/engine/galaxy.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 1 """Module contianing the :class:`GalaxyEngine` implementation of :class:`Engine`.""" | |
| 2 from __future__ import absolute_import | |
| 3 | |
| 4 import abc | |
| 5 import contextlib | |
| 6 | |
| 7 from galaxy.tool_util.verify import interactor | |
| 8 | |
| 9 from planemo.galaxy.activity import execute | |
| 10 from planemo.galaxy.config import external_galaxy_config | |
| 11 from planemo.galaxy.serve import serve_daemon | |
| 12 from planemo.runnable import RunnableType | |
| 13 from .interface import BaseEngine | |
| 14 | |
| 15 | |
| 16 class GalaxyEngine(BaseEngine): | |
| 17 """An :class:`Engine` implementation backed by a managed Galaxy. | |
| 18 | |
| 19 More information on Galaxy can be found at http://galaxyproject.org/. | |
| 20 """ | |
| 21 | |
| 22 __metaclass__ = abc.ABCMeta | |
| 23 | |
| 24 handled_runnable_types = [ | |
| 25 RunnableType.cwl_tool, | |
| 26 RunnableType.cwl_workflow, | |
| 27 RunnableType.galaxy_workflow, | |
| 28 RunnableType.galaxy_tool, | |
| 29 RunnableType.galaxy_datamanager, | |
| 30 ] | |
| 31 | |
| 32 def _run(self, runnable, job_path): | |
| 33 """Run CWL job in Galaxy.""" | |
| 34 self._ctx.vlog("Serving artifact [%s] with Galaxy." % (runnable,)) | |
| 35 with self.ensure_runnables_served([runnable]) as config: | |
| 36 self._ctx.vlog("Running job path [%s]" % job_path) | |
| 37 run_response = execute(self._ctx, config, runnable, job_path, **self._kwds) | |
| 38 | |
| 39 return run_response | |
| 40 | |
| 41 @abc.abstractmethod | |
| 42 def ensure_runnables_served(self, runnables): | |
| 43 """Use a context manager and describe Galaxy instance with runnables being served.""" | |
| 44 | |
| 45 def _run_test_case(self, test_case): | |
| 46 if hasattr(test_case, "job_path"): | |
| 47 # Simple file-based job path. | |
| 48 return super(GalaxyEngine, self)._run_test_case(test_case) | |
| 49 else: | |
| 50 with self.ensure_runnables_served([test_case.runnable]) as config: | |
| 51 galaxy_interactor_kwds = { | |
| 52 "galaxy_url": config.galaxy_url, | |
| 53 "master_api_key": config.master_api_key, | |
| 54 "api_key": config.user_api_key, | |
| 55 "keep_outputs_dir": "", # TODO: this... | |
| 56 } | |
| 57 tool_id = test_case.tool_id | |
| 58 test_index = test_case.test_index | |
| 59 tool_version = test_case.tool_version | |
| 60 galaxy_interactor = interactor.GalaxyInteractorApi(**galaxy_interactor_kwds) | |
| 61 | |
| 62 test_results = [] | |
| 63 | |
| 64 def _register_job_data(job_data): | |
| 65 test_results.append({ | |
| 66 'id': tool_id + "-" + str(test_index), | |
| 67 'has_data': True, | |
| 68 'data': job_data, | |
| 69 }) | |
| 70 | |
| 71 verbose = self._ctx.verbose | |
| 72 try: | |
| 73 if verbose: | |
| 74 # TODO: this is pretty hacky, it'd be better to send a stream | |
| 75 # and capture the output information somehow. | |
| 76 interactor.VERBOSE_GALAXY_ERRORS = True | |
| 77 | |
| 78 interactor.verify_tool( | |
| 79 tool_id, | |
| 80 galaxy_interactor, | |
| 81 test_index=test_index, | |
| 82 tool_version=tool_version, | |
| 83 register_job_data=_register_job_data, | |
| 84 quiet=not verbose, | |
| 85 ) | |
| 86 except Exception: | |
| 87 pass | |
| 88 | |
| 89 return test_results[0] | |
| 90 | |
| 91 | |
| 92 class LocalManagedGalaxyEngine(GalaxyEngine): | |
| 93 """An :class:`Engine` implementation backed by a managed Galaxy. | |
| 94 | |
| 95 More information on Galaxy can be found at http://galaxyproject.org/. | |
| 96 """ | |
| 97 | |
| 98 @contextlib.contextmanager | |
| 99 def ensure_runnables_served(self, runnables): | |
| 100 # TODO: define an interface for this - not everything in config would make sense for a | |
| 101 # pre-existing Galaxy interface. | |
| 102 with serve_daemon(self._ctx, runnables, **self._serve_kwds()) as config: | |
| 103 yield config | |
| 104 | |
| 105 def _serve_kwds(self): | |
| 106 return self._kwds.copy() | |
| 107 | |
| 108 | |
| 109 class DockerizedManagedGalaxyEngine(LocalManagedGalaxyEngine): | |
| 110 """An :class:`Engine` implementation backed by Galaxy running in Docker. | |
| 111 | |
| 112 More information on Galaxy can be found at http://galaxyproject.org/. | |
| 113 """ | |
| 114 | |
| 115 def _serve_kwds(self): | |
| 116 serve_kwds = self._kwds.copy() | |
| 117 serve_kwds["dockerize"] = True | |
| 118 return serve_kwds | |
| 119 | |
| 120 | |
| 121 class ExternalGalaxyEngine(GalaxyEngine): | |
| 122 """An :class:`Engine` implementation backed by an external Galaxy instance. | |
| 123 """ | |
| 124 | |
| 125 @contextlib.contextmanager | |
| 126 def ensure_runnables_served(self, runnables): | |
| 127 # TODO: ensure tools are available | |
| 128 with external_galaxy_config(self._ctx, runnables, **self._kwds) as config: | |
| 129 config.install_workflows() | |
| 130 yield config | |
| 131 | |
| 132 | |
| 133 __all__ = ( | |
| 134 "DockerizedManagedGalaxyEngine", | |
| 135 "ExternalGalaxyEngine", | |
| 136 "LocalManagedGalaxyEngine", | |
| 137 ) |
