コード例 #1
0
def generate_tool_guid(repository_clone_url, tool):
    """
    Generate a guid for the installed tool.  It is critical that this guid matches the guid for
    the tool in the Galaxy tool shed from which it is being installed.  The form of the guid is
    <tool shed host>/repos/<repository owner>/<repository name>/<tool id>/<tool version>
    """
    tmp_url = common_util.remove_protocol_and_user_from_clone_url(repository_clone_url)
    return '%s/%s/%s' % (tmp_url, tool.id, tool.version)
コード例 #2
0
def generate_tool_guid(repository_clone_url, tool):
    """
    Generate a guid for the installed tool.  It is critical that this guid matches the guid for
    the tool in the Galaxy tool shed from which it is being installed.  The form of the guid is
    <tool shed host>/repos/<repository owner>/<repository name>/<tool id>/<tool version>
    """
    tmp_url = common_util.remove_protocol_and_user_from_clone_url(repository_clone_url)
    return '%s/%s/%s' % (tmp_url, tool.id, tool.version)
コード例 #3
0
 def generate_tool_panel_elem_list( self, repository_name, repository_clone_url, changeset_revision,
                                    tool_panel_dict, repository_tools_tups, owner='' ):
     """Generate a list of ElementTree Element objects for each section or tool."""
     elem_list = []
     tool_elem = None
     cleaned_repository_clone_url = common_util.remove_protocol_and_user_from_clone_url( repository_clone_url )
     if not owner:
         owner = suc.get_repository_owner( cleaned_repository_clone_url )
     tool_shed = cleaned_repository_clone_url.split( '/repos/' )[ 0 ].rstrip( '/' )
     for guid, tool_section_dicts in tool_panel_dict.items():
         for tool_section_dict in tool_section_dicts:
             tool_section = None
             inside_section = False
             section_in_elem_list = False
             if tool_section_dict[ 'id' ]:
                 inside_section = True
                 # Create a new section element only if we haven't already created it.
                 for index, elem in enumerate( elem_list ):
                     if elem.tag == 'section':
                         section_id = elem.get( 'id', None )
                         if section_id == tool_section_dict[ 'id' ]:
                             section_in_elem_list = True
                             tool_section = elem
                             break
                 if tool_section is None:
                     tool_section = self.generate_tool_section_element_from_dict( tool_section_dict )
             # Find the tuple containing the current guid from the list of repository_tools_tups.
             for repository_tool_tup in repository_tools_tups:
                 tool_file_path, tup_guid, tool = repository_tool_tup
                 if tup_guid == guid:
                     break
             if inside_section:
                 tool_elem = self.generate_tool_elem( tool_shed,
                                                      repository_name,
                                                      changeset_revision,
                                                      owner,
                                                      tool_file_path,
                                                      tool,
                                                      tool_section )
             else:
                 tool_elem = self.generate_tool_elem( tool_shed,
                                                      repository_name,
                                                      changeset_revision,
                                                      owner,
                                                      tool_file_path,
                                                      tool,
                                                      None )
             if inside_section:
                 if section_in_elem_list:
                     elem_list[ index ] = tool_section
                 else:
                     elem_list.append( tool_section )
             else:
                 elem_list.append( tool_elem )
     return elem_list
コード例 #4
0
ファイル: tool_panel_manager.py プロジェクト: roalva1/galaxy
 def generate_tool_panel_elem_list(self,
                                   repository_name,
                                   repository_clone_url,
                                   changeset_revision,
                                   tool_panel_dict,
                                   repository_tools_tups,
                                   owner=''):
     """Generate a list of ElementTree Element objects for each section or tool."""
     elem_list = []
     tool_elem = None
     cleaned_repository_clone_url = common_util.remove_protocol_and_user_from_clone_url(
         repository_clone_url)
     if not owner:
         owner = suc.get_repository_owner(cleaned_repository_clone_url)
     tool_shed = cleaned_repository_clone_url.split('/repos/')[0].rstrip(
         '/')
     for guid, tool_section_dicts in tool_panel_dict.items():
         for tool_section_dict in tool_section_dicts:
             tool_section = None
             inside_section = False
             section_in_elem_list = False
             if tool_section_dict['id']:
                 inside_section = True
                 # Create a new section element only if we haven't already created it.
                 for index, elem in enumerate(elem_list):
                     if elem.tag == 'section':
                         section_id = elem.get('id', None)
                         if section_id == tool_section_dict['id']:
                             section_in_elem_list = True
                             tool_section = elem
                             break
                 if tool_section is None:
                     tool_section = self.generate_tool_section_element_from_dict(
                         tool_section_dict)
             # Find the tuple containing the current guid from the list of repository_tools_tups.
             for repository_tool_tup in repository_tools_tups:
                 tool_file_path, tup_guid, tool = repository_tool_tup
                 if tup_guid == guid:
                     break
             if inside_section:
                 tool_elem = self.generate_tool_elem(
                     tool_shed, repository_name, changeset_revision, owner,
                     tool_file_path, tool, tool_section)
             else:
                 tool_elem = self.generate_tool_elem(
                     tool_shed, repository_name, changeset_revision, owner,
                     tool_file_path, tool, None)
             if inside_section:
                 if section_in_elem_list:
                     elem_list[index] = tool_section
                 else:
                     elem_list.append(tool_section)
             else:
                 elem_list.append(tool_elem)
     return elem_list
コード例 #5
0
 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)
コード例 #6
0
 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 )
コード例 #7
0
 def tool_shed_from_repository_clone_url(self):
     """Given a repository clone URL, return the tool shed that contains the repository."""
     cleaned_repository_clone_url = common_util.remove_protocol_and_user_from_clone_url(
         self.repository_clone_url)
     return common_util.remove_protocol_and_user_from_clone_url(
         cleaned_repository_clone_url).split('/repos/')[0].rstrip('/')
コード例 #8
0
 def tool_shed_from_repository_clone_url( self ):
     """Given a repository clone URL, return the tool shed that contains the repository."""
     cleaned_repository_clone_url = common_util.remove_protocol_and_user_from_clone_url( self.repository_clone_url )
     return common_util.remove_protocol_and_user_from_clone_url( cleaned_repository_clone_url ).split( '/repos/' )[ 0 ].rstrip( '/' )