diff --git a/lib/galaxy/tool_shed/galaxy_install/installed_repository_manager.py b/lib/galaxy/tool_shed/galaxy_install/installed_repository_manager.py index ef0d56cb1e3..0ee698e62d6 100644 --- a/lib/galaxy/tool_shed/galaxy_install/installed_repository_manager.py +++ b/lib/galaxy/tool_shed/galaxy_install/installed_repository_manager.py @@ -15,7 +15,10 @@ from typing import ( ) from galaxy import util -from galaxy.model.tool_shed_install import ToolShedRepository +from galaxy.model.tool_shed_install import ( + ToolDependency, + ToolShedRepository, +) from galaxy.structured_app import MinimalManagerApp from galaxy.tool_shed.galaxy_install.metadata.installed_repository_metadata_manager import ( InstalledRepositoryMetadataManager, @@ -102,7 +105,7 @@ class InstalledRepositoryManager: self.app, repository ) repository.deleted = False - repository.status = self.install_model.ToolShedRepository.installation_status.INSTALLED + repository.status = ToolShedRepository.installation_status.INSTALLED if repository.includes_tools_for_display_in_tool_panel: repository_clone_url = common_util.generate_clone_url_for_installed_repository(self.app, repository) tpm = tool_panel_manager.ToolPanelManager(self.app) @@ -139,8 +142,8 @@ class InstalledRepositoryManager: repository, repository_tools_tups, ) - self.install_model.session.add(repository) - self.install_model.session.flush() + self.context.add(repository) + self.context.flush() def add_entry_to_installed_repository_dependencies_of_installed_repositories( self, repository: ToolShedRepository @@ -153,7 +156,7 @@ class InstalledRepositoryManager: repository_tup = self.get_repository_tuple_for_installed_repository_manager(repository) tool_shed, name, owner, installed_changeset_revision = repository_tup # Get the list of repository dependencies for this repository. - status = self.install_model.ToolShedRepository.installation_status.INSTALLED + status = ToolShedRepository.installation_status.INSTALLED repository_dependency_tups = self.get_repository_dependency_tups_for_installed_repository( repository, status=status ) @@ -199,9 +202,7 @@ class InstalledRepositoryManager: def get_containing_repository_for_tool_dependency(self, tool_dependency_tup: tuple) -> ToolShedRepository: tool_shed_repository_id, name, version, type = tool_dependency_tup - return self.app.install_model.context.query(self.app.install_model.ToolShedRepository).get( - tool_shed_repository_id - ) + return self.context.query(ToolShedRepository).get(tool_shed_repository_id) def get_dependencies_for_repository( self, @@ -364,7 +365,7 @@ class InstalledRepositoryManager: tsr.id, tsr.status, ] - if tsr.status == self.app.install_model.ToolShedRepository.installation_status.INSTALLED: + if tsr.status == ToolShedRepository.installation_status.INSTALLED: installed_rd_tups.append(rd_tup) else: # We'll only add the rd_tup to the missing_rd_tups list if the received repository @@ -458,7 +459,7 @@ class InstalledRepositoryManager: repository.id, repository.status, ] - if repository.status == self.install_model.ToolShedRepository.installation_status.INSTALLED: + if repository.status == ToolShedRepository.installation_status.INSTALLED: if new_rd_tup not in installed_rd_tups: installed_rd_tups.append(new_rd_tup) else: @@ -519,7 +520,7 @@ class InstalledRepositoryManager: tmp_tool_dependencies_dict: dict = copy.deepcopy(tool_dependencies_dict) for td_key, val in tmp_tool_dependencies_dict.items(): # Default the status to NEVER_INSTALLED. - tool_dependency_status = self.install_model.ToolDependency.installation_status.NEVER_INSTALLED + tool_dependency_status = ToolDependency.installation_status.NEVER_INSTALLED if td_key == "set_environment": # Set environment tool dependencies are a list. assert isinstance(val, list) @@ -541,7 +542,7 @@ class InstalledRepositoryManager: tool_dependency_status = tool_dependency.status requirement_dict["status"] = tool_dependency_status new_val.append(requirement_dict) - if tool_dependency_status in [self.install_model.ToolDependency.installation_status.INSTALLED]: + if tool_dependency_status in [ToolDependency.installation_status.INSTALLED]: if td_key in installed_tool_dependencies: installed_tool_dependencies[td_key].extend(new_val) else: @@ -565,7 +566,7 @@ class InstalledRepositoryManager: if tool_dependency: tool_dependency_status = tool_dependency.status val["status"] = tool_dependency_status - if tool_dependency_status in [self.install_model.ToolDependency.installation_status.INSTALLED]: + if tool_dependency_status in [ToolDependency.installation_status.INSTALLED]: installed_tool_dependencies[td_key] = val else: missing_tool_dependencies[td_key] = val @@ -688,151 +689,14 @@ class InstalledRepositoryManager: errors = f"{errors} {error_message}" repository.deleted = True if remove_from_disk: - repository.status = self.app.install_model.ToolShedRepository.installation_status.UNINSTALLED + repository.status = ToolShedRepository.installation_status.UNINSTALLED repository.error_message = None else: - repository.status = self.app.install_model.ToolShedRepository.installation_status.DEACTIVATED - self.app.install_model.session.add(repository) - self.app.install_model.session.flush() + repository.status = ToolShedRepository.installation_status.DEACTIVATED + self.context.add(repository) + self.context.flush() return errors - def purge_repository(self, repository: ToolShedRepository) -> Tuple[str, str]: - """Purge a repository with status New (a white ghost) from the database.""" - sa_session = self.app.model.session - status = "ok" - message = "" - purged_tool_versions = 0 - purged_tool_dependencies = 0 - purged_required_repositories = 0 - purged_orphan_repository_repository_dependency_association_records = 0 - purged_orphan_repository_dependency_records = 0 - if repository.is_new: - # Purge this repository's associated tool versions. - if repository.tool_versions: - for tool_version in repository.tool_versions: - if tool_version.parent_tool_association: - for tool_version_association in tool_version.parent_tool_association: - try: - sa_session.delete(tool_version_association) - sa_session.flush() - except Exception as e: - status = "error" - message = ( - "Error attempting to purge tool_versions for the repository named %s with status %s: %s." - % (str(repository.name), str(repository.status), str(e)) - ) - return status, message - if tool_version.child_tool_association: - for tool_version_association in tool_version.child_tool_association: - try: - sa_session.delete(tool_version_association) - sa_session.flush() - except Exception as e: - status = "error" - message = ( - "Error attempting to purge tool_versions for the repository named %s with status %s: %s." - % (str(repository.name), str(repository.status), str(e)) - ) - return status, message - try: - sa_session.delete(tool_version) - sa_session.flush() - purged_tool_versions += 1 - except Exception as e: - status = "error" - message = ( - "Error attempting to purge tool_versions for the repository named %s with status %s: %s." - % (str(repository.name), str(repository.status), str(e)) - ) - return status, message - # Purge this repository's associated tool dependencies. - if repository.tool_dependencies: - for tool_dependency in repository.tool_dependencies: - try: - sa_session.delete(tool_dependency) - sa_session.flush() - purged_tool_dependencies += 1 - except Exception as e: - status = "error" - message = ( - "Error attempting to purge tool_dependencies for the repository named %s with status %s: %s." - % (str(repository.name), str(repository.status), str(e)) - ) - return status, message - # Purge this repository's associated required repositories. - if repository.required_repositories: - for rrda in repository.required_repositories: - try: - sa_session.delete(rrda) - sa_session.flush() - purged_required_repositories += 1 - except Exception as e: - status = "error" - message = ( - "Error attempting to purge required_repositories for the repository named %s with status %s: %s." - % (str(repository.name), str(repository.status), str(e)) - ) - return status, message - # Purge any "orphan" repository_dependency records associated with the repository, but not with any - # repository_repository_dependency_association records. - for orphan_repository_dependency in sa_session.query(self.app.install_model.RepositoryDependency).filter( - self.app.install_model.RepositoryDependency.table.c.tool_shed_repository_id == repository.id - ): - # Purge any repository_repository_dependency_association records whose repository_dependency_id is - # the id of the orphan repository_dependency record. - for orphan_rrda in sa_session.query( - self.app.install_model.RepositoryRepositoryDependencyAssociation - ).filter( - self.app.install_model.RepositoryRepositoryDependencyAssociation.table.c.repository_dependency_id - == orphan_repository_dependency.id - ): - try: - sa_session.delete(orphan_rrda) - sa_session.flush() - purged_orphan_repository_repository_dependency_association_records += 1 - except Exception as e: - status = "error" - message = "Error attempting to purge repository_repository_dependency_association records associated with " - message += ( - "an orphan repository_dependency record for the repository named %s with status %s: %s." - % (str(repository.name), str(repository.status), str(e)) - ) - return status, message - try: - sa_session.delete(orphan_repository_dependency) - sa_session.flush() - purged_orphan_repository_dependency_records += 1 - except Exception as e: - status = "error" - message = ( - "Error attempting to purge orphan repository_dependency records for the repository named %s with status %s: %s." - % (str(repository.name), str(repository.status), str(e)) - ) - return status, message - # Purge the repository. - sa_session.delete(repository) - sa_session.flush() - message = f"The repository named {repository.name} with status {repository.status} has been purged.
" - message += "Total associated tool_version records purged: %d
" % purged_tool_versions - message += "Total associated tool_dependency records purged: %d
" % purged_tool_dependencies - message += ( - "Total associated repository_repository_dependency_association records purged: %d
" - % purged_required_repositories - ) - message += ( - "Total associated orphan repository_repository_dependency_association records purged: %d
" - % purged_orphan_repository_repository_dependency_association_records - ) - message += ( - "Total associated orphan repository_dependency records purged: %d
" - % purged_orphan_repository_dependency_records - ) - else: - status = "error" - message = "A repository must have the status New in order to be purged. This repository has " - message += f" the status {repository.status}." - return status, message - def remove_entry_from_installed_repository_dependencies_of_installed_repositories( self, repository: ToolShedRepository ): @@ -992,7 +856,7 @@ class InstalledRepositoryManager: dependency_install_dir ) if removed_from_disk: - context = self.app.install_model.context + context = self.context new_dependency_name = None new_dependency_type = None new_dependency_version = None @@ -1017,7 +881,7 @@ class InstalledRepositoryManager: ) tool_dependency.type = new_dependency_type tool_dependency.version = new_dependency_version - tool_dependency.status = self.app.install_model.ToolDependency.installation_status.UNINSTALLED + tool_dependency.status = ToolDependency.installation_status.UNINSTALLED tool_dependency.error_message = None context.add(tool_dependency) context.flush() diff --git a/lib/tool_shed/galaxy_install/grids/admin_toolshed_grids.py b/lib/tool_shed/galaxy_install/grids/admin_toolshed_grids.py index 18ec626b782..544c86735e5 100644 --- a/lib/tool_shed/galaxy_install/grids/admin_toolshed_grids.py +++ b/lib/tool_shed/galaxy_install/grids/admin_toolshed_grids.py @@ -166,13 +166,6 @@ class InstalledRepositoryGrid(grids.Grid): target="center", url_args=dict(controller="admin_toolshed", action="restore_repository"), ), - grids.GridOperation( - label="Purge", - condition=(lambda item: item.is_new), - allow_multiple=False, - target="center", - url_args=dict(controller="admin_toolshed", action="purge_repository"), - ), ] default_filter = dict(deleted="False") num_rows_per_page = 50 diff --git a/templates/admin/tool_shed_repository/purge_repository_confirmation.mako b/templates/admin/tool_shed_repository/purge_repository_confirmation.mako deleted file mode 100644 index 36a7f562b66..00000000000 --- a/templates/admin/tool_shed_repository/purge_repository_confirmation.mako +++ /dev/null @@ -1,74 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/admin/tool_shed_repository/repository_actions_menu.mako" import="*" /> - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "library" )} - - -<%def name="javascripts()"> - ${parent.javascripts()} - - -${render_galaxy_repository_actions( repository )} - -%if message: - ${render_msg( message, status )} -%endif - -
-

- Purging the repository named ${repository.name|h} will result in deletion of all records for the - following associated items from the database. Click the Purge button to purge this repository - and its associated items. -

-
- -
-
Purge tool shed repository ${repository.name|h}
-
- <% - tool_versions = 0 - tool_dependencies = 0 - required_repositories = 0 - orphan_repository_repository_dependency_association_records = 0 - orphan_repository_dependency_records = 0 - # Count this repository's tool version lineage chain links that will be purged. - for tool_version in repository.tool_versions: - for tool_version_association in tool_version.parent_tool_association: - tool_versions += 1 - for tool_version_association in tool_version.child_tool_association: - tool_versions += 1 - tool_versions += 1 - # Count this repository's associated tool dependencies that will be purged. - for tool_dependency in repository.tool_dependencies: - tool_dependencies += 1 - # Count this repository's associated required repositories that will be purged. - for rrda in repository.required_repositories: - required_repositories += 1 - # Count any "orphan" repository_dependency records associated with the repository but not with any - # repository_repository_dependency_association records that will be purged. - for orphan_repository_dependency in \ - trans.sa_session.query( trans.app.install_model.RepositoryDependency ) \ - .filter( trans.app.install_model.RepositoryDependency.table.c.tool_shed_repository_id == repository.id ): - for orphan_rrda in \ - trans.sa_session.query( trans.app.install_model.RepositoryRepositoryDependencyAssociation ) \ - .filter( trans.app.install_model.RepositoryRepositoryDependencyAssociation.table.c.repository_dependency_id == orphan_repository_dependency.id ): - orphan_repository_repository_dependency_association_records += 1 - orphan_repository_dependency_records += 1 - %> - - - - - - -
Tool version records${tool_versions|h}
Tool dependency records${tool_dependencies|h}
Repository dependency records${required_repositories|h}
Orphan repository_repository_dependency_association records${orphan_repository_repository_dependency_association_records|h}
Orphan repository_dependency records${orphan_repository_dependency_records|h}
-
-
- -
-
-
-