Source code for galaxy.tools.repositories

"""Provides a subset of app for verifying tools."""
import os
import shutil
import tempfile
from contextlib import contextmanager

from galaxy.tools.data import ToolDataTableManager
from galaxy.util.bunch import Bunch
from galaxy.util.dbkeys import GenomeBuilds


[docs]class ValidationContext: """Minimal App object for tool validation.""" is_webapp = True
[docs] def __init__( self, app_name, security, model, tool_data_path, shed_tool_data_path, tool_data_tables=None, registry=None, hgweb_config_manager=None, biotools_metadata_source=None, ): self.name = app_name self.security = security self.model = model self.config = Bunch() self.config.tool_data_path = tool_data_path self.config.shed_tool_data_path = shed_tool_data_path self.temporary_path = tempfile.mkdtemp(prefix="tool_validation_") self.config.tool_data_table_config = os.path.join(self.temporary_path, "tool_data_table_conf.xml") self.config.shed_tool_data_table_config = os.path.join(self.temporary_path, "shed_tool_data_table_conf.xml") self.config.interactivetools_enable = True self.tool_data_tables = tool_data_tables self.tool_shed_registry = Bunch(tool_sheds={}) self.datatypes_registry = registry self.hgweb_config_manager = hgweb_config_manager self.biotools_metadata_source = biotools_metadata_source self.config.len_file_path = os.path.join(self.temporary_path, "chromlen.txt") # If the builds file path is set to None, tools/__init__.py will load the default. # Otherwise it will attempt to load a nonexistent file and log an error. This does # not appear to be an issue with the len_file_path config option. self.config.builds_file_path = None self.genome_builds = GenomeBuilds(self) self.job_search = None
def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): shutil.rmtree(self.temporary_path)
[docs] @staticmethod @contextmanager def from_app(app, work_dir=None): cleanup = False if not work_dir: work_dir = tempfile.mkdtemp() cleanup = True tool_data_tables = ToolDataTableManager(work_dir) try: with ValidationContext( app_name=app.name, security=app.security, model=app.model, tool_data_path=work_dir, shed_tool_data_path=work_dir, tool_data_tables=tool_data_tables, registry=app.datatypes_registry, hgweb_config_manager=getattr(app, "hgweb_config_manager", None), biotools_metadata_source=getattr(app, "biotools_metadata_source", None), ) as app: yield app finally: if cleanup: shutil.rmtree(work_dir, ignore_errors=True)