示例#1
0
 def handle_repository(trans, start_time, repository):
     results = dict(start_time=start_time, repository_status=[])
     try:
         rmm = repository_metadata_manager.RepositoryMetadataManager(
             app=trans.app,
             user=trans.user,
             repository=repository,
             resetting_all_metadata_on_repository=True,
             updating_installed_repository=False,
             persist=False)
         rmm.reset_all_metadata_on_repository_in_tool_shed()
         rmm_invalid_file_tups = rmm.get_invalid_file_tups()
         if rmm_invalid_file_tups:
             message = tool_util.generate_message_for_invalid_tools(
                 trans.app,
                 rmm_invalid_file_tups,
                 repository,
                 None,
                 as_html=False)
         else:
             message = "Successfully reset metadata on repository %s owned by %s" % \
                 ( str( repository.name ), str( repository.user.username ) )
     except Exception, e:
         message = "Error resetting metadata on repository %s owned by %s: %s" % \
             ( str( repository.name ), str( repository.user.username ), str( e ) )
示例#2
0
 def handle_repository( trans, start_time, repository ):
     results = dict( start_time=start_time,
                     repository_status=[] )
     try:
         rmm = repository_metadata_manager.RepositoryMetadataManager( app=trans.app,
                                                                      user=trans.user,
                                                                      repository=repository,
                                                                      resetting_all_metadata_on_repository=True,
                                                                      updating_installed_repository=False,
                                                                      persist=False )
         rmm.reset_all_metadata_on_repository_in_tool_shed()
         rmm_invalid_file_tups = rmm.get_invalid_file_tups()
         if rmm_invalid_file_tups:
             message = tool_util.generate_message_for_invalid_tools( trans.app,
                                                                     rmm_invalid_file_tups,
                                                                     repository,
                                                                     None,
                                                                     as_html=False )
             results[ 'status' ] = 'warning'
         else:
             message = "Successfully reset metadata on repository %s owned by %s" % \
                 ( str( repository.name ), str( repository.user.username ) )
             results[ 'status' ] = 'ok'
     except Exception, e:
         message = "Error resetting metadata on repository %s owned by %s: %s" % \
             ( str( repository.name ), str( repository.user.username ), str( e ) )
         results[ 'status' ] = 'error'
 def load_tool_from_changeset_revision(self, repository_id,
                                       changeset_revision,
                                       tool_config_filename):
     """
     Return a loaded tool whose tool config file name (e.g., filtering.xml) is the value
     of tool_config_filename.  The value of changeset_revision is a valid (downloadable)
     changeset revision.  The tool config will be located in the repository manifest between
     the received valid changeset revision and the first changeset revision in the repository,
     searching backwards.
     """
     original_tool_data_path = self.app.config.tool_data_path
     repository = repository_util.get_repository_in_tool_shed(
         self.app, repository_id)
     repo_files_dir = repository.repo_path(self.app)
     repo = hg_util.get_repo_for_repository(self.app,
                                            repository=None,
                                            repo_path=repo_files_dir,
                                            create=False)
     message = ''
     tool = None
     can_use_disk_file = False
     tool_config_filepath = repository_util.get_absolute_path_to_file_in_repository(
         repo_files_dir, tool_config_filename)
     work_dir = tempfile.mkdtemp(prefix="tmp-toolshed-ltfcr")
     can_use_disk_file = self.can_use_tool_config_disk_file(
         repository, repo, tool_config_filepath, changeset_revision)
     if can_use_disk_file:
         self.app.config.tool_data_path = work_dir
         tool, valid, message, sample_files = \
             self.handle_sample_files_and_load_tool_from_disk( repo_files_dir,
                                                               repository_id,
                                                               tool_config_filepath,
                                                               work_dir )
         if tool is not None:
             invalid_files_and_errors_tups = \
                 self.check_tool_input_params( repo_files_dir,
                                               tool_config_filename,
                                               tool,
                                               sample_files )
             if invalid_files_and_errors_tups:
                 message2 = tool_util.generate_message_for_invalid_tools(
                     self.app,
                     invalid_files_and_errors_tups,
                     repository,
                     metadata_dict=None,
                     as_html=True,
                     displaying_invalid_tool=True)
                 message = self.concat_messages(message, message2)
     else:
         tool, message, sample_files = \
             self.handle_sample_files_and_load_tool_from_tmp_config( repo,
                                                                     repository_id,
                                                                     changeset_revision,
                                                                     tool_config_filename,
                                                                     work_dir )
     basic_util.remove_dir(work_dir)
     self.app.config.tool_data_path = original_tool_data_path
     # Reset the tool_data_tables by loading the empty tool_data_table_conf.xml file.
     self.tdtm.reset_tool_data_tables()
     return repository, tool, message
示例#4
0
 def handle_repository(trans, rmm, repository, results):
     log.debug("Resetting metadata on repository %s" % str(repository.name))
     try:
         rmm.set_repository(repository)
         rmm.reset_all_metadata_on_repository_in_tool_shed()
         rmm_invalid_file_tups = rmm.get_invalid_file_tups()
         if rmm_invalid_file_tups:
             message = tool_util.generate_message_for_invalid_tools(
                 self.app, rmm_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.user.username),
             )
             results["successful_count"] += 1
     except Exception as e:
         message = "Error resetting metadata on repository %s owned by %s: %s" % (
             str(repository.name),
             str(repository.user.username),
             str(e),
         )
         results["unsuccessful_count"] += 1
     status = "%s : %s" % (str(repository.name), message)
     results["repository_status"].append(status)
     return results
 def load_tool_from_changeset_revision( self, repository_id, changeset_revision, tool_config_filename ):
     """
     Return a loaded tool whose tool config file name (e.g., filtering.xml) is the value
     of tool_config_filename.  The value of changeset_revision is a valid (downloadable)
     changeset revision.  The tool config will be located in the repository manifest between
     the received valid changeset revision and the first changeset revision in the repository,
     searching backwards.
     """
     original_tool_data_path = self.app.config.tool_data_path
     repository = suc.get_repository_in_tool_shed( self.app, repository_id )
     repo_files_dir = repository.repo_path( self.app )
     repo = hg_util.get_repo_for_repository( self.app, repository=None, repo_path=repo_files_dir, create=False )
     message = ''
     tool = None
     can_use_disk_file = False
     tool_config_filepath = suc.get_absolute_path_to_file_in_repository( repo_files_dir, tool_config_filename )
     work_dir = tempfile.mkdtemp( prefix="tmp-toolshed-ltfcr" )
     can_use_disk_file = self.can_use_tool_config_disk_file( repository,
                                                             repo,
                                                             tool_config_filepath,
                                                             changeset_revision )
     if can_use_disk_file:
         self.app.config.tool_data_path = work_dir
         tool, valid, message, sample_files = \
             self.handle_sample_files_and_load_tool_from_disk( repo_files_dir,
                                                               repository_id,
                                                               tool_config_filepath,
                                                               work_dir )
         if tool is not None:
             invalid_files_and_errors_tups = \
                 self.check_tool_input_params( repo_files_dir,
                                               tool_config_filename,
                                               tool,
                                               sample_files )
             if invalid_files_and_errors_tups:
                 message2 = tool_util.generate_message_for_invalid_tools( self.app,
                                                                          invalid_files_and_errors_tups,
                                                                          repository,
                                                                          metadata_dict=None,
                                                                          as_html=True,
                                                                          displaying_invalid_tool=True )
                 message = self.concat_messages( message, message2 )
     else:
         tool, message, sample_files = \
             self.handle_sample_files_and_load_tool_from_tmp_config( repo,
                                                                     repository_id,
                                                                     changeset_revision,
                                                                     tool_config_filename,
                                                                     work_dir )
     basic_util.remove_dir( work_dir )
     self.app.config.tool_data_path = original_tool_data_path
     # Reset the tool_data_tables by loading the empty tool_data_table_conf.xml file.
     self.tdtm.reset_tool_data_tables()
     return repository, tool, message
示例#6
0
 def handle_repository( trans, start_time, repository ):
     results = dict( start_time=start_time,
                     repository_status=[] )
     try:
         invalid_file_tups, metadata_dict = metadata_util.reset_all_metadata_on_repository_in_tool_shed( trans,
                                                                                                         trans.security.encode_id( repository.id ) )
         if invalid_file_tups:
             message = tool_util.generate_message_for_invalid_tools( trans, invalid_file_tups, repository, None, as_html=False )
         else:
             message = "Successfully reset metadata on repository %s owned by %s" % ( str( repository.name ), str( repository.user.username ) )
     except Exception, e:
         message = "Error resetting metadata on repository %s owned by %s: %s" % ( str( repository.name ), str( repository.user.username ), str( e ) )
示例#7
0
 def handle_repository( trans, repository, results ):
     log.debug( "Resetting metadata on repository %s" % str( repository.name ) )
     repository_id = trans.security.encode_id( repository.id )
     try:
         invalid_file_tups, metadata_dict = metadata_util.reset_all_metadata_on_repository_in_tool_shed( 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.user.username ) )
             results[ 'successful_count' ] += 1
     except Exception, e:
         message = "Error resetting metadata on repository %s owned by %s: %s" % ( str( repository.name ), str( repository.user.username ), str( e ) )
         results[ 'unsuccessful_count' ] += 1
示例#8
0
    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.'
            )
        irmm = InstalledRepositoryMetadataManager(self.app)
        query = irmm.get_query_for_setting_metadata_on_repositories(
            order=False)
        # Now reset metadata on all remaining repositories.
        for repository in query:
            try:
                irmm.set_repository(repository)
                irmm.reset_all_metadata_on_installed_repository()
                irmm_invalid_file_tups = irmm.get_invalid_file_tups()
                if irmm_invalid_file_tups:
                    message = tool_util.generate_message_for_invalid_tools(
                        self.app,
                        irmm_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 as e:
                message = "Error resetting metadata on repository %s owned by %s: %s" % \
                    (str(repository.name), str(repository.owner), util.unicodify(e))
                results['unsuccessful_count'] += 1
            results['repository_status'].append(message)
        stop_time = strftime("%Y-%m-%d %H:%M:%S")
        results['stop_time'] = stop_time
        return json.dumps(results, sort_keys=True, indent=4)
 def reset_metadata_on_selected_repositories(self, user, **kwd):
     """
     Inspect the repository changelog to reset metadata for all appropriate changeset revisions.
     This method is called from both Galaxy and the Tool Shed.
     """
     repository_ids = util.listify(kwd.get('repository_ids', None))
     message = ''
     status = 'done'
     if repository_ids:
         successful_count = 0
         unsuccessful_count = 0
         for repository_id in repository_ids:
             try:
                 repository = repository_util.get_installed_tool_shed_repository(
                     self.app, repository_id)
                 self.set_repository(repository)
                 self.reset_all_metadata_on_installed_repository()
                 if self.invalid_file_tups:
                     message = tool_util.generate_message_for_invalid_tools(
                         self.app,
                         self.invalid_file_tups,
                         repository,
                         None,
                         as_html=False)
                     log.debug(message)
                     unsuccessful_count += 1
                 else:
                     log.debug(
                         "Successfully reset metadata on repository %s owned by %s"
                         % (str(repository.name), str(repository.owner)))
                     successful_count += 1
             except:
                 log.exception(
                     "Error attempting to reset metadata on repository %s",
                     str(repository.name))
                 unsuccessful_count += 1
         message = "Successfully reset metadata on %d %s.  " % \
             ( successful_count, inflector.cond_plural( successful_count, "repository" ) )
         if unsuccessful_count:
             message += "Error setting metadata on %d %s - see the paster log for details.  " % \
                 ( unsuccessful_count, inflector.cond_plural( unsuccessful_count, "repository" ) )
     else:
         message = 'Select at least one repository to on which to reset all metadata.'
         status = 'error'
     return message, status
示例#10
0
    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.' )
        irmm = InstalledRepositoryMetadataManager( self.app )
        query = irmm.get_query_for_setting_metadata_on_repositories( order=False )
        # Now reset metadata on all remaining repositories.
        for repository in query:
            try:
                irmm.set_repository( repository )
                irmm.reset_all_metadata_on_installed_repository()
                irmm_invalid_file_tups = irmm.get_invalid_file_tups()
                if irmm_invalid_file_tups:
                    message = tool_util.generate_message_for_invalid_tools( self.app,
                                                                            irmm_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 as 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 )
        stop_time = strftime( "%Y-%m-%d %H:%M:%S" )
        results[ 'stop_time' ] = stop_time
        return json.dumps( results, sort_keys=True, indent=4 )
示例#11
0
 def handle_repository(trans, start_time, repository):
     results = dict(start_time=start_time, repository_status=[])
     try:
         rmm = repository_metadata_manager.RepositoryMetadataManager(
             trans.app, trans.user)
         invalid_file_tups, metadata_dict = \
             rmm.reset_all_metadata_on_repository_in_tool_shed( trans.security.encode_id( repository.id ) )
         if invalid_file_tups:
             message = tool_util.generate_message_for_invalid_tools(
                 trans.app,
                 invalid_file_tups,
                 repository,
                 None,
                 as_html=False)
         else:
             message = "Successfully reset metadata on repository %s owned by %s" % \
                 ( str( repository.name ), str( repository.user.username ) )
     except Exception, e:
         message = "Error resetting metadata on repository %s owned by %s: %s" % \
             ( str( repository.name ), str( repository.user.username ), str( e ) )
示例#12
0
 def handle_repository( trans, rmm, repository, results ):
     log.debug( "Resetting metadata on repository %s" % str( repository.name ) )
     try:
         rmm.set_repository( repository )
         rmm.reset_all_metadata_on_repository_in_tool_shed()
         rmm_invalid_file_tups = rmm.get_invalid_file_tups()
         if rmm_invalid_file_tups:
             message = tool_util.generate_message_for_invalid_tools( trans.app,
                                                                     rmm_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.user.username ) )
             results[ 'successful_count' ] += 1
     except Exception, e:
         message = "Error resetting metadata on repository %s owned by %s: %s" % \
             ( str( repository.name ), str( repository.user.username ), str( e ) )
         results[ 'unsuccessful_count' ] += 1
 def reset_metadata_on_selected_repositories( self, user, **kwd ):
     """
     Inspect the repository changelog to reset metadata for all appropriate changeset revisions.
     This method is called from both Galaxy and the Tool Shed.
     """
     repository_ids = util.listify( kwd.get( 'repository_ids', None ) )
     message = ''
     status = 'done'
     if repository_ids:
         successful_count = 0
         unsuccessful_count = 0
         for repository_id in repository_ids:
             try:
                 repository = repository_util.get_installed_tool_shed_repository( self.app, repository_id )
                 self.set_repository( repository )
                 self.reset_all_metadata_on_installed_repository()
                 if self.invalid_file_tups:
                     message = tool_util.generate_message_for_invalid_tools( self.app,
                                                                             self.invalid_file_tups,
                                                                             repository,
                                                                             None,
                                                                             as_html=False )
                     log.debug( message )
                     unsuccessful_count += 1
                 else:
                     log.debug( "Successfully reset metadata on repository %s owned by %s" %
                         ( str( repository.name ), str( repository.owner ) ) )
                     successful_count += 1
             except:
                 log.exception( "Error attempting to reset metadata on repository %s", str( repository.name ) )
                 unsuccessful_count += 1
         message = "Successfully reset metadata on %d %s.  " % \
             ( successful_count, inflector.cond_plural( successful_count, "repository" ) )
         if unsuccessful_count:
             message += "Error setting metadata on %d %s - see the paster log for details.  " % \
                 ( unsuccessful_count, inflector.cond_plural( unsuccessful_count, "repository" ) )
     else:
         message = 'Select at least one repository to on which to reset all metadata.'
         status = 'error'
     return message, status
    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 )