Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/planemo/galaxy/workflows.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/planemo/galaxy/workflows.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -"""Utilities for Galaxy workflows.""" -import json -import os -from collections import namedtuple - -import yaml -from bioblend.galaxy.client import Client -from ephemeris import generate_tool_list_from_ga_workflow_files -from ephemeris import shed_tools -from gxformat2.converter import python_to_workflow -from gxformat2.interface import BioBlendImporterGalaxyInterface -from gxformat2.interface import ImporterGalaxyInterface - -from planemo.io import warn - -FAILED_REPOSITORIES_MESSAGE = "Failed to install one or more repositories." - - -def load_shed_repos(runnable): - if runnable.type.name != "galaxy_workflow": - return [] - - path = runnable.path - if path.endswith(".ga"): - generate_tool_list_from_ga_workflow_files.generate_tool_list_from_workflow([path], "Tools from workflows", "tools.yml") - with open("tools.yml", "r") as f: - tools = yaml.safe_load(f)["tools"] - - else: - # It'd be better to just infer this from the tool shed ID somehow than - # require explicit annotation like this... I think? - with open(path, "r") as f: - workflow = yaml.safe_load(f) - - tools = workflow.get("tools", []) - - return tools - - -def install_shed_repos(runnable, admin_gi, ignore_dependency_problems): - tools_info = load_shed_repos(runnable) - if tools_info: - install_tool_manager = shed_tools.InstallRepositoryManager(admin_gi) - install_results = install_tool_manager.install_repositories(tools_info) - if install_results.errored_repositories: - if ignore_dependency_problems: - warn(FAILED_REPOSITORIES_MESSAGE) - else: - raise Exception(FAILED_REPOSITORIES_MESSAGE) - - -def import_workflow(path, admin_gi, user_gi, from_path=False): - """Import a workflow path to specified Galaxy instance.""" - if not from_path: - importer = BioBlendImporterGalaxyInterface( - admin_gi=admin_gi, - user_gi=user_gi - ) - workflow = _raw_dict(path, importer) - return importer.import_workflow(workflow) - else: - # TODO: Update bioblend to allow from_path. - path = os.path.abspath(path) - payload = dict( - from_path=path - ) - workflows_url = user_gi._make_url(user_gi.workflows) - workflow = Client._post(user_gi.workflows, payload, url=workflows_url) - return workflow - - -def _raw_dict(path, importer=None): - if path.endswith(".ga"): - with open(path, "r") as f: - workflow = json.load(f) - else: - if importer is None: - importer = DummyImporterGalaxyInterface() - - workflow_directory = os.path.dirname(path) - workflow_directory = os.path.abspath(workflow_directory) - with open(path, "r") as f: - workflow = yaml.safe_load(f) - workflow = python_to_workflow(workflow, importer, workflow_directory) - - return workflow - - -def find_tool_ids(path): - tool_ids = [] - workflow = _raw_dict(path) - for (order_index, step) in workflow["steps"].items(): - tool_id = step.get("tool_id") - tool_ids.append(tool_id) - - return tool_ids - - -WorkflowOutput = namedtuple("WorkflowOutput", ["order_index", "output_name", "label"]) - - -def describe_outputs(path): - """Return a list of :class:`WorkflowOutput` objects for target workflow.""" - workflow = _raw_dict(path) - outputs = [] - for (order_index, step) in workflow["steps"].items(): - step_outputs = step.get("workflow_outputs", []) - for step_output in step_outputs: - output = WorkflowOutput( - int(order_index), - step_output["output_name"], - step_output["label"], - ) - outputs.append(output) - return outputs - - -class DummyImporterGalaxyInterface(ImporterGalaxyInterface): - - def import_workflow(self, workflow, **kwds): - return None - - -__all__ = ( - "import_workflow", - "describe_outputs", -)