root/galaxy-central/lib/galaxy/tools/actions/metadata.py

リビジョン 2, 3.9 KB (コミッタ: hatakeyama, 14 年 前)

import galaxy-central

行番号 
1from __init__ import ToolAction
2from galaxy.datatypes.metadata import JobExternalOutputMetadataWrapper
3from galaxy.util.odict import odict
4
5import logging
6log = logging.getLogger( __name__ )
7
8class SetMetadataToolAction( ToolAction ):
9    """Tool action used for setting external metadata on an existing dataset"""
10   
11    def execute( self, tool, trans, incoming = {}, set_output_hid = False, overwrite = True ):
12        for name, value in incoming.iteritems():
13            if isinstance( value, trans.app.model.HistoryDatasetAssociation ):
14                dataset = value
15                dataset_name = name
16                break
17            else:
18                raise Exception( 'The dataset to set metadata on could not be determined.' )
19                               
20        # Create the job object
21        job = trans.app.model.Job()
22        job.session_id = trans.get_galaxy_session().id
23        job.history_id = trans.history.id
24        job.tool_id = tool.id
25        start_job_state = job.state #should be job.states.NEW
26        try:
27            # For backward compatibility, some tools may not have versions yet.
28            job.tool_version = tool.version
29        except:
30            job.tool_version = "1.0.1"
31        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
32        trans.sa_session.add( job )
33        trans.sa_session.flush() #ensure job.id is available
34       
35        #add parameters to job_parameter table
36        # Store original dataset state, so we can restore it. A separate table might be better (no chance of 'losing' the original state)?
37        incoming[ '__ORIGINAL_DATASET_STATE__' ] = dataset.state
38        external_metadata_wrapper = JobExternalOutputMetadataWrapper( job )
39        cmd_line = external_metadata_wrapper.setup_external_metadata( dataset,
40                                                                      trans.sa_session,
41                                                                      exec_dir = None,
42                                                                      tmp_dir = trans.app.config.new_file_path,
43                                                                      dataset_files_path = trans.app.model.Dataset.file_path,
44                                                                      output_fnames = None,
45                                                                      config_root = None,
46                                                                      datatypes_config = None,
47                                                                      job_metadata = None,
48                                                                      kwds = { 'overwrite' : overwrite } )
49        incoming[ '__SET_EXTERNAL_METADATA_COMMAND_LINE__' ] = cmd_line
50        for name, value in tool.params_to_strings( incoming, trans.app ).iteritems():
51            job.add_parameter( name, value )
52        #add the dataset to job_to_input_dataset table
53        job.add_input_dataset( dataset_name, dataset )
54        #Need a special state here to show that metadata is being set and also allow the job to run
55        #   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
56        dataset._state = dataset.states.SETTING_METADATA
57        job.state = start_job_state #job inputs have been configured, restore initial job state
58        trans.sa_session.flush()
59       
60        # Queue the job for execution
61        trans.app.job_queue.put( job.id, tool )
62        trans.log_event( "Added set external metadata job to the job queue, id: %s" % str(job.id), tool_id=job.tool_id )
63       
64        #clear e.g. converted files
65        dataset.datatype.before_setting_metadata( dataset )
66       
67        return job, odict()
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。