Skip to content

Commit

Permalink
Move and rename MiniApp to ValidationContext
Browse files Browse the repository at this point in the history
This better describes what it used for and since it is tool specific, fits
better here that in utils. Thanks @jmchilton for the suggestion.
  • Loading branch information
mvdbeek committed Dec 2, 2017
1 parent d326109 commit c1630c2
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 37 deletions.
@@ -1,16 +1,16 @@
"""Create a smaller version of app for verifying tools"""
"""Provides a subset of app for verifying tools."""
import os
import shutil
import tempfile
from contextlib import contextmanager

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


class MiniApp(object):
class ValidationContext(object):
"""Minimal App object for tool validation."""

def __init__(self, app_name,
Expand Down Expand Up @@ -57,14 +57,14 @@ def from_app(app, work_dir=None):
work_dir = tempfile.mkdtemp()
cleanup = True
tool_data_tables = ToolDataTableManager(work_dir)
with MiniApp(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,
hgweb_config_manager=getattr(app, 'hgweb_config_manager', None)
) as app:
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,
hgweb_config_manager=getattr(app, 'hgweb_config_manager', None)
) as app:
yield app
if cleanup:
shutil.rmtree(work_dir, ignore_errors=True)
5 changes: 3 additions & 2 deletions lib/galaxy/webapps/tool_shed/api/tools.py
Expand Up @@ -12,6 +12,7 @@
RequestParameterInvalidException
)
from galaxy.tools.parameters import params_to_strings
from galaxy.tools.repositories import ValidationContext
from galaxy.web import _future_expose_api_raw_anonymous_and_sessionless as expose_api_raw_anonymous_and_sessionless
from galaxy.web.base.controller import BaseAPIController
from galaxy.webapps.tool_shed.search.tool_search import ToolSearch
Expand Down Expand Up @@ -163,8 +164,8 @@ def json(self, trans, **kwd):
trans.response.status = 404
return {'status': 'error', 'message': message}

with util.miniapp.MiniApp.from_app(trans.app) as miniapp:
tv = tool_validator.ToolValidator(miniapp)
with ValidationContext.from_app(trans.app) as validation_context:
tv = tool_validator.ToolValidator(validation_context)
repository, tool, message = tv.load_tool_from_changeset_revision(tsr_id,
changeset,
found_tool.tool_config)
Expand Down
27 changes: 14 additions & 13 deletions lib/galaxy/webapps/tool_shed/controllers/repository.py
Expand Up @@ -18,6 +18,7 @@
util,
web
)
from galaxy.tools.repositories import ValidationContext
from galaxy.web.base.controller import BaseUIController
from galaxy.web.form_builder import CheckboxField
from galaxy.web.framework.helpers import grids
Expand Down Expand Up @@ -864,8 +865,8 @@ def display_tool(self, trans, repository_id, tool_config, changeset_revision, **
message = escape(kwd.get('message', ''))
status = kwd.get('status', 'done')
render_repository_actions_for = kwd.get('render_repository_actions_for', 'tool_shed')
with util.miniapp.MiniApp.from_app(trans.app) as miniapp:
tv = tool_validator.ToolValidator(miniapp)
with ValidationContext.from_app(trans.app) as validation_context:
tv = tool_validator.ToolValidator(validation_context)
repository, tool, message = tv.load_tool_from_changeset_revision(repository_id,
changeset_revision,
tool_config)
Expand Down Expand Up @@ -1759,18 +1760,18 @@ def load_invalid_tool(self, trans, repository_id, tool_config, changeset_revisio
message = escape(kwd.get('message', ''))
render_repository_actions_for = kwd.get('render_repository_actions_for', 'tool_shed')

with util.miniapp.MiniApp.from_app(trans.app) as miniapp:
tv = tool_validator.ToolValidator(miniapp)
with ValidationContext.from_app(trans.app) as validation_context:
tv = tool_validator.ToolValidator(validation_context)
repository, tool, error_message = tv.load_tool_from_changeset_revision(repository_id,
changeset_revision,
tool_config)
tool_state = tool_util.new_state(trans, tool, invalid=True)
invalid_file_tups = []
if tool:
invalid_file_tups = tv.check_tool_input_params(repository.repo_path(trans.app),
tool_config,
tool,
[])
tool_state = tool_util.new_state(trans, tool, invalid=True)
invalid_file_tups = []
if tool:
invalid_file_tups = tv.check_tool_input_params(repository.repo_path(trans.app),
tool_config,
tool,
[])
if invalid_file_tups:
message = tool_util.generate_message_for_invalid_tools(trans.app,
invalid_file_tups,
Expand Down Expand Up @@ -2894,8 +2895,8 @@ def view_tool_metadata(self, trans, repository_id, changeset_revision, tool_id,
metadata = repository_metadata.metadata
if metadata:
if 'tools' in metadata:
with util.miniapp.MiniApp.from_app(trans.app) as miniapp:
tv = tool_validator.ToolValidator(miniapp)
with ValidationContext.from_app(trans.app) as validation_context:
tv = tool_validator.ToolValidator(validation_context)
for tool_metadata_dict in metadata['tools']:
if tool_metadata_dict['id'] == tool_id:
work_dir = tempfile.mkdtemp()
Expand Down
16 changes: 8 additions & 8 deletions lib/tool_shed/metadata/metadata_generator.py
Expand Up @@ -9,7 +9,7 @@
from galaxy.tools.data_manager.manager import DataManager
from galaxy.tools.loader_directory import looks_like_a_tool
from galaxy.tools.parser.interface import TestCollectionDef
from galaxy.util.miniapp import MiniApp
from galaxy.tools.repositories import ValidationContext
from galaxy.web import url_for
from tool_shed.repository_types import util as rt_util
from tool_shed.tools import tool_validator
Expand Down Expand Up @@ -339,9 +339,9 @@ def generate_metadata_for_changeset_revision(self):
files_dir = self.relative_install_dir
if self.shed_config_dict.get('tool_path'):
files_dir = os.path.join(self.shed_config_dict['tool_path'], files_dir)
# Create a MiniApp object to load and validate tools, data tables and datatypes
with MiniApp.from_app(app=self.app, work_dir=work_dir) as miniapp:
tv = tool_validator.ToolValidator(miniapp)
# Create ValidationContext to load and validate tools, data tables and datatypes
with ValidationContext.from_app(app=self.app, work_dir=work_dir) as validation_context:
tv = tool_validator.ToolValidator(validation_context)
# Handle proprietary datatypes, if any.
datatypes_config = hg_util.get_config_from_disk(suc.DATATYPES_CONFIG_FILENAME, files_dir)
if datatypes_config:
Expand All @@ -368,10 +368,10 @@ def generate_metadata_for_changeset_revision(self):
# We create a new ToolDataTableManager to avoid adding entries to the app-wide
# tool data tables. This is only used for checking that the data table is valid.
new_table_elems, error_message = \
miniapp.tool_data_tables.add_new_entries_from_config_file(config_filename=sample_file,
tool_data_path=work_dir,
shed_tool_data_table_config=work_dir,
persist=False)
validation_context.tool_data_tables.add_new_entries_from_config_file(config_filename=sample_file,
tool_data_path=work_dir,
shed_tool_data_table_config=work_dir,
persist=False)
if error_message:
self.invalid_file_tups.append((filename, error_message))
for root, dirs, files in os.walk(files_dir):
Expand Down
6 changes: 3 additions & 3 deletions lib/tool_shed/util/workflow_util.py
Expand Up @@ -7,7 +7,7 @@

import galaxy.tools
import galaxy.tools.parameters
from galaxy.util.miniapp import MiniApp
from galaxy.tools.repositories import ValidationConext
from galaxy.util.sanitize_html import sanitize_html
from galaxy.workflow.modules import (
module_types,
Expand Down Expand Up @@ -39,8 +39,8 @@ def __init__(self, trans, repository_id, changeset_revision, tools_metadata, too
self.tool_version = None
if trans.webapp.name == 'tool_shed':
# We're in the tool shed.
with MiniApp.from_app(trans.app) as miniapp:
tv = tool_validator.ToolValidator(miniapp)
with ValidationConext.from_app(trans.app) as validation_context:
tv = tool_validator.ToolValidator(validation_context)
for tool_dict in tools_metadata:
if self.tool_id in [tool_dict['id'], tool_dict['guid']]:
repository, self.tool, message = tv.load_tool_from_changeset_revision(repository_id,
Expand Down

0 comments on commit c1630c2

Please sign in to comment.