diff --git a/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py b/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py index 38303de56b2..5bdf191a939 100644 --- a/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py +++ b/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py @@ -26,7 +26,6 @@ from tool_shed.util import ( shed_util_common as suc, tool_dependency_util, tool_util, - workflow_util ) from tool_shed.util.web_util import escape from .admin import AdminGalaxy @@ -245,12 +244,6 @@ class AdminToolshed(AdminGalaxy): return open(path_to_file, 'rb') return None - @web.expose - @web.require_admin - def generate_workflow_image(self, trans, workflow_name, repository_id=None): - """Return an svg image representation of a workflow dictionary created when the workflow was exported.""" - return workflow_util.generate_workflow_image(trans, workflow_name, repository_metadata_id=None, repository_id=repository_id) - @web.expose @web.require_admin def view_tool_metadata(self, trans, repository_id, tool_id, **kwd): @@ -342,36 +335,6 @@ class AdminToolshed(AdminGalaxy): repo_information_dict = json.loads(raw_text) return repo_information_dict - @web.expose - @web.require_admin - def import_workflow(self, trans, workflow_name, repository_id, **kwd): - """Import a workflow contained in an installed tool shed repository into Galaxy.""" - message = str(escape(kwd.get('message', ''))) - status = kwd.get('status', 'done') - if workflow_name: - workflow_name = encoding_util.tool_shed_decode(workflow_name) - repository = repository_util.get_tool_shed_repository_by_id(trans.app, repository_id) - if repository: - workflow, status, message = workflow_util.import_workflow(trans, repository, workflow_name) - if workflow: - workflow_name = encoding_util.tool_shed_encode(str(workflow.name)) - else: - message += 'Unable to locate a workflow named %s within the installed tool shed repository named %s' % \ - (escape(str(workflow_name)), escape(str(repository.name))) - status = 'error' - else: - message = 'Invalid repository id %s received.' % str(repository_id) - status = 'error' - else: - message = 'The value of workflow_name is required, but was not received.' - status = 'error' - return trans.response.send_redirect(web.url_for(controller='admin_toolshed', - action='view_workflow', - workflow_name=workflow_name, - repository_id=repository_id, - message=message, - status=status)) - @web.expose @web.require_admin def initiate_tool_dependency_installation(self, trans, tool_dependencies, **kwd): @@ -1669,23 +1632,3 @@ class AdminToolshed(AdminGalaxy): action='repositories', message=message, status=status)) - - @web.expose - @web.require_admin - def view_workflow(self, trans, workflow_name=None, repository_id=None, **kwd): - """Retrieve necessary information about a workflow from the database so that it can be displayed in an svg image.""" - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - if workflow_name: - workflow_name = encoding_util.tool_shed_decode(workflow_name) - repository = repository_util.get_tool_shed_repository_by_id(trans.app, repository_id) - changeset_revision = repository.changeset_revision - metadata = repository.metadata - return trans.fill_template("/admin/tool_shed_repository/view_workflow.mako", - repository=repository, - changeset_revision=changeset_revision, - repository_id=repository_id, - workflow_name=workflow_name, - metadata=metadata, - message=message, - status=status) diff --git a/lib/tool_shed/test/base/twilltestcase.py b/lib/tool_shed/test/base/twilltestcase.py index 2492da0c07f..a509474dd50 100644 --- a/lib/tool_shed/test/base/twilltestcase.py +++ b/lib/tool_shed/test/base/twilltestcase.py @@ -32,7 +32,6 @@ from galaxy.security import idencoding from galaxy.util import smart_str, unicodify from galaxy_test.driver.testcase import FunctionalTestCase from tool_shed.util import hg_util, xml_util -from tool_shed.util.encoding_util import tool_shed_encode from . import common, test_db_util # Set a 10 minute timeout for repository installation. @@ -829,11 +828,6 @@ class ShedTwillTestCase(FunctionalTestCase): strings_not_displayed = [] self.check_for_strings(strings_displayed, strings_not_displayed) - def display_all_workflows(self, strings_displayed=None, strings_not_displayed=None): - url = '/workflows/list' - self.visit_galaxy_url(url) - self.check_for_strings(strings_displayed, strings_not_displayed) - def display_galaxy_browse_repositories_page(self, strings_displayed=None, strings_not_displayed=None): url = '/admin_toolshed/browse_repositories' self.visit_galaxy_url(url) @@ -869,14 +863,6 @@ class ShedTwillTestCase(FunctionalTestCase): strings_displayed = [x.replace("'", "'") for x in strings_displayed] self.check_for_strings(strings_displayed, strings_not_displayed) - def display_installed_workflow_image(self, repository, workflow_name, strings_displayed=None, strings_not_displayed=None): - params = { - 'repository_id': self.security.encode_id(repository.id), - 'workflow_name': tool_shed_encode(workflow_name) - } - self.visit_galaxy_url('/admin_toolshed/generate_workflow_image', params=params) - self.check_for_strings(strings_displayed, strings_not_displayed) - def display_manage_repository_page(self, repository, changeset_revision=None, strings_displayed=None, strings_not_displayed=None): params = { 'id': self.security.encode_id(repository.id) @@ -1343,20 +1329,6 @@ class ShedTwillTestCase(FunctionalTestCase): self.submit_form('import_capsule', 'import_capsule_button') self.check_for_strings(strings_displayed_after_submit, strings_not_displayed_after_submit) - def import_workflow(self, repository, workflow_name, strings_displayed=None, strings_not_displayed=None): - if strings_displayed is None: - strings_displayed = [] - if strings_not_displayed is None: - strings_not_displayed = [] - params = { - 'repository_id': self.security.encode_id(repository.id), - 'workflow_name': tool_shed_encode(workflow_name) - } - self.visit_galaxy_url('/admin_toolshed/import_workflow', params=params) - if workflow_name not in strings_displayed: - strings_displayed.append(workflow_name) - self.check_for_strings(strings_displayed, strings_not_displayed) - def initiate_installation_process(self, install_tool_dependencies=False, install_repository_dependencies=True, @@ -1541,19 +1513,6 @@ class ShedTwillTestCase(FunctionalTestCase): self.visit_galaxy_url('/tool_runner', params=params) self.check_for_strings(strings_displayed, strings_not_displayed) - def load_workflow_image_in_tool_shed(self, repository, workflow_name, changeset_revision=None, strings_displayed=None, strings_not_displayed=None): - if not changeset_revision: - changeset_revision = self.get_repository_tip(repository) - metadata = self.get_repository_metadata_by_changeset_revision(repository, changeset_revision) - if not metadata: - raise AssertionError('Metadata not found for changeset revision %s.' % changeset_revision) - params = { - 'repository_metadata_id': self.security.encode_id(metadata.id), - 'workflow_name': tool_shed_encode(workflow_name) - } - self.visit_url('/repository/generate_workflow_image', params=params) - self.check_for_strings(strings_displayed, strings_not_displayed) - def manage_review_components(self, strings_displayed=None, strings_not_displayed=None): url = '/repository_review/manage_components' self.visit_url(url) @@ -1570,16 +1529,6 @@ class ShedTwillTestCase(FunctionalTestCase): self.visit_url('/repository/preview_tools_in_changeset', params=params) self.check_for_strings(strings_displayed, strings_not_displayed) - def preview_workflow_in_tool_shed(self, repository_name, owner, workflow_name, strings_displayed=None, strings_not_displayed=None): - repository = test_db_util.get_repository_by_name_and_owner(repository_name, owner) - metadata = self.get_repository_metadata(repository) - params = { - 'workflow_name': tool_shed_encode(workflow_name), - 'repository_metadata_id': self.security.encode_id(metadata[0].id) - } - self.visit_url('/repository/view_workflow', params=params) - self.check_for_strings(strings_displayed, strings_not_displayed) - def reactivate_repository(self, installed_repository): params = dict(id=self.security.encode_id(installed_repository.id)) url = '/admin_toolshed/restore_repository' @@ -2017,14 +1966,6 @@ class ShedTwillTestCase(FunctionalTestCase): # or if the number of keys differs. assert old_metadata == new_metadata, 'Metadata changed after reset on repository %s.' % repository.name - def view_installed_workflow(self, repository, workflow_name, strings_displayed=None, strings_not_displayed=None): - params = { - 'repository_id': self.security.encode_id(repository.id), - 'workflow_name': tool_shed_encode(workflow_name) - } - self.visit_galaxy_url('/admin_toolshed/view_workflow', params=params) - self.check_for_strings(strings_displayed, strings_not_displayed) - def visit_galaxy_url(self, url, params=None, doseq=False, allowed_codes=[200]): url = '%s%s' % (self.galaxy_url, url) self.visit_url(url, params=params, doseq=doseq, allowed_codes=allowed_codes) diff --git a/lib/tool_shed/test/functional/test_0060_workflows.py b/lib/tool_shed/test/functional/test_0060_workflows.py deleted file mode 100644 index 9aba5348aec..00000000000 --- a/lib/tool_shed/test/functional/test_0060_workflows.py +++ /dev/null @@ -1,123 +0,0 @@ -import os - -from ..base.twilltestcase import common, ShedTwillTestCase - -repository_name = 'filtering_0060' -repository_description = "Galaxy's filtering tool for test 0060" -repository_long_description = "Long description of Galaxy's filtering tool for test 0060" - -workflow_filename = 'Workflow_for_0060_filter_workflow_repository.ga' -workflow_name = 'Workflow for 0060_filter_workflow_repository' - -category_name = 'Test 0060 Workflow Features' -category_description = 'Test 0060 for workflow features' - -workflow_repository_name = 'filtering_workflow_0060' -workflow_repository_description = "Workflow referencing the filtering tool for test 0060" -workflow_repository_long_description = "Long description of the workflow for test 0060" - - -class TestToolShedWorkflowFeatures(ShedTwillTestCase): - '''Test valid and invalid workflows.''' - - def test_0000_initiate_users(self): - """Create necessary user accounts and login as an admin user.""" - self.login(email=common.test_user_1_email, username=common.test_user_1_name) - test_user_1 = self.test_db_util.get_user(common.test_user_1_email) - assert test_user_1 is not None, 'Problem retrieving user with email %s from the database' % common.test_user_1_email - self.test_db_util.get_private_role(test_user_1) - self.login(email=common.admin_email, username=common.admin_username) - admin_user = self.test_db_util.get_user(common.admin_email) - assert admin_user is not None, 'Problem retrieving user with email %s from the database' % common.admin_email - self.test_db_util.get_private_role(admin_user) - - def test_0005_create_categories(self): - """Create categories for this test suite""" - self.create_category(name='Test 0060 Workflow Features', description='Test 0060 - Workflow Features') - - def test_0010_create_repository(self): - """Create and populate the filtering repository""" - category = self.create_category(name=category_name, description=category_description) - self.login(email=common.test_user_1_email, username=common.test_user_1_name) - self.get_or_create_repository(name=repository_name, - description=repository_description, - long_description=repository_long_description, - owner=common.test_user_1_name, - category_id=self.security.encode_id(category.id), - strings_displayed=[]) - - def test_0015_upload_workflow(self): - '''Upload a workflow with a missing tool, and verify that the tool specified is marked as missing.''' - repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name) - workflow = open(self.get_filename('filtering_workflow/Workflow_for_0060_filter_workflow_repository.ga'), 'r').read() - workflow = workflow.replace('__TEST_TOOL_SHED_URL__', self.url.replace('http://', '')) - workflow_filepath = self.generate_temp_path('test_0060', additional_paths=['filtering_workflow']) - if not os.path.exists(workflow_filepath): - os.makedirs(workflow_filepath) - open(os.path.join(workflow_filepath, workflow_filename), 'w+').write(workflow) - self.upload_file(repository, - filename=workflow_filename, - filepath=workflow_filepath, - valid_tools_only=True, - uncompress_file=False, - remove_repo_files_not_in_tar=False, - commit_message='Uploaded filtering workflow.', - strings_displayed=[], - strings_not_displayed=[]) - self.load_workflow_image_in_tool_shed(repository, workflow_name, strings_displayed=['#EBBCB2']) - - def test_0020_upload_tool(self): - '''Upload the missing tool for the workflow in the previous step, and verify that the error is no longer present.''' - repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name) - self.upload_file(repository, - filename='filtering/filtering_2.2.0.tar', - filepath=None, - valid_tools_only=True, - uncompress_file=True, - remove_repo_files_not_in_tar=False, - commit_message='Uploaded filtering 2.2.0.', - strings_displayed=[], - strings_not_displayed=[]) - self.load_workflow_image_in_tool_shed(repository, workflow_name, strings_not_displayed=['#EBBCB2']) - - def test_0025_create_repository_with_only_workflow(self): - """Create and populate the filtering_workflow_0060 repository""" - category = self.create_category(name=category_name, description=category_description) - self.login(email=common.test_user_1_email, username=common.test_user_1_name) - self.get_or_create_repository(name=workflow_repository_name, - description=workflow_repository_description, - long_description=workflow_repository_long_description, - owner=common.test_user_1_name, - category_id=self.security.encode_id(category.id), - strings_displayed=[]) - workflow = open(self.get_filename('filtering_workflow/Workflow_for_0060_filter_workflow_repository.ga'), 'r').read() - workflow = workflow.replace('__TEST_TOOL_SHED_URL__', self.url.replace('http://', '')) - workflow = workflow.replace('Workflow for 0060_filter_workflow_repository', - 'New workflow for 0060_filter_workflow_repository') - workflow_filepath = self.generate_temp_path('test_0060', additional_paths=['filtering_workflow_2']) - if not os.path.exists(workflow_filepath): - os.makedirs(workflow_filepath) - open(os.path.join(workflow_filepath, workflow_filename), 'w+').write(workflow) - repository = self.test_db_util.get_repository_by_name_and_owner(workflow_repository_name, common.test_user_1_name) - self.upload_file(repository, - filename=workflow_filename, - filepath=workflow_filepath, - valid_tools_only=True, - uncompress_file=False, - remove_repo_files_not_in_tar=False, - commit_message='Uploaded filtering workflow.', - strings_displayed=[], - strings_not_displayed=[]) - self.load_workflow_image_in_tool_shed(repository, workflow_name, strings_displayed=['#EBBCB2']) - - def test_0030_check_workflow_repository(self): - """Check for strings on the manage page for the filtering_workflow_0060 repository.""" - repository = self.test_db_util.get_repository_by_name_and_owner(workflow_repository_name, common.test_user_1_name) - strings_displayed = ['Workflows', 'New workflow for 0060_filter', '0.1'] - strings_not_displayed = ['Valid tools', 'Invalid tools'] - self.display_manage_repository_page(repository, strings_displayed=strings_displayed, strings_not_displayed=strings_not_displayed) - - def test_0035_verify_repository_metadata(self): - '''Verify that resetting the metadata does not change it.''' - repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name) - self.verify_unchanged_repository_metadata(repository) diff --git a/lib/tool_shed/test/functional/test_1060_install_repository_with_workflow.py b/lib/tool_shed/test/functional/test_1060_install_repository_with_workflow.py deleted file mode 100644 index 0eea24c3710..00000000000 --- a/lib/tool_shed/test/functional/test_1060_install_repository_with_workflow.py +++ /dev/null @@ -1,154 +0,0 @@ -import os - -from ..base.twilltestcase import common, ShedTwillTestCase - -repository_name = 'filtering_0060' -repository_description = "Galaxy's filtering tool for test 0060" -repository_long_description = "Long description of Galaxy's filtering tool for test 0060" - -workflow_filename = 'Workflow_for_0060_filter_workflow_repository.ga' -workflow_name = 'Workflow for 0060_filter_workflow_repository' -second_workflow_name = 'New workflow for 0060_filter_workflow_repository' - -category_name = 'Test 0060 Workflow Features' -category_description = 'Test 0060 for workflow features' - -workflow_repository_name = 'filtering_workflow_0060' -workflow_repository_description = "Workflow referencing the filtering tool for test 0060" -workflow_repository_long_description = "Long description of the workflow for test 0060" - - -class ToolWithRepositoryDependencies(ShedTwillTestCase): - '''Test installing a repository with repository dependencies.''' - - def test_0000_initiate_users(self): - """Create necessary user accounts.""" - self.galaxy_login(email=common.admin_email, username=common.admin_username) - galaxy_admin_user = self.test_db_util.get_galaxy_user(common.admin_email) - assert galaxy_admin_user is not None, 'Problem retrieving user with email %s from the database' % common.admin_email - self.test_db_util.get_galaxy_private_role(galaxy_admin_user) - self.login(email=common.test_user_1_email, username=common.test_user_1_name) - test_user_1 = self.test_db_util.get_user(common.test_user_1_email) - assert test_user_1 is not None, 'Problem retrieving user with email %s from the database' % common.test_user_1_email - self.test_db_util.get_private_role(test_user_1) - self.login(email=common.admin_email, username=common.admin_username) - admin_user = self.test_db_util.get_user(common.admin_email) - assert admin_user is not None, 'Problem retrieving user with email %s from the database' % common.admin_email - self.test_db_util.get_private_role(admin_user) - - def test_0005_ensure_category_exists(self): - '''Create the 0060 category.''' - category = self.create_category(name=category_name, description=category_description) - self.login(email=common.test_user_1_email, username=common.test_user_1_name) - repository = self.get_or_create_repository(name=repository_name, - description=repository_description, - long_description=repository_long_description, - owner=common.test_user_1_name, - category_id=self.security.encode_id(category.id), - strings_displayed=[]) - if self.repository_is_new(repository): - workflow = open(self.get_filename('filtering_workflow/Workflow_for_0060_filter_workflow_repository.ga'), 'r').read() - workflow = workflow.replace('__TEST_TOOL_SHED_URL__', self.url.replace('http://', '')) - workflow_filepath = self.generate_temp_path('test_1060', additional_paths=['filtering_workflow']) - if not os.path.exists(workflow_filepath): - os.makedirs(workflow_filepath) - open(os.path.join(workflow_filepath, workflow_filename), 'w+').write(workflow) - self.upload_file(repository, - filename=workflow_filename, - filepath=workflow_filepath, - valid_tools_only=True, - uncompress_file=False, - remove_repo_files_not_in_tar=False, - commit_message='Uploaded filtering workflow.', - strings_displayed=[], - strings_not_displayed=[]) - self.upload_file(repository, - filename='filtering/filtering_2.2.0.tar', - filepath=None, - valid_tools_only=True, - uncompress_file=True, - remove_repo_files_not_in_tar=False, - commit_message='Uploaded filtering 2.2.0.', - strings_displayed=[], - strings_not_displayed=[]) - - def test_0010_install_repository_with_workflow(self): - """Browse the available tool sheds in this Galaxy instance and preview the filtering tool.""" - self.preview_repository_in_tool_shed(repository_name, - common.test_user_1_name, - strings_displayed=[repository_name, 'Valid tools', 'Workflows']) - self.galaxy_login(email=common.admin_email, username=common.admin_username) - self.install_repository(repository_name, - common.test_user_1_name, - 'Test 0060 Workflow Features', - install_tool_dependencies=False, - new_tool_panel_section_label='test_1060') - - def test_0015_import_workflow_from_installed_repository(self): - '''Import the workflow from the installed repository and verify that it appears in the list of all workflows.''' - installed_repository = self.test_db_util.get_installed_repository_by_name_owner(repository_name, common.test_user_1_name) - self.display_installed_workflow_image(installed_repository, - workflow_name, - strings_displayed=['#EBD9B2'], - strings_not_displayed=['#EBBCB2']) - self.display_all_workflows(strings_not_displayed=['Workflow for 0060_filter_workflow_repository']) - self.import_workflow(installed_repository, workflow_name) - self.display_all_workflows(strings_displayed=['Workflow for 0060_filter_workflow_repository']) - - def test_0020_create_filter_workflow_repository(self): - '''Create, if necessary, a filtering repository with only a workflow.''' - category = self.create_category(name=category_name, description=category_description) - self.login(email=common.test_user_1_email, username=common.test_user_1_name) - repository = self.get_or_create_repository(name=workflow_repository_name, - description=workflow_repository_description, - long_description=workflow_repository_long_description, - owner=common.test_user_1_name, - category_id=self.security.encode_id(category.id), - strings_displayed=[]) - if self.repository_is_new(repository): - workflow = open(self.get_filename('filtering_workflow/Workflow_for_0060_filter_workflow_repository.ga'), 'r').read() - workflow = workflow.replace('__TEST_TOOL_SHED_URL__', self.url.replace('http://', '')) - workflow = workflow.replace('Workflow for 0060_filter_workflow_repository', - 'New workflow for 0060_filter_workflow_repository') - workflow_filepath = self.generate_temp_path('test_0060', additional_paths=['filtering_workflow_2']) - if not os.path.exists(workflow_filepath): - os.makedirs(workflow_filepath) - open(os.path.join(workflow_filepath, workflow_filename), 'w+').write(workflow) - self.upload_file(repository, - filename=workflow_filename, - filepath=workflow_filepath, - valid_tools_only=True, - uncompress_file=False, - remove_repo_files_not_in_tar=False, - commit_message='Uploaded filtering workflow.', - strings_displayed=[], - strings_not_displayed=[]) - self.load_workflow_image_in_tool_shed(repository, - 'New workflow for 0060_filter_workflow_repository', - strings_displayed=['#EBBCB2']) - - def test_0025_install_repository_with_workflow(self): - """Browse the available tool sheds in this Galaxy instance and preview the filtering workflow repository.""" - self.preview_repository_in_tool_shed(workflow_repository_name, - common.test_user_1_name, - strings_displayed=['filtering_workflow_0060', 'Workflows'], - strings_not_displayed=['Valid tools', 'Invalid tools']) - self.galaxy_login(email=common.admin_email, username=common.admin_username) - self.install_repository(workflow_repository_name, - common.test_user_1_name, - 'Test 0060 Workflow Features', - install_tool_dependencies=False, - includes_tools_for_display_in_tool_panel=False) - - def test_0030_import_workflow_from_installed_repository(self): - '''Import the workflow from the installed repository and verify that it appears in the list of all workflows.''' - installed_repository = self.test_db_util.get_installed_repository_by_name_owner(workflow_repository_name, common.test_user_1_name) - self.display_installed_workflow_image(installed_repository, - 'New workflow for 0060_filter_workflow_repository', - strings_displayed=['#EBD9B2'], - strings_not_displayed=['#EBBCB2']) - self.display_all_workflows(strings_not_displayed=['New workflow for 0060_filter_workflow_repository']) - self.import_workflow(installed_repository, - 'New workflow for 0060_filter_workflow_repository', - strings_displayed=['New workflow for 0060_filter_workflow_repository']) - self.display_all_workflows(strings_displayed=['New workflow for 0060_filter_workflow_repository']) diff --git a/lib/tool_shed/util/workflow_util.py b/lib/tool_shed/util/workflow_util.py deleted file mode 100644 index 976220cfc3e..00000000000 --- a/lib/tool_shed/util/workflow_util.py +++ /dev/null @@ -1,414 +0,0 @@ -""" Tool shed helper methods for dealing with workflows - only two methods are -utilized outside of this modules - generate_workflow_image and import_workflow. -""" -import json -import logging -import os - -import galaxy.tools -import galaxy.tools.parameters -from galaxy.tools.repositories import ValidationContext -from galaxy.util.sanitize_html import sanitize_html -from galaxy.workflow.modules import ( - module_types, - ToolModule, - WorkflowModuleFactory -) -from galaxy.workflow.render import WorkflowCanvas -from galaxy.workflow.steps import attach_ordered_steps -from tool_shed.tools import tool_validator -from tool_shed.util import ( - encoding_util, - metadata_util, - repository_util -) - -log = logging.getLogger(__name__) - - -class RepoToolModule(ToolModule): - - type = "tool" - - def __init__(self, trans, repository_id, changeset_revision, tools_metadata, tool_id): - self.trans = trans - self.tools_metadata = tools_metadata - self.tool_id = tool_id - self.tool = None - self.errors = None - self.tool_version = None - if trans.webapp.name == 'tool_shed': - # We're in the tool shed. - with ValidationContext.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, valid, message = tv.load_tool_from_changeset_revision(repository_id, - changeset_revision, - tool_dict['tool_config']) - if self.tool is None and message or not valid: - self.errors = 'unavailable' - break - else: - # We're in Galaxy. - self.tool = trans.app.toolbox.get_tool(self.tool_id, tool_version=self.tool_version) - if self.tool is None: - self.errors = 'unavailable' - self.post_job_actions = {} - self.workflow_outputs = [] - self.state = None - - @classmethod - def from_dict(Class, trans, step_dict, repository_id, changeset_revision, tools_metadata, secure=True): - tool_id = step_dict['tool_id'] - module = Class(trans, repository_id, changeset_revision, tools_metadata, tool_id) - module.state = galaxy.tools.DefaultToolState() - if module.tool is not None: - module.state.decode(step_dict["tool_state"], module.tool, module.trans.app) - module.errors = step_dict.get("tool_errors", None) - return module - - @classmethod - def from_workflow_step(Class, trans, step, repository_id, changeset_revision, tools_metadata): - module = Class(trans, repository_id, changeset_revision, tools_metadata, step.tool_id) - module.state = galaxy.tools.DefaultToolState() - module.recover_state(step.tool_inputs) - module.errors = module.get_errors() - return module - - def get_data_inputs(self): - data_inputs = [] - - def callback(input, prefixed_name, prefixed_label, **kwargs): - if isinstance(input, galaxy.tools.parameters.basic.DataToolParameter): - data_inputs.append(dict(name=prefixed_name, - label=prefixed_label, - extensions=input.extensions)) - if self.tool: - try: - galaxy.tools.parameters.visit_input_values(self.tool.inputs, self.state.inputs, callback) - except Exception: - # TODO have this actually use default parameters? Fix at - # refactor, needs to be discussed wrt: reproducibility though. - log.exception("Tool parse failed for %s -- this indicates incompatibility of local tool version with expected version by the workflow.", self.tool.id) - return data_inputs - - def get_data_outputs(self): - data_outputs = [] - if self.tool: - data_inputs = None - for name, tool_output in self.tool.outputs.items(): - if tool_output.format_source is not None: - # Default to special name "input" which remove restrictions on connections - formats = ['input'] - if data_inputs is None: - data_inputs = self.get_data_inputs() - # Find the input parameter referenced by format_source - for di in data_inputs: - # Input names come prefixed with conditional and repeat names separated by '|', - # so remove prefixes when comparing with format_source. - if di['name'] is not None and di['name'].split('|')[-1] == tool_output.format_source: - formats = di['extensions'] - else: - formats = [tool_output.format] - for change_elem in tool_output.change_format: - for when_elem in change_elem.findall('when'): - format = when_elem.get('format', None) - if format and format not in formats: - formats.append(format) - data_outputs.append(dict(name=name, extensions=formats)) - return data_outputs - - -class RepoWorkflowModuleFactory(WorkflowModuleFactory): - - def __init__(self, module_types): - self.module_types = module_types - - def from_dict(self, trans, repository_id, changeset_revision, step_dict, tools_metadata, **kwd): - """Return module initialized from the data in dictionary `step_dict`.""" - type = step_dict['type'] - assert type in self.module_types - module_method_kwds = dict(**kwd) - if type == "tool": - module_method_kwds['repository_id'] = repository_id - module_method_kwds['changeset_revision'] = changeset_revision - module_method_kwds['tools_metadata'] = tools_metadata - return self.module_types[type].from_dict(trans, step_dict, **module_method_kwds) - - def from_workflow_step(self, trans, repository_id, changeset_revision, tools_metadata, step): - """Return module initialized from the WorkflowStep object `step`.""" - type = step.type - module_method_kwds = dict() - if type == "tool": - module_method_kwds['repository_id'] = repository_id - module_method_kwds['changeset_revision'] = changeset_revision - module_method_kwds['tools_metadata'] = tools_metadata - return self.module_types[type].from_workflow_step(trans, step, **module_method_kwds) - - -tool_shed_module_types = module_types.copy() -tool_shed_module_types['tool'] = RepoToolModule -module_factory = RepoWorkflowModuleFactory(tool_shed_module_types) - - -def generate_workflow_image(trans, workflow_name, repository_metadata_id=None, repository_id=None): - """ - Return an svg image representation of a workflow dictionary created when the workflow was exported. This method is called - from both Galaxy and the tool shed. When called from the tool shed, repository_metadata_id will have a value and repository_id - will be None. When called from Galaxy, repository_metadata_id will be None and repository_id will have a value. - """ - workflow_name = encoding_util.tool_shed_decode(workflow_name) - if trans.webapp.name == 'tool_shed': - # We're in the tool shed. - repository_metadata = metadata_util.get_repository_metadata_by_id(trans.app, repository_metadata_id) - repository_id = trans.security.encode_id(repository_metadata.repository_id) - changeset_revision = repository_metadata.changeset_revision - metadata = repository_metadata.metadata - else: - # We're in Galaxy. - repository = repository_util.get_tool_shed_repository_by_id(trans.app, repository_id) - changeset_revision = repository.changeset_revision - metadata = repository.metadata - # metadata[ 'workflows' ] is a list of tuples where each contained tuple is - # [ , ] - for workflow_tup in metadata['workflows']: - workflow_dict = workflow_tup[1] - if workflow_dict['name'] == workflow_name: - break - if 'tools' in metadata: - tools_metadata = metadata['tools'] - else: - tools_metadata = [] - workflow, missing_tool_tups = get_workflow_from_dict(trans=trans, - workflow_dict=workflow_dict, - tools_metadata=tools_metadata, - repository_id=repository_id, - changeset_revision=changeset_revision) - workflow_canvas = WorkflowCanvas() - canvas = workflow_canvas.canvas - # Store px width for boxes of each step. - for step in workflow.steps: - step.upgrade_messages = {} - module = module_factory.from_workflow_step(trans, repository_id, changeset_revision, tools_metadata, step) - tool_errors = module.type == 'tool' and not module.tool - module_data_inputs = get_workflow_data_inputs(step, module) - module_data_outputs = get_workflow_data_outputs(step, module, workflow.steps) - module_name = get_workflow_module_name(module, missing_tool_tups) - workflow_canvas.populate_data_for_step( - step, - module_name, - module_data_inputs, - module_data_outputs, - tool_errors=tool_errors - ) - workflow_canvas.add_steps(highlight_errors=True) - workflow_canvas.finish() - trans.response.set_content_type("image/svg+xml") - return canvas.tostring() - - -def get_workflow_data_inputs(step, module): - if module.type == 'tool': - if module.tool: - return module.get_data_inputs() - else: - data_inputs = [] - for wfsc in step.input_connections: - data_inputs_dict = {} - data_inputs_dict['extensions'] = [''] - data_inputs_dict['name'] = wfsc.input_name - data_inputs_dict['label'] = 'Unknown' - data_inputs.append(data_inputs_dict) - return data_inputs - return module.get_data_inputs() - - -def get_workflow_data_outputs(step, module, steps): - if module.type == 'tool': - if module.tool: - return module.get_data_outputs() - else: - data_outputs = [] - data_outputs_dict = {} - data_outputs_dict['extensions'] = ['input'] - found = False - for workflow_step in steps: - for wfsc in workflow_step.input_connections: - if step.label == wfsc.output_step.label: - data_outputs_dict['name'] = wfsc.output_name - found = True - break - if found: - break - if not found: - # We're at the last step of the workflow. - data_outputs_dict['name'] = 'output' - data_outputs.append(data_outputs_dict) - return data_outputs - return module.get_data_outputs() - - -def get_workflow_from_dict(trans, workflow_dict, tools_metadata, repository_id, changeset_revision): - """ - Return an in-memory Workflow object from the dictionary object created when it was exported. This method is called from - both Galaxy and the tool shed to retrieve a Workflow object that can be displayed as an SVG image. This method is also - called from Galaxy to retrieve a Workflow object that can be used for saving to the Galaxy database. - """ - trans.workflow_building_mode = True - workflow = trans.model.Workflow() - workflow.name = workflow_dict['name'] - workflow.has_errors = False - steps = [] - # Keep ids for each step that we need to use to make connections. - steps_by_external_id = {} - # Keep track of tools required by the workflow that are not available in - # the tool shed repository. Each tuple in the list of missing_tool_tups - # will be ( tool_id, tool_name, tool_version ). - missing_tool_tups = [] - # First pass to build step objects and populate basic values - for step_dict in workflow_dict['steps'].values(): - # Create the model class for the step - step = trans.model.WorkflowStep() - step.label = step_dict.get('label', None) - step.position = step_dict['position'] - module = module_factory.from_dict(trans, repository_id, changeset_revision, step_dict, tools_metadata=tools_metadata) - if module.type == 'tool' and module.tool is None: - # A required tool is not available in the current repository. - step.tool_errors = 'unavailable' - missing_tool_tup = (step_dict['tool_id'], step_dict['name'], step_dict['tool_version']) - if missing_tool_tup not in missing_tool_tups: - missing_tool_tups.append(missing_tool_tup) - module.save_to_step(step) - if step.tool_errors: - workflow.has_errors = True - # Stick this in the step temporarily. - step.temp_input_connections = step_dict['input_connections'] - if trans.webapp.name == 'galaxy': - annotation = step_dict.get('annotation', '') - if annotation: - annotation = sanitize_html(annotation) - new_step_annotation = trans.model.WorkflowStepAnnotationAssociation() - new_step_annotation.annotation = annotation - new_step_annotation.user = trans.user - step.annotations.append(new_step_annotation) - # Unpack and add post-job actions. - post_job_actions = step_dict.get('post_job_actions', {}) - for pja_dict in post_job_actions.values(): - trans.model.PostJobAction(pja_dict['action_type'], - step, - pja_dict['output_name'], - pja_dict['action_arguments']) - steps.append(step) - steps_by_external_id[step_dict['id']] = step - # Second pass to deal with connections between steps. - for step in steps: - # Input connections. - for input_name, conn_dict in step.temp_input_connections.items(): - if conn_dict: - step_input = step.get_or_add_input(input_name) - output_step = steps_by_external_id[conn_dict['id']] - conn = trans.model.WorkflowStepConnection() - conn.input_step_input = step_input - conn.output_step = output_step - conn.output_name = conn_dict['output_name'] - del step.temp_input_connections - # Order the steps if possible. - attach_ordered_steps(workflow, steps) - # Return the in-memory Workflow object for display or later persistence to the Galaxy database. - return workflow, missing_tool_tups - - -def get_workflow_module_name(module, missing_tool_tups): - module_name = module.get_name() - if module.type == 'tool' and module_name == 'unavailable': - for missing_tool_tup in missing_tool_tups: - missing_tool_id, missing_tool_name, missing_tool_version = missing_tool_tup - if missing_tool_id == module.tool_id: - module_name = '%s' % missing_tool_name - break - return module_name - - -def import_workflow(trans, repository, workflow_name): - """Import a workflow contained in an installed tool shed repository into Galaxy (this method is called only from Galaxy).""" - status = 'done' - message = '' - changeset_revision = repository.changeset_revision - metadata = repository.metadata - workflows = metadata.get('workflows', []) - tools_metadata = metadata.get('tools', []) - workflow_dict = None - for workflow_data_tuple in workflows: - # The value of workflow_data_tuple is ( relative_path_to_workflow_file, exported_workflow_dict ). - relative_path_to_workflow_file, exported_workflow_dict = workflow_data_tuple - if exported_workflow_dict['name'] == workflow_name: - # If the exported workflow is available on disk, import it. - if os.path.exists(relative_path_to_workflow_file): - workflow_file = open(relative_path_to_workflow_file, 'rb') - workflow_data = workflow_file.read() - workflow_file.close() - workflow_dict = json.loads(workflow_data) - else: - # Use the current exported_workflow_dict. - workflow_dict = exported_workflow_dict - break - if workflow_dict: - # Create workflow if possible. - workflow, missing_tool_tups = get_workflow_from_dict(trans=trans, - workflow_dict=workflow_dict, - tools_metadata=tools_metadata, - repository_id=repository.id, - changeset_revision=changeset_revision) - # Save the workflow in the Galaxy database. Pass workflow_dict along to create annotation at this point. - stored_workflow = save_workflow(trans, workflow, workflow_dict) - # Use the latest version of the saved workflow. - workflow = stored_workflow.latest_workflow - if workflow_name: - workflow.name = workflow_name - # Provide user feedback and show workflow list. - if workflow.has_errors: - message += "Imported, but some steps in this workflow have validation errors. " - status = "error" - if workflow.has_cycles: - message += "Imported, but this workflow contains cycles. " - status = "error" - else: - message += "Workflow %s imported successfully. " % workflow.name - if missing_tool_tups: - name_and_id_str = '' - for missing_tool_tup in missing_tool_tups: - tool_id, tool_name, other = missing_tool_tup - name_and_id_str += 'name: %s, id: %s' % (str(tool_id), str(tool_name)) - message += "The following tools required by this workflow are missing from this Galaxy instance: %s. " % name_and_id_str - else: - workflow = None - message += 'The workflow named %s is not included in the metadata for revision %s of repository %s' % \ - (str(workflow_name), str(changeset_revision), str(repository.name)) - status = 'error' - return workflow, status, message - - -def save_workflow(trans, workflow, workflow_dict=None): - """Use the received in-memory Workflow object for saving to the Galaxy database.""" - stored = trans.model.StoredWorkflow() - stored.name = workflow.name - workflow.stored_workflow = stored - stored.latest_workflow = workflow - stored.user = trans.user - if workflow_dict and workflow_dict.get('annotation', ''): - annotation = sanitize_html(workflow_dict['annotation']) - new_annotation = trans.model.StoredWorkflowAnnotationAssociation() - new_annotation.annotation = annotation - new_annotation.user = trans.user - stored.annotations.append(new_annotation) - trans.sa_session.add(stored) - trans.sa_session.flush() - # Add a new entry to the Workflows menu. - if trans.user.stored_workflow_menu_entries is None: - trans.user.stored_workflow_menu_entries = [] - menuEntry = trans.model.StoredWorkflowMenuEntry() - menuEntry.stored_workflow = stored - trans.user.stored_workflow_menu_entries.append(menuEntry) - trans.sa_session.flush() - return stored diff --git a/lib/tool_shed/webapp/controllers/repository.py b/lib/tool_shed/webapp/controllers/repository.py index 44f226a903a..c9ca39e003c 100644 --- a/lib/tool_shed/webapp/controllers/repository.py +++ b/lib/tool_shed/webapp/controllers/repository.py @@ -42,8 +42,7 @@ from tool_shed.util import ( repository_util, search_util, shed_util_common as suc, - tool_util, - workflow_util + tool_util ) from tool_shed.util.web_util import escape from tool_shed.utility_containers import ToolShedUtilityContainerManager @@ -1077,9 +1076,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): global_actions = [grids.GridAction("Browse valid repositories", dict(controller='repository', action='browse_valid_categories')), grids.GridAction("Search for valid tools", - dict(controller='repository', action='find_tools')), - grids.GridAction("Search for workflows", - dict(controller='repository', action='find_workflows'))] + dict(controller='repository', action='find_tools'))] self.install_matched_repository_grid.global_actions = global_actions install_url_args = dict(controller='repository', action='find_tools') operations = [grids.GridOperation("Install", url_args=install_url_args, allow_multiple=True, async_compatible=False)] @@ -1105,101 +1102,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): message=message, status=status) - @web.expose - def find_workflows(self, trans, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - common_util.handle_galaxy_url(trans, **kwd) - if 'operation' in kwd: - item_id = kwd.get('id', '') - if item_id: - operation = kwd['operation'].lower() - is_admin = trans.user_is_admin - if operation == "view_or_manage_repository": - # The received id is a RepositoryMetadata id, so we have to get the repository id. - repository_metadata = metadata_util.get_repository_metadata_by_id(trans.app, item_id) - repository_id = trans.security.encode_id(repository_metadata.repository.id) - repository = repository_util.get_repository_in_tool_shed(trans.app, repository_id) - kwd['id'] = repository_id - kwd['changeset_revision'] = repository_metadata.changeset_revision - if trans.webapp.name == 'tool_shed' and (is_admin or repository.user == trans.user): - a = 'manage_repository' - else: - a = 'view_repository' - return trans.response.send_redirect(web.url_for(controller='repository', - action=a, - **kwd)) - if operation == "install to galaxy": - # We've received a list of RepositoryMetadata ids, so we need to build a list of associated Repository ids. - encoded_repository_ids = [] - changeset_revisions = [] - for repository_metadata_id in util.listify(item_id): - repository_metadata = metadata_util.get_repository_metadata_by_id(trans.app, item_id) - encoded_repository_ids.append(trans.security.encode_id(repository_metadata.repository.id)) - changeset_revisions.append(repository_metadata.changeset_revision) - new_kwd = {} - new_kwd['repository_ids'] = encoded_repository_ids - new_kwd['changeset_revisions'] = changeset_revisions - return trans.response.send_redirect(web.url_for(controller='repository', - action='install_repositories_by_revision', - **new_kwd)) - else: - # This can only occur when there is a multi-select grid with check boxes and an operation, - # and the user clicked the operation button without checking any of the check boxes. - return trans.show_error_message("No items were selected.") - if 'find_workflows_button' in kwd: - workflow_names = [item.lower() for item in util.listify(kwd.get('workflow_name', ''))] - exact_matches = kwd.get('exact_matches', '') - exact_matches_checked = CheckboxField.is_checked(exact_matches) - match_tuples = [] - ok = True - if workflow_names: - ok, match_tuples = search_util.search_repository_metadata(trans.app, - exact_matches_checked, - workflow_names=workflow_names) - else: - ok, match_tuples = search_util.search_repository_metadata(trans.app, - exact_matches_checked, - workflow_names=[], - all_workflows=True) - if ok: - kwd['match_tuples'] = match_tuples - if trans.webapp.name == 'galaxy': - # Our initial request originated from a Galaxy instance. - global_actions = [grids.GridAction("Browse valid repositories", - dict(controller='repository', action='browse_valid_repositories')), - grids.GridAction("Search for valid tools", - dict(controller='repository', action='find_tools')), - grids.GridAction("Search for workflows", - dict(controller='repository', action='find_workflows'))] - self.install_matched_repository_grid.global_actions = global_actions - install_url_args = dict(controller='repository', action='find_workflows') - operations = [grids.GridOperation("Install", url_args=install_url_args, allow_multiple=True, async_compatible=False)] - self.install_matched_repository_grid.operations = operations - return self.install_matched_repository_grid(trans, **kwd) - else: - kwd['message'] = "workflow name: %s
exact matches only: %s" % \ - (escape(basic_util.stringify(workflow_names)), str(exact_matches_checked)) - self.matched_repository_grid.title = "Repositories with matching workflows" - return self.matched_repository_grid(trans, **kwd) - else: - message = "No search performed - each field must contain the same number of comma-separated items." - status = "error" - else: - exact_matches_checked = False - workflow_names = [] - exact_matches_check_box = CheckboxField('exact_matches', value=exact_matches_checked) - return trans.fill_template('/webapps/tool_shed/repository/find_workflows.mako', - workflow_name=basic_util.stringify(workflow_names), - exact_matches_check_box=exact_matches_check_box, - message=message, - status=status) - - @web.expose - def generate_workflow_image(self, trans, workflow_name, repository_metadata_id=None): - """Return an svg image representation of a workflow dictionary created when the workflow was exported.""" - return workflow_util.generate_workflow_image(trans, workflow_name, repository_metadata_id=repository_metadata_id, repository_id=None) - @web.expose def get_changeset_revision_and_ctx_rev(self, trans, **kwd): """Handle a request from a local Galaxy instance to retrieve the changeset revision hash to which an installed repository can be updated.""" @@ -2965,28 +2867,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): message=message, status=status) - @web.expose - def view_workflow(self, trans, workflow_name, repository_metadata_id, **kwd): - """Retrieve necessary information about a workflow from the database so that it can be displayed in an svg image.""" - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - render_repository_actions_for = kwd.get('render_repository_actions_for', 'tool_shed') - if workflow_name: - workflow_name = encoding_util.tool_shed_decode(workflow_name) - repository_metadata = metadata_util.get_repository_metadata_by_id(trans.app, repository_metadata_id) - repository = repository_util.get_repository_in_tool_shed(trans.app, trans.security.encode_id(repository_metadata.repository_id)) - changeset_revision = repository_metadata.changeset_revision - metadata = repository_metadata.metadata - return trans.fill_template("/webapps/tool_shed/repository/view_workflow.mako", - repository=repository, - render_repository_actions_for=render_repository_actions_for, - changeset_revision=changeset_revision, - repository_metadata_id=repository_metadata_id, - workflow_name=workflow_name, - metadata=metadata, - message=message, - status=status) - def validate_changeset_revision(self, trans, changeset_revision, repository_id): """In case changeset revision is invalid send them to the repository page""" if changeset_revision: diff --git a/lib/tool_shed/webapp/templates/admin/tool_shed_repository/repository_actions_menu.mako b/lib/tool_shed/webapp/templates/admin/tool_shed_repository/repository_actions_menu.mako index 73a9ea8b96f..71741769201 100644 --- a/lib/tool_shed/webapp/templates/admin/tool_shed_repository/repository_actions_menu.mako +++ b/lib/tool_shed/webapp/templates/admin/tool_shed_repository/repository_actions_menu.mako @@ -16,9 +16,6 @@ diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/index.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/index.mako index 40c98524166..e0534149caf 100644 --- a/lib/tool_shed/webapp/templates/webapps/tool_shed/index.mako +++ b/lib/tool_shed/webapp/templates/webapps/tool_shed/index.mako @@ -57,9 +57,6 @@ -
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/common.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/common.mako index 2516968b32c..ee6bb4ed471 100644 --- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/common.mako +++ b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/common.mako @@ -299,12 +299,6 @@ else: folder_label = "%s - repository tools require handling of these dependencies" % folder_label col_span_str = 'colspan="4"' - elif folder.workflows: - if folder.description: - folder_label = "%s - %s" % ( folder_label, folder.description ) - else: - folder_label = "%s - click the name to view an SVG image of the workflow" % folder_label - col_span_str = 'colspan="4"' elif folder.valid_data_managers: if folder.description: folder_label = "%s - %s" % ( folder_label, folder.description ) @@ -358,12 +352,6 @@ %for invalid_tool in folder.invalid_tools: ${render_invalid_tool( invalid_tool, pad, my_row, row_counter, render_repository_actions_for=render_repository_actions_for )} %endfor - %if folder.workflows: - %for index, workflow in enumerate( folder.workflows ): - <% row_is_header = index == 0 %> - ${render_workflow( workflow, pad, my_row, row_counter, row_is_header, render_repository_actions_for=render_repository_actions_for )} - %endfor - %endif %if folder.datatypes: %for index, datatype in enumerate( folder.datatypes ): <% row_is_header = index == 0 %> @@ -990,48 +978,6 @@ %> -<%def name="render_workflow( workflow, pad, parent, row_counter, row_is_header=False, render_repository_actions_for='tool_shed' )"> - <% - from tool_shed.util.encoding_util import tool_shed_encode - encoded_id = trans.security.encode_id( workflow.id ) - encoded_workflow_name = tool_shed_encode( workflow.workflow_name ) - if trans.webapp.name == 'tool_shed': - encoded_repository_metadata_id = trans.security.encode_id( workflow.repository_metadata_id ) - encoded_repository_id = None - else: - encoded_repository_metadata_id = None - encoded_repository_id = trans.security.encode_id( workflow.repository_id ) - if row_is_header: - cell_type = 'th' - else: - cell_type = 'td' - %> - - <${cell_type} style="padding-left: ${pad+20}px;"> - %if row_is_header: - ${workflow.workflow_name | h} - %elif trans.webapp.name == 'tool_shed' and encoded_repository_metadata_id: - ${workflow.workflow_name | h} - %elif trans.webapp.name == 'galaxy' and encoded_repository_id: - ${workflow.workflow_name | h} - %else: - ${workflow.workflow_name | h} - %endif - - <${cell_type}>${workflow.steps | h} - <${cell_type}>${workflow.format_version | h} - <${cell_type}>${workflow.annotation | h} - - <% - my_row = row_counter.count - row_counter.increment() - %> - - <%def name="render_dependency_status( dependency, prepare_for_install=False)"> ${dependency['name'] | h} ${dependency['version'] | h} @@ -1109,7 +1055,6 @@ has_datatypes = metadata and 'datatypes' in metadata has_readme_files = metadata and 'readme_files' in metadata - has_workflows = metadata and 'workflows' in metadata datatypes_root_folder = containers_dict.get( 'datatypes', None ) invalid_data_managers_root_folder = containers_dict.get( 'invalid_data_managers', None ) @@ -1125,9 +1070,8 @@ tool_test_results_root_folder = containers_dict.get( 'tool_test_results', None ) valid_data_managers_root_folder = containers_dict.get( 'valid_data_managers', None ) valid_tools_root_folder = containers_dict.get( 'valid_tools', None ) - workflows_root_folder = containers_dict.get( 'workflows', None ) - has_contents = datatypes_root_folder or invalid_tools_root_folder or valid_tools_root_folder or workflows_root_folder + has_contents = datatypes_root_folder or invalid_tools_root_folder or valid_tools_root_folder has_dependencies = \ invalid_repository_dependencies_root_folder or \ invalid_tool_dependencies_root_folder or \ @@ -1240,13 +1184,6 @@ ${render_folder( invalid_data_managers_root_folder, 0, parent=None, row_counter=row_counter, is_root_folder=True, render_repository_actions_for=render_repository_actions_for )} %endif - %if workflows_root_folder: -

- <% row_counter = RowCounter() %> - - ${render_folder( workflows_root_folder, 0, parent=None, row_counter=row_counter, is_root_folder=True, render_repository_actions_for=render_repository_actions_for )} -
- %endif %if datatypes_root_folder:

<% row_counter = RowCounter() %> diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/find_workflows.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/find_workflows.mako deleted file mode 100644 index 4bd5781a743..00000000000 --- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/find_workflows.mako +++ /dev/null @@ -1,51 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/webapps/tool_shed/common/common.mako" import="*" /> -<%namespace file="/webapps/tool_shed/common/repository_actions_menu.mako" import="render_galaxy_repository_actions" /> - -<%! - def inherit(context): - if context.get('use_panels'): - return '/webapps/tool_shed/base_panels.mako' - else: - return '/base.mako' -%> -<%inherit file="${inherit(context)}"/> - -%if trans.webapp.name == 'galaxy': - ${render_galaxy_repository_actions( repository=None )} -%endif - -%if message: - ${render_msg( message, status )} -%endif - -

-
Search repositories for workflows
-
-
- Enter a workflow name to find repositories that contain workflows matching the search criteria, or leave blank to find all repositories that contain a workflow.

- Comma-separated strings may be entered to expand search criteria. -
-
-
-
-
- - -
-
-
- - ${render_checkbox(exact_matches_check_box)} -
- Check the box to match text exactly (text case doesn't matter as all strings are forced to lower case). -
-
-
-
- -
-
-
-
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/view_workflow.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/view_workflow.mako deleted file mode 100644 index 05a6f443dac..00000000000 --- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/view_workflow.mako +++ /dev/null @@ -1,43 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/webapps/tool_shed/common/common.mako" import="*" /> -<%namespace file="/webapps/tool_shed/repository/common.mako" import="*" /> -<%namespace file="/webapps/tool_shed/common/repository_actions_menu.mako" import="*" /> - -<%! - def inherit(context): - if context.get('use_panels'): - return '/webapps/tool_shed/base_panels.mako' - else: - return '/base.mako' -%> - -<%inherit file="${inherit(context)}"/> - -<% from tool_shed.util.encoding_util import tool_shed_encode %> - -<%def name="render_workflow( workflow_name, repository_metadata_id )"> - <% center_url = h.url_for( controller='repository', action='generate_workflow_image', workflow_name=tool_shed_encode( workflow_name ), repository_metadata_id=repository_metadata_id ) %> - - - -%if render_repository_actions_for == 'tool_shed': - ${render_tool_shed_repository_actions( repository=repository )} -%else: - ${render_galaxy_repository_actions( repository=repository )} -%endif - -%if message: - ${render_msg( message, status )} -%endif - -
${workflow_name | h}
-
- Boxes are red when tools are not available in this repository -
- (this page displays SVG graphics) -
-
-
- -${render_workflow( workflow_name, repository_metadata_id )} diff --git a/templates/admin/tool_shed_repository/repository_actions_menu.mako b/templates/admin/tool_shed_repository/repository_actions_menu.mako index 73a9ea8b96f..71741769201 100644 --- a/templates/admin/tool_shed_repository/repository_actions_menu.mako +++ b/templates/admin/tool_shed_repository/repository_actions_menu.mako @@ -16,9 +16,6 @@
  • Repository Actions
  • - %if workflow_name: -
  • Import workflow to Galaxy
  • - %endif %if repository.can_reinstall_or_activate: Activate or reinstall repository %endif diff --git a/templates/admin/tool_shed_repository/view_workflow.mako b/templates/admin/tool_shed_repository/view_workflow.mako deleted file mode 100644 index 973234c07c2..00000000000 --- a/templates/admin/tool_shed_repository/view_workflow.mako +++ /dev/null @@ -1,37 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/webapps/tool_shed/common/common.mako" import="*" /> -<%namespace file="/webapps/tool_shed/repository/common.mako" import="*" /> -<%namespace file="/admin/tool_shed_repository/repository_actions_menu.mako" import="*" /> - -<% from tool_shed.util.encoding_util import tool_shed_encode %> - -<%! - def inherit(context): - if context.get('use_panels'): - return '/webapps/tool_shed/base_panels.mako' - else: - return '/base.mako' -%> -<%inherit file="${inherit(context)}"/> - -<%def name="render_workflow( workflow_name, repository_id )"> - <% center_url = h.url_for( controller='admin_toolshed', action='generate_workflow_image', workflow_name=tool_shed_encode( workflow_name ), repository_id=repository_id ) %> - - - -${render_galaxy_repository_actions( repository )} - -%if message: - ${render_msg( message, status )} -%endif - -
    ${workflow_name | h}
    -
    -
    - (this page displays SVG graphics) -
    -
    -
    - -${render_workflow( workflow_name, repository_id )} diff --git a/templates/webapps/tool_shed/repository/common.mako b/templates/webapps/tool_shed/repository/common.mako index 2516968b32c..ee6bb4ed471 100644 --- a/templates/webapps/tool_shed/repository/common.mako +++ b/templates/webapps/tool_shed/repository/common.mako @@ -299,12 +299,6 @@ else: folder_label = "%s - repository tools require handling of these dependencies" % folder_label col_span_str = 'colspan="4"' - elif folder.workflows: - if folder.description: - folder_label = "%s - %s" % ( folder_label, folder.description ) - else: - folder_label = "%s - click the name to view an SVG image of the workflow" % folder_label - col_span_str = 'colspan="4"' elif folder.valid_data_managers: if folder.description: folder_label = "%s - %s" % ( folder_label, folder.description ) @@ -358,12 +352,6 @@ %for invalid_tool in folder.invalid_tools: ${render_invalid_tool( invalid_tool, pad, my_row, row_counter, render_repository_actions_for=render_repository_actions_for )} %endfor - %if folder.workflows: - %for index, workflow in enumerate( folder.workflows ): - <% row_is_header = index == 0 %> - ${render_workflow( workflow, pad, my_row, row_counter, row_is_header, render_repository_actions_for=render_repository_actions_for )} - %endfor - %endif %if folder.datatypes: %for index, datatype in enumerate( folder.datatypes ): <% row_is_header = index == 0 %> @@ -990,48 +978,6 @@ %> -<%def name="render_workflow( workflow, pad, parent, row_counter, row_is_header=False, render_repository_actions_for='tool_shed' )"> - <% - from tool_shed.util.encoding_util import tool_shed_encode - encoded_id = trans.security.encode_id( workflow.id ) - encoded_workflow_name = tool_shed_encode( workflow.workflow_name ) - if trans.webapp.name == 'tool_shed': - encoded_repository_metadata_id = trans.security.encode_id( workflow.repository_metadata_id ) - encoded_repository_id = None - else: - encoded_repository_metadata_id = None - encoded_repository_id = trans.security.encode_id( workflow.repository_id ) - if row_is_header: - cell_type = 'th' - else: - cell_type = 'td' - %> - - <${cell_type} style="padding-left: ${pad+20}px;"> - %if row_is_header: - ${workflow.workflow_name | h} - %elif trans.webapp.name == 'tool_shed' and encoded_repository_metadata_id: - ${workflow.workflow_name | h} - %elif trans.webapp.name == 'galaxy' and encoded_repository_id: - ${workflow.workflow_name | h} - %else: - ${workflow.workflow_name | h} - %endif - - <${cell_type}>${workflow.steps | h} - <${cell_type}>${workflow.format_version | h} - <${cell_type}>${workflow.annotation | h} - - <% - my_row = row_counter.count - row_counter.increment() - %> - - <%def name="render_dependency_status( dependency, prepare_for_install=False)"> ${dependency['name'] | h} ${dependency['version'] | h} @@ -1109,7 +1055,6 @@ has_datatypes = metadata and 'datatypes' in metadata has_readme_files = metadata and 'readme_files' in metadata - has_workflows = metadata and 'workflows' in metadata datatypes_root_folder = containers_dict.get( 'datatypes', None ) invalid_data_managers_root_folder = containers_dict.get( 'invalid_data_managers', None ) @@ -1125,9 +1070,8 @@ tool_test_results_root_folder = containers_dict.get( 'tool_test_results', None ) valid_data_managers_root_folder = containers_dict.get( 'valid_data_managers', None ) valid_tools_root_folder = containers_dict.get( 'valid_tools', None ) - workflows_root_folder = containers_dict.get( 'workflows', None ) - has_contents = datatypes_root_folder or invalid_tools_root_folder or valid_tools_root_folder or workflows_root_folder + has_contents = datatypes_root_folder or invalid_tools_root_folder or valid_tools_root_folder has_dependencies = \ invalid_repository_dependencies_root_folder or \ invalid_tool_dependencies_root_folder or \ @@ -1240,13 +1184,6 @@ ${render_folder( invalid_data_managers_root_folder, 0, parent=None, row_counter=row_counter, is_root_folder=True, render_repository_actions_for=render_repository_actions_for )} %endif - %if workflows_root_folder: -

    - <% row_counter = RowCounter() %> - - ${render_folder( workflows_root_folder, 0, parent=None, row_counter=row_counter, is_root_folder=True, render_repository_actions_for=render_repository_actions_for )} -
    - %endif %if datatypes_root_folder:

    <% row_counter = RowCounter() %>