Example #1
0
 def reset_all_metadata_on_installed_repository( self, id ):
     """Reset all metadata on a single tool shed repository installed into a Galaxy instance."""
     invalid_file_tups = []
     metadata_dict = {}
     repository = repository_util.get_installed_tool_shed_repository( self.app, id )
     repository_clone_url = common_util.generate_clone_url_for_installed_repository( self.app, repository )
     tool_path, relative_install_dir = repository.get_tool_relative_path( self.app )
     if relative_install_dir:
         original_metadata_dict = repository.metadata
         metadata_dict, invalid_file_tups = \
             self.generate_metadata_for_changeset_revision( repository=repository,
                                                            changeset_revision=repository.changeset_revision,
                                                            repository_clone_url=repository_clone_url,
                                                            shed_config_dict = repository.get_shed_config_dict( self.app ),
                                                            relative_install_dir=relative_install_dir,
                                                            repository_files_dir=None,
                                                            resetting_all_metadata_on_repository=False,
                                                            updating_installed_repository=False,
                                                            persist=False )
         repository.metadata = metadata_dict
         if metadata_dict != original_metadata_dict:
             self.update_in_shed_tool_config( repository )
             self.app.install_model.context.add( repository )
             self.app.install_model.context.flush()
             log.debug( 'Metadata has been reset on repository %s.' % repository.name )
         else:
             log.debug( 'Metadata did not need to be reset on repository %s.' % repository.name )
     else:
         log.debug( 'Error locating installation directory for repository %s.' % repository.name )
     return invalid_file_tups, metadata_dict
 def get_repo_info_dict_for_repair(self, rdim, repository):
     tool_panel_section_key = None
     repository_clone_url = common_util.generate_clone_url_for_installed_repository(
         self.app, repository)
     repository_dependencies = rdim.get_repository_dependencies_for_installed_tool_shed_repository(
         self.app, repository)
     metadata = repository.metadata
     if metadata:
         tool_dependencies = metadata.get('tool_dependencies', None)
         tool_panel_section_dict = metadata.get('tool_panel_section', None)
         if tool_panel_section_dict:
             # The repository must be in the uninstalled state.  The structure of tool_panel_section_dict is:
             # {<tool guid> :
             # [{ 'id':<section id>, 'name':<section name>, 'version':<section version>, 'tool_config':<tool config file name> }]}
             # Here is an example:
             # {"localhost:9009/repos/test/filter/Filter1/1.1.0":
             # [{"id": "filter_and_sort", "name": "Filter and Sort", "tool_config": "filtering.xml", "version": ""}]}
             # Currently all tools contained within an installed tool shed repository must be loaded into the same
             # section in the tool panel, so we can get the section id of the first guid in the tool_panel_section_dict.
             # In the future, we'll have to handle different sections per guid.
             guid = tool_panel_section_dict.keys()[0]
             section_dicts = tool_panel_section_dict[guid]
             section_dict = section_dicts[0]
             tool_panel_section_id = section_dict['id']
             tool_panel_section_name = section_dict['name']
             if tool_panel_section_id:
                 tpm = tool_panel_manager.ToolPanelManager(self.app)
                 tool_panel_section_key, _ = \
                     tpm.get_or_create_tool_section( self.app.toolbox,
                                                     tool_panel_section_id=tool_panel_section_id,
                                                     new_tool_panel_section_label=tool_panel_section_name )
     else:
         tool_dependencies = None
     repo_info_dict = repository_util.create_repo_info_dict(
         app=self.app,
         repository_clone_url=repository_clone_url,
         changeset_revision=repository.changeset_revision,
         ctx_rev=repository.ctx_rev,
         repository_owner=repository.owner,
         repository_name=repository.name,
         repository=None,
         repository_metadata=None,
         tool_dependencies=tool_dependencies,
         repository_dependencies=repository_dependencies)
     return repo_info_dict, tool_panel_section_key
 def update_in_shed_tool_config(self):
     """
     A tool shed repository is being updated so change the shed_tool_conf file.  Parse the config
     file to generate the entire list of config_elems instead of using the in-memory list.
     """
     shed_conf_dict = self.shed_config_dict or self.repository.get_shed_config_dict(
         self.app)
     shed_tool_conf = shed_conf_dict['config_filename']
     tool_path = shed_conf_dict['tool_path']
     self.tpm.generate_tool_panel_dict_from_shed_tool_conf_entries(
         self.repository)
     repository_tools_tups = self.get_repository_tools_tups()
     clone_url = common_util.generate_clone_url_for_installed_repository(
         self.app, self.repository)
     tool_shed = self.tool_shed_from_repository_clone_url()
     owner = self.repository.owner
     if not owner:
         cleaned_repository_clone_url = common_util.remove_protocol_and_user_from_clone_url(
             clone_url)
         owner = repository_util.get_repository_owner(
             cleaned_repository_clone_url)
     guid_to_tool_elem_dict = {}
     for tool_config_filename, guid, tool in repository_tools_tups:
         guid_to_tool_elem_dict[guid] = self.tpm.generate_tool_elem(
             tool_shed, self.repository.name,
             self.repository.changeset_revision, self.repository.owner
             or '', tool_config_filename, tool, None)
     config_elems = []
     tree, error_message = xml_util.parse_xml(shed_tool_conf)
     if tree:
         root = tree.getroot()
         for elem in root:
             if elem.tag == 'section':
                 for i, tool_elem in enumerate(elem):
                     guid = tool_elem.attrib.get('guid')
                     if guid in guid_to_tool_elem_dict:
                         elem[i] = guid_to_tool_elem_dict[guid]
             elif elem.tag == 'tool':
                 guid = elem.attrib.get('guid')
                 if guid in guid_to_tool_elem_dict:
                     elem = guid_to_tool_elem_dict[guid]
             config_elems.append(elem)
         self.tpm.config_elems_to_xml_file(config_elems, shed_tool_conf,
                                           tool_path)
 def get_repo_info_dict_for_repair( self, rdim, repository ):
     tool_panel_section_key = None
     repository_clone_url = common_util.generate_clone_url_for_installed_repository( self.app, repository )
     repository_dependencies = rdim.get_repository_dependencies_for_installed_tool_shed_repository( self.app,
                                                                                                    repository )
     metadata = repository.metadata
     if metadata:
         tool_dependencies = metadata.get( 'tool_dependencies', None )
         tool_panel_section_dict = metadata.get( 'tool_panel_section', None )
         if tool_panel_section_dict:
             # The repository must be in the uninstalled state.  The structure of tool_panel_section_dict is:
             # {<tool guid> :
             # [{ 'id':<section id>, 'name':<section name>, 'version':<section version>, 'tool_config':<tool config file name> }]}
             # Here is an example:
             # {"localhost:9009/repos/test/filter/Filter1/1.1.0":
             # [{"id": "filter_and_sort", "name": "Filter and Sort", "tool_config": "filtering.xml", "version": ""}]}
             # Currently all tools contained within an installed tool shed repository must be loaded into the same
             # section in the tool panel, so we can get the section id of the first guid in the tool_panel_section_dict.
             # In the future, we'll have to handle different sections per guid.
             guid = tool_panel_section_dict.keys()[ 0 ]
             section_dicts = tool_panel_section_dict[ guid ]
             section_dict = section_dicts[ 0 ]
             tool_panel_section_id = section_dict[ 'id' ]
             tool_panel_section_name = section_dict[ 'name' ]
             if tool_panel_section_id:
                 tpm = tool_panel_manager.ToolPanelManager( self.app )
                 tool_panel_section_key, _ = \
                     tpm.get_or_create_tool_section( self.app.toolbox,
                                                     tool_panel_section_id=tool_panel_section_id,
                                                     new_tool_panel_section_label=tool_panel_section_name )
     else:
         tool_dependencies = None
     repo_info_dict = repository_util.create_repo_info_dict( app=self.app,
                                                             repository_clone_url=repository_clone_url,
                                                             changeset_revision=repository.changeset_revision,
                                                             ctx_rev=repository.ctx_rev,
                                                             repository_owner=repository.owner,
                                                             repository_name=repository.name,
                                                             repository=None,
                                                             repository_metadata=None,
                                                             tool_dependencies=tool_dependencies,
                                                             repository_dependencies=repository_dependencies )
     return repo_info_dict, tool_panel_section_key
 def update_in_shed_tool_config( self ):
     """
     A tool shed repository is being updated so change the shed_tool_conf file.  Parse the config
     file to generate the entire list of config_elems instead of using the in-memory list.
     """
     shed_conf_dict = self.repository.get_shed_config_dict( self.app )
     shed_tool_conf = shed_conf_dict[ 'config_filename' ]
     tool_path = shed_conf_dict[ 'tool_path' ]
     self.tpm.generate_tool_panel_dict_from_shed_tool_conf_entries( self.repository )
     repository_tools_tups = self.get_repository_tools_tups()
     clone_url = common_util.generate_clone_url_for_installed_repository( self.app, self.repository )
     tool_shed = self.tool_shed_from_repository_clone_url()
     owner = self.repository.owner
     if not owner:
         cleaned_repository_clone_url = common_util.remove_protocol_and_user_from_clone_url( clone_url )
         owner = repository_util.get_repository_owner( cleaned_repository_clone_url )
     guid_to_tool_elem_dict = {}
     for tool_config_filename, guid, tool in repository_tools_tups:
         guid_to_tool_elem_dict[ guid ] = self.tpm.generate_tool_elem( tool_shed,
                                                                       self.repository.name,
                                                                       self.repository.changeset_revision,
                                                                       self.repository.owner or '',
                                                                       tool_config_filename,
                                                                       tool,
                                                                       None )
     config_elems = []
     tree, error_message = xml_util.parse_xml( shed_tool_conf )
     if tree:
         root = tree.getroot()
         for elem in root:
             if elem.tag == 'section':
                 for i, tool_elem in enumerate( elem ):
                     guid = tool_elem.attrib.get( 'guid' )
                     if guid in guid_to_tool_elem_dict:
                         elem[i] = guid_to_tool_elem_dict[ guid ]
             elif elem.tag == 'tool':
                 guid = elem.attrib.get( 'guid' )
                 if guid in guid_to_tool_elem_dict:
                     elem = guid_to_tool_elem_dict[ guid ]
             config_elems.append( elem )
         self.tpm.config_elems_to_xml_file( config_elems, shed_tool_conf, tool_path )
 def set_repository(self, repository):
     super(InstalledRepositoryMetadataManager,
           self).set_repository(repository)
     self.repository_clone_url = common_util.generate_clone_url_for_installed_repository(
         self.app, repository)
 def set_repository( self, repository ):
     super( InstalledRepositoryMetadataManager, self ).set_repository( repository )
     self.repository_clone_url = common_util.generate_clone_url_for_installed_repository( self.app, repository )