def __test_evaluation_with_path_rewrites(self):
     # Various things can cause dataset paths to be rewritten (Task
     # splitting, config.outputs_to_working_directory). This tests that
     # functionality.
     self._setup_test_bwa_job()
     job_path_1 = "%s/dataset_1.dat" % self.test_directory
     job_path_2 = "%s/dataset_2.dat" % self.test_directory
     self._set_compute_environment(
         input_paths=[DatasetPath(1, '/galaxy/files/dataset_1.dat', false_path=job_path_1)],
         output_paths=[DatasetPath(2, '/galaxy/files/dataset_2.dat', false_path=job_path_2)],
     )
     command_line, extra_filenames, _ = self.evaluator.build()
     self.assertEquals(command_line, "bwa --thresh=4 --in=%s --out=%s" % (job_path_1, job_path_2))
Esempio n. 2
0
def test_dataset_path():
    dataset_path_1 = DatasetPath(1, "/galaxy/database/files/dataset_1.dat")
    assert dataset_path_1.dataset_id == 1
    assert dataset_path_1.real_path == "/galaxy/database/files/dataset_1.dat"
    assert dataset_path_1.false_path is None
    assert dataset_path_1.mutable
    assert str(dataset_path_1) == "/galaxy/database/files/dataset_1.dat"

    dataset_path_2 = DatasetPath(2, "/galaxy/database/files/dataset_2.dat", false_path="/mnt/galaxyData/files/dataset_2.dat", mutable=False)
    assert dataset_path_2.dataset_id == 2
    assert dataset_path_2.real_path == "/galaxy/database/files/dataset_2.dat"
    assert dataset_path_2.false_path == "/mnt/galaxyData/files/dataset_2.dat"
    assert not dataset_path_2.mutable
    assert str(dataset_path_2) == "/mnt/galaxyData/files/dataset_2.dat"
Esempio n. 3
0
def test_dataset_false_extra_files_path():
    dataset = MockDataset()

    wrapper = DatasetFilenameWrapper(dataset)
    assert wrapper.extra_files_path == MOCK_DATASET_EXTRA_FILES_PATH

    new_path = "/new/path/dataset_123.dat"
    dataset_path = DatasetPath(123, MOCK_DATASET_PATH, false_path=new_path)
    wrapper = DatasetFilenameWrapper(dataset, dataset_path=dataset_path)
    # Setting false_path is not enough to override
    assert wrapper.extra_files_path == MOCK_DATASET_EXTRA_FILES_PATH

    new_files_path = "/new/path/dataset_123_files"
    dataset_path = DatasetPath(123, MOCK_DATASET_PATH, false_path=new_path, false_extra_files_path=new_files_path)
    wrapper = DatasetFilenameWrapper(dataset, dataset_path=dataset_path)
    assert wrapper.extra_files_path == new_files_path
Esempio n. 4
0
    def execute_via_app( self, tool, app, session_id, history_id, user=None,
                         incoming = {}, set_output_hid = False, overwrite = True,
                         history=None, job_params=None ):
        """
        Execute using application.
        """
        for name, value in incoming.iteritems():
            if isinstance( value, app.model.HistoryDatasetAssociation ):
                dataset = value
                dataset_name = name
                type = 'hda'
                break
            elif isinstance( value, app.model.LibraryDatasetDatasetAssociation ):
                dataset = value
                dataset_name = name
                type = 'ldda'
                break
            else:
                raise Exception( 'The dataset to set metadata on could not be determined.' )

        sa_session = app.model.context

        # Create the job object
        job = app.model.Job()
        job.session_id = session_id
        job.history_id = history_id
        job.tool_id = tool.id
        if user:
            job.user_id = user.id
        if job_params:
            job.params = dumps( job_params )
        start_job_state = job.state #should be job.states.NEW
        try:
            # For backward compatibility, some tools may not have versions yet.
            job.tool_version = tool.version
        except:
            job.tool_version = "1.0.1"
        job.state = job.states.WAITING #we need to set job state to something other than NEW, or else when tracking jobs in db it will be picked up before we have added input / output parameters
        job.set_handler(tool.get_job_handler( job_params ))
        sa_session.add( job )
        sa_session.flush() #ensure job.id is available

        #add parameters to job_parameter table
        # Store original dataset state, so we can restore it. A separate table might be better (no chance of 'losing' the original state)?
        incoming[ '__ORIGINAL_DATASET_STATE__' ] = dataset.state
        input_paths = [DatasetPath( dataset.id, real_path=dataset.file_name, mutable=False )]
        app.object_store.create(job, base_dir='job_work', dir_only=True, extra_dir=str(job.id))
        job_working_dir = app.object_store.get_filename(job, base_dir='job_work', dir_only=True, extra_dir=str(job.id))
        external_metadata_wrapper = JobExternalOutputMetadataWrapper( job )
        cmd_line = external_metadata_wrapper.setup_external_metadata( dataset,
                                                                      sa_session,
                                                                      exec_dir = None,
                                                                      tmp_dir = job_working_dir,
                                                                      dataset_files_path = app.model.Dataset.file_path,
                                                                      output_fnames = input_paths,
                                                                      config_root = app.config.root,
                                                                      config_file = app.config.config_file,
                                                                      datatypes_config = app.datatypes_registry.integrated_datatypes_configs,
                                                                      job_metadata = None,
                                                                      include_command = False,
                                                                      kwds = { 'overwrite' : overwrite } )
        incoming[ '__SET_EXTERNAL_METADATA_COMMAND_LINE__' ] = cmd_line
        for name, value in tool.params_to_strings( incoming, app ).iteritems():
            job.add_parameter( name, value )
        #add the dataset to job_to_input_dataset table
        if type == 'hda':
            job.add_input_dataset( dataset_name, dataset )
        elif type == 'ldda':
            job.add_input_library_dataset( dataset_name, dataset )
        #Need a special state here to show that metadata is being set and also allow the job to run
        #   i.e. if state was set to 'running' the set metadata job would never run, as it would wait for input (the dataset to set metadata on) to be in a ready state
        dataset._state = dataset.states.SETTING_METADATA
        job.state = start_job_state #job inputs have been configured, restore initial job state
        sa_session.flush()

        # Queue the job for execution
        app.job_queue.put( job.id, tool.id )
        # FIXME: need to add event logging to app and log events there rather than trans.
        #trans.log_event( "Added set external metadata job to the job queue, id: %s" % str(job.id), tool_id=job.tool_id )

        #clear e.g. converted files
        dataset.datatype.before_setting_metadata( dataset )

        return job, odict()