1 | from __init__ import ToolAction |
---|
2 | from galaxy.util.odict import odict |
---|
3 | from galaxy.tools.imp_exp import JobExportHistoryArchiveWrapper |
---|
4 | |
---|
5 | import logging |
---|
6 | log = logging.getLogger( __name__ ) |
---|
7 | |
---|
8 | class ExportHistoryToolAction( ToolAction ): |
---|
9 | """Tool action used for exporting a history to an archive. """ |
---|
10 | |
---|
11 | def execute( self, tool, trans, incoming = {}, set_output_hid = False, overwrite = True ): |
---|
12 | # |
---|
13 | # Get history to export. |
---|
14 | # |
---|
15 | history = None |
---|
16 | for name, value in incoming.iteritems(): |
---|
17 | if isinstance( value, trans.app.model.History ): |
---|
18 | history_param_name = name |
---|
19 | history = value |
---|
20 | del incoming[ history_param_name ] |
---|
21 | break |
---|
22 | |
---|
23 | if not history: |
---|
24 | raise Exception( 'There is no history to export.' ) |
---|
25 | |
---|
26 | # |
---|
27 | # Create the job and output dataset objects |
---|
28 | # |
---|
29 | job = trans.app.model.Job() |
---|
30 | job.session_id = trans.get_galaxy_session().id |
---|
31 | job.history_id = trans.history.id |
---|
32 | job.tool_id = tool.id |
---|
33 | start_job_state = job.state #should be job.states.NEW |
---|
34 | 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 |
---|
35 | trans.sa_session.add( job ) |
---|
36 | |
---|
37 | # Create dataset that will serve as archive. |
---|
38 | archive_dataset = trans.app.model.Dataset() |
---|
39 | trans.sa_session.add( archive_dataset ) |
---|
40 | |
---|
41 | |
---|
42 | trans.sa_session.flush() #ensure job.id and archive_dataset.id are available |
---|
43 | |
---|
44 | # |
---|
45 | # Setup job and job wrapper. |
---|
46 | # |
---|
47 | |
---|
48 | # Add association for keeping track of job, history, archive relationship. |
---|
49 | jeha = trans.app.model.JobExportHistoryArchive( job=job, history=history, \ |
---|
50 | dataset=archive_dataset, \ |
---|
51 | compressed=incoming[ 'compress' ] ) |
---|
52 | trans.sa_session.add( jeha ) |
---|
53 | |
---|
54 | job_wrapper = JobExportHistoryArchiveWrapper( job ) |
---|
55 | cmd_line = job_wrapper.setup_job( trans, jeha, include_hidden=incoming[ 'include_hidden' ], \ |
---|
56 | include_deleted=incoming[ 'include_deleted' ] ) |
---|
57 | |
---|
58 | # |
---|
59 | # Add parameters to job_parameter table. |
---|
60 | # |
---|
61 | |
---|
62 | # Set additional parameters. |
---|
63 | incoming[ '__HISTORY_TO_EXPORT__' ] = history.id |
---|
64 | incoming[ '__EXPORT_HISTORY_COMMAND_INPUTS_OPTIONS__' ] = cmd_line |
---|
65 | for name, value in tool.params_to_strings( incoming, trans.app ).iteritems(): |
---|
66 | job.add_parameter( name, value ) |
---|
67 | |
---|
68 | job.state = start_job_state #job inputs have been configured, restore initial job state |
---|
69 | trans.sa_session.flush() |
---|
70 | |
---|
71 | |
---|
72 | # Queue the job for execution |
---|
73 | trans.app.job_queue.put( job.id, tool ) |
---|
74 | trans.log_event( "Added export history job to the job queue, id: %s" % str(job.id), tool_id=job.tool_id ) |
---|
75 | |
---|
76 | return job, odict() |
---|