def populate_containers_dict_for_new_install( self, tool_shed_url, tool_path, readme_files_dict, installed_repository_dependencies, missing_repository_dependencies, installed_tool_dependencies, missing_tool_dependencies, updating=False, ): """ Return the populated containers for a repository being installed for the first time or for an installed repository that is being updated and the updates include newly defined repository (and possibly tool) dependencies. """ installed_tool_dependencies, missing_tool_dependencies = self.populate_tool_dependencies_dicts( tool_shed_url=tool_shed_url, tool_path=tool_path, repository_installed_tool_dependencies=installed_tool_dependencies, repository_missing_tool_dependencies=missing_tool_dependencies, required_repo_info_dicts=None, ) # Most of the repository contents are set to None since we don't yet know what they are. gucm = GalaxyUtilityContainerManager(self.app) containers_dict = gucm.build_repository_containers( repository=None, datatypes=None, invalid_tools=None, missing_repository_dependencies=missing_repository_dependencies, missing_tool_dependencies=missing_tool_dependencies, readme_files_dict=readme_files_dict, repository_dependencies=installed_repository_dependencies, tool_dependencies=installed_tool_dependencies, valid_tools=None, workflows=None, valid_data_managers=None, invalid_data_managers=None, data_managers_errors=None, new_install=True, reinstalling=False, ) if not updating: # If we installing a new repository and not updaing an installed repository, we can merge # the missing_repository_dependencies container contents to the installed_repository_dependencies # container. When updating an installed repository, merging will result in losing newly defined # dependencies included in the updates. containers_dict = self.merge_missing_repository_dependencies_to_installed_container(containers_dict) # Merge the missing_tool_dependencies container contents to the installed_tool_dependencies container. containers_dict = self.merge_missing_tool_dependencies_to_installed_container(containers_dict) return containers_dict
def populate_containers_dict_for_new_install( self, tool_shed_url, tool_path, readme_files_dict, installed_repository_dependencies, missing_repository_dependencies, installed_tool_dependencies, missing_tool_dependencies, updating=False): """ Return the populated containers for a repository being installed for the first time or for an installed repository that is being updated and the updates include newly defined repository (and possibly tool) dependencies. """ installed_tool_dependencies, missing_tool_dependencies = \ self.populate_tool_dependencies_dicts( tool_shed_url=tool_shed_url, tool_path=tool_path, repository_installed_tool_dependencies=installed_tool_dependencies, repository_missing_tool_dependencies=missing_tool_dependencies, required_repo_info_dicts=None ) # Most of the repository contents are set to None since we don't yet know what they are. gucm = GalaxyUtilityContainerManager(self.app) containers_dict = gucm.build_repository_containers( repository=None, datatypes=None, invalid_tools=None, missing_repository_dependencies=missing_repository_dependencies, missing_tool_dependencies=missing_tool_dependencies, readme_files_dict=readme_files_dict, repository_dependencies=installed_repository_dependencies, tool_dependencies=installed_tool_dependencies, valid_tools=None, workflows=None, valid_data_managers=None, invalid_data_managers=None, data_managers_errors=None, new_install=True, reinstalling=False) if not updating: # If we installing a new repository and not updaing an installed repository, we can merge # the missing_repository_dependencies container contents to the installed_repository_dependencies # container. When updating an installed repository, merging will result in losing newly defined # dependencies included in the updates. containers_dict = self.merge_missing_repository_dependencies_to_installed_container( containers_dict) # Merge the missing_tool_dependencies container contents to the installed_tool_dependencies container. containers_dict = self.merge_missing_tool_dependencies_to_installed_container( containers_dict) return containers_dict
def populate_containers_dict_from_repository_metadata( self, tool_shed_url, tool_path, repository, reinstalling=False, required_repo_info_dicts=None): """ Retrieve necessary information from the received repository's metadata to populate the containers_dict for display. This method is called only from Galaxy (not the tool shed) when displaying repository dependencies for installed repositories and when displaying them for uninstalled repositories that are being reinstalled. """ metadata = repository.metadata if metadata: # Handle proprietary datatypes. datatypes = metadata.get('datatypes', None) # Handle invalid tools. invalid_tools = metadata.get('invalid_tools', None) # Handle README files. if repository.has_readme_files: if reinstalling or repository.status not in \ [ self.app.install_model.ToolShedRepository.installation_status.DEACTIVATED, self.app.install_model.ToolShedRepository.installation_status.INSTALLED ]: # Since we're reinstalling, we need to send a request to the tool shed to get the README files. tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( self.app, tool_shed_url) params = dict(name=str(repository.name), owner=str(repository.owner), changeset_revision=str( repository.installed_changeset_revision)) pathspec = ['repository', 'get_readme_files'] raw_text = common_util.tool_shed_get(self.app, tool_shed_url, pathspec=pathspec, params=params) readme_files_dict = json.loads(raw_text) else: readme_files_dict = readme_util.build_readme_files_dict( self.app, repository, repository.changeset_revision, repository.metadata, tool_path) else: readme_files_dict = None # Handle repository dependencies. installed_repository_dependencies, missing_repository_dependencies = \ self.app.installed_repository_manager.get_installed_and_missing_repository_dependencies( repository ) # Handle the current repository's tool dependencies. repository_tool_dependencies = metadata.get( 'tool_dependencies', None) # Make sure to display missing tool dependencies as well. repository_invalid_tool_dependencies = metadata.get( 'invalid_tool_dependencies', None) if repository_invalid_tool_dependencies is not None: if repository_tool_dependencies is None: repository_tool_dependencies = {} repository_tool_dependencies.update( repository_invalid_tool_dependencies) repository_installed_tool_dependencies, repository_missing_tool_dependencies = \ self.get_installed_and_missing_tool_dependencies_for_installed_repository( repository, repository_tool_dependencies ) if reinstalling: installed_tool_dependencies, missing_tool_dependencies = \ self.populate_tool_dependencies_dicts( tool_shed_url, tool_path, repository_installed_tool_dependencies, repository_missing_tool_dependencies, required_repo_info_dicts ) else: installed_tool_dependencies = repository_installed_tool_dependencies missing_tool_dependencies = repository_missing_tool_dependencies # Handle valid tools. valid_tools = metadata.get('tools', None) # Handle workflows. workflows = metadata.get('workflows', None) # Handle Data Managers valid_data_managers = None invalid_data_managers = None data_managers_errors = None if 'data_manager' in metadata: valid_data_managers = metadata['data_manager'].get( 'data_managers', None) invalid_data_managers = metadata['data_manager'].get( 'invalid_data_managers', None) data_managers_errors = metadata['data_manager'].get( 'messages', None) gucm = GalaxyUtilityContainerManager(self.app) containers_dict = gucm.build_repository_containers( repository=repository, datatypes=datatypes, invalid_tools=invalid_tools, missing_repository_dependencies=missing_repository_dependencies, missing_tool_dependencies=missing_tool_dependencies, readme_files_dict=readme_files_dict, repository_dependencies=installed_repository_dependencies, tool_dependencies=installed_tool_dependencies, valid_tools=valid_tools, workflows=workflows, valid_data_managers=valid_data_managers, invalid_data_managers=invalid_data_managers, data_managers_errors=data_managers_errors, new_install=False, reinstalling=reinstalling) else: containers_dict = dict(datatypes=None, invalid_tools=None, readme_files_dict=None, repository_dependencies=None, tool_dependencies=None, valid_tools=None, workflows=None) return containers_dict
def populate_containers_dict_from_repository_metadata( self, tool_shed_url, tool_path, repository, reinstalling=False, required_repo_info_dicts=None ): """ Retrieve necessary information from the received repository's metadata to populate the containers_dict for display. This method is called only from Galaxy (not the tool shed) when displaying repository dependencies for installed repositories and when displaying them for uninstalled repositories that are being reinstalled. """ metadata = repository.metadata if metadata: # Handle proprietary datatypes. datatypes = metadata.get( 'datatypes', None ) # Handle invalid tools. invalid_tools = metadata.get( 'invalid_tools', None ) # Handle README files. if repository.has_readme_files: if reinstalling or repository.status not in \ [ self.app.install_model.ToolShedRepository.installation_status.DEACTIVATED, self.app.install_model.ToolShedRepository.installation_status.INSTALLED ]: # Since we're reinstalling, we need to send a request to the tool shed to get the README files. tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( self.app, tool_shed_url ) params = dict( name=str( repository.name ), owner=str( repository.owner ), changeset_revision=str( repository.installed_changeset_revision ) ) pathspec = [ 'repository', 'get_readme_files' ] raw_text = util.url_get( tool_shed_url, password_mgr=self.app.tool_shed_registry.url_auth( tool_shed_url ), pathspec=pathspec, params=params ) readme_files_dict = json.loads( raw_text ) else: readme_files_dict = readme_util.build_readme_files_dict( self.app, repository, repository.changeset_revision, repository.metadata, tool_path ) else: readme_files_dict = None # Handle repository dependencies. installed_repository_dependencies, missing_repository_dependencies = \ self.app.installed_repository_manager.get_installed_and_missing_repository_dependencies( repository ) # Handle the current repository's tool dependencies. repository_tool_dependencies = metadata.get( 'tool_dependencies', None ) # Make sure to display missing tool dependencies as well. repository_invalid_tool_dependencies = metadata.get( 'invalid_tool_dependencies', None ) if repository_invalid_tool_dependencies is not None: if repository_tool_dependencies is None: repository_tool_dependencies = {} repository_tool_dependencies.update( repository_invalid_tool_dependencies ) repository_installed_tool_dependencies, repository_missing_tool_dependencies = \ self.get_installed_and_missing_tool_dependencies_for_installed_repository( repository, repository_tool_dependencies ) if reinstalling: installed_tool_dependencies, missing_tool_dependencies = \ self.populate_tool_dependencies_dicts( tool_shed_url, tool_path, repository_installed_tool_dependencies, repository_missing_tool_dependencies, required_repo_info_dicts ) else: installed_tool_dependencies = repository_installed_tool_dependencies missing_tool_dependencies = repository_missing_tool_dependencies # Handle valid tools. valid_tools = metadata.get( 'tools', None ) # Handle workflows. workflows = metadata.get( 'workflows', None ) # Handle Data Managers valid_data_managers = None invalid_data_managers = None data_managers_errors = None if 'data_manager' in metadata: valid_data_managers = metadata['data_manager'].get( 'data_managers', None ) invalid_data_managers = metadata['data_manager'].get( 'invalid_data_managers', None ) data_managers_errors = metadata['data_manager'].get( 'messages', None ) gucm = GalaxyUtilityContainerManager( self.app ) containers_dict = gucm.build_repository_containers( repository=repository, datatypes=datatypes, invalid_tools=invalid_tools, missing_repository_dependencies=missing_repository_dependencies, missing_tool_dependencies=missing_tool_dependencies, readme_files_dict=readme_files_dict, repository_dependencies=installed_repository_dependencies, tool_dependencies=installed_tool_dependencies, valid_tools=valid_tools, workflows=workflows, valid_data_managers=valid_data_managers, invalid_data_managers=invalid_data_managers, data_managers_errors=data_managers_errors, new_install=False, reinstalling=reinstalling ) else: containers_dict = dict( datatypes=None, invalid_tools=None, readme_files_dict=None, repository_dependencies=None, tool_dependencies=None, valid_tools=None, workflows=None ) return containers_dict