Source code for tool_shed.galaxy_install.utility_containers

import logging
import threading

from tool_shed.utility_containers import utility_container_manager

log = logging.getLogger(__name__)


[docs]class GalaxyUtilityContainerManager(utility_container_manager.UtilityContainerManager):
[docs] def __init__(self, app): self.app = app
[docs] def build_repository_containers(self, repository, datatypes, invalid_tools, missing_repository_dependencies, missing_tool_dependencies, readme_files_dict, repository_dependencies, tool_dependencies, valid_tools, workflows, valid_data_managers, invalid_data_managers, data_managers_errors, new_install=False, reinstalling=False): """ Return a dictionary of containers for the received repository's dependencies and readme files for display during installation to Galaxy. """ containers_dict = dict(datatypes=None, invalid_tools=None, missing_tool_dependencies=None, readme_files=None, repository_dependencies=None, missing_repository_dependencies=None, tool_dependencies=None, valid_tools=None, workflows=None, valid_data_managers=None, invalid_data_managers=None) # Some of the tool dependency folders will include links to display tool dependency information, and # some of these links require the repository id. However we need to be careful because sometimes the # repository object is None. if repository: repository_id = repository.id changeset_revision = repository.changeset_revision else: repository_id = None changeset_revision = None lock = threading.Lock() lock.acquire(True) try: folder_id = 0 # Datatypes container. if datatypes: folder_id, datatypes_root_folder = self.build_datatypes_folder(folder_id, datatypes) containers_dict['datatypes'] = datatypes_root_folder # Invalid tools container. if invalid_tools: folder_id, invalid_tools_root_folder = \ self.build_invalid_tools_folder(folder_id, invalid_tools, changeset_revision, repository=repository, label='Invalid tools') containers_dict['invalid_tools'] = invalid_tools_root_folder # Readme files container. if readme_files_dict: folder_id, readme_files_root_folder = self.build_readme_files_folder(folder_id, readme_files_dict) containers_dict['readme_files'] = readme_files_root_folder # Installed repository dependencies container. if repository_dependencies: if new_install: label = 'Repository dependencies' else: label = 'Installed repository dependencies' folder_id, repository_dependencies_root_folder = \ self.build_repository_dependencies_folder(folder_id=folder_id, repository_dependencies=repository_dependencies, label=label, installed=True) containers_dict['repository_dependencies'] = repository_dependencies_root_folder # Missing repository dependencies container. if missing_repository_dependencies: folder_id, missing_repository_dependencies_root_folder = \ self.build_repository_dependencies_folder(folder_id=folder_id, repository_dependencies=missing_repository_dependencies, label='Missing repository dependencies', installed=False) containers_dict['missing_repository_dependencies'] = missing_repository_dependencies_root_folder # Installed tool dependencies container. if tool_dependencies: if new_install: label = 'Tool dependencies' else: label = 'Installed tool dependencies' # We only want to display the Status column if the tool_dependency is missing. folder_id, tool_dependencies_root_folder = \ self.build_tool_dependencies_folder(folder_id, tool_dependencies, label=label, missing=False, new_install=new_install, reinstalling=reinstalling) containers_dict['tool_dependencies'] = tool_dependencies_root_folder # Missing tool dependencies container. if missing_tool_dependencies: # We only want to display the Status column if the tool_dependency is missing. folder_id, missing_tool_dependencies_root_folder = \ self.build_tool_dependencies_folder(folder_id, missing_tool_dependencies, label='Missing tool dependencies', missing=True, new_install=new_install, reinstalling=reinstalling) containers_dict['missing_tool_dependencies'] = missing_tool_dependencies_root_folder # Valid tools container. if valid_tools: folder_id, valid_tools_root_folder = self.build_tools_folder(folder_id, valid_tools, repository, changeset_revision, label='Valid tools') containers_dict['valid_tools'] = valid_tools_root_folder # Workflows container. if workflows: folder_id, workflows_root_folder = \ self.build_workflows_folder(folder_id=folder_id, workflows=workflows, repository_metadata_id=None, repository_id=repository_id, label='Workflows') containers_dict['workflows'] = workflows_root_folder if valid_data_managers: folder_id, valid_data_managers_root_folder = \ self.build_data_managers_folder(folder_id=folder_id, data_managers=valid_data_managers, label='Valid Data Managers') containers_dict['valid_data_managers'] = valid_data_managers_root_folder if invalid_data_managers or data_managers_errors: folder_id, invalid_data_managers_root_folder = \ self.build_invalid_data_managers_folder(folder_id=folder_id, data_managers=invalid_data_managers, error_messages=data_managers_errors, label='Invalid Data Managers') containers_dict['invalid_data_managers'] = invalid_data_managers_root_folder except Exception as e: log.debug("Exception in build_repository_containers: %s" % str(e)) finally: lock.release() return containers_dict