Example #1
0
    def repository_ids_for_setting_metadata( self, trans, my_writable=False, **kwd ):
        """
        GET /api/get_repository_ids_for_setting_metadata

        Displays a collection (list) of repository ids ordered for setting metadata.

        :param key: the API key of the Tool Shed user.
        :param my_writable (optional): if the API key is associated with an admin user in the Tool Shed, setting this param value
                                       to True will restrict resetting metadata to only repositories that are writable by the user
                                       in addition to those repositories of type tool_dependency_definition.  This param is ignored
                                       if the current user is not an admin user, in which case this same restriction is automatic.
        """
        if trans.user_is_admin():
            my_writable = util.asbool( my_writable )
        else:
            my_writable = True
        handled_repository_ids = []
        repository_ids = []
        query = suc.get_query_for_setting_metadata_on_repositories( trans, my_writable=my_writable, order=False )
        # Make sure repositories of type tool_dependency_definition are first in the list.
        for repository in query:
            if repository.type == rt_util.TOOL_DEPENDENCY_DEFINITION and repository.id not in handled_repository_ids:
                repository_ids.append( trans.security.encode_id( repository.id ) )
        # Now add all remaining repositories to the list.
        for repository in query:
            if repository.type != rt_util.TOOL_DEPENDENCY_DEFINITION and repository.id not in handled_repository_ids:
                repository_ids.append( trans.security.encode_id( repository.id ) )
        return repository_ids
    def reset_metadata_on_installed_repositories( self, trans, payload, **kwd ):
        """
        PUT /api/tool_shed_repositories/reset_metadata_on_installed_repositories

        Resets all metadata on all repositories installed into Galaxy in an "orderly fashion".

        :param key: the API key of the Galaxy admin user.
        """
        start_time = strftime( "%Y-%m-%d %H:%M:%S" )
        results = dict( start_time=start_time,
                        successful_count=0,
                        unsuccessful_count=0,
                        repository_status=[] )
        # Make sure the current user's API key proves he is an admin user in this Galaxy instance.
        if not trans.user_is_admin():
            raise HTTPForbidden( detail='You are not authorized to reset metadata on repositories installed into this Galaxy instance.' )
        query = suc.get_query_for_setting_metadata_on_repositories( trans, my_writable=False, order=False )
        # Now reset metadata on all remaining repositories.
        for repository in query:
            repository_id = trans.security.encode_id( repository.id )
            try:
                invalid_file_tups, metadata_dict = metadata_util.reset_all_metadata_on_installed_repository( trans, repository_id )
                if invalid_file_tups:
                    message = tool_util.generate_message_for_invalid_tools( trans,
                                                                            invalid_file_tups,
                                                                            repository,
                                                                            None,
                                                                            as_html=False )
                    results[ 'unsuccessful_count' ] += 1
                else:
                    message = "Successfully reset metadata on repository %s owned by %s" % \
                        ( str( repository.name ), str( repository.owner ) )
                    results[ 'successful_count' ] += 1
            except Exception, e:
                message = "Error resetting metadata on repository %s owned by %s: %s" % \
                    ( str( repository.name ), str( repository.owner ), str( e ) )
                results[ 'unsuccessful_count' ] += 1
            results[ 'repository_status' ].append( message )
Example #3
0
 encoded_ids_to_skip = payload.get( 'encoded_ids_to_skip', [] )
 skip_file = payload.get( 'skip_file', None )
 if skip_file and os.path.exists( skip_file ) and not encoded_ids_to_skip:
     # Load the list of encoded_ids_to_skip from the skip_file.
     # Contents of file must be 1 encoded repository id per line.
     lines = open( skip_file, 'rb' ).readlines()
     for line in lines:
         if line.startswith( '#' ):
             # Skip comments.
             continue
         encoded_ids_to_skip.append( line.rstrip( '\n' ) )
 if trans.user_is_admin():
     my_writable = util.asbool( payload.get( 'my_writable', False ) )
 else:
     my_writable = True
 query = suc.get_query_for_setting_metadata_on_repositories( trans, my_writable=my_writable, order=False )
 # First reset metadata on all repositories of type repository_dependency_definition.
 for repository in query:
     encoded_id = trans.security.encode_id( repository.id )
     if encoded_id in encoded_ids_to_skip:
         log.debug( "Skipping repository with id %s because it is in encoded_ids_to_skip %s" % \
                    ( str( repository.id ), str( encoded_ids_to_skip ) ) )
     elif repository.type == rt_util.TOOL_DEPENDENCY_DEFINITION and repository.id not in handled_repository_ids:
         results = handle_repository( trans, repository, results )
 # Now reset metadata on all remaining repositories.
 for repository in query:
     encoded_id = trans.security.encode_id( repository.id )
     if encoded_id in encoded_ids_to_skip:
         log.debug( "Skipping repository with id %s because it is in encoded_ids_to_skip %s" % \
                    ( str( repository.id ), str( encoded_ids_to_skip ) ) )
     elif repository.type != rt_util.TOOL_DEPENDENCY_DEFINITION and repository.id not in handled_repository_ids: