Changeset 1602:531be9ea2486

Show
Ignore:
Timestamp:
11/04/08 11:56:09 (2 months ago)
Author:
Greg Von Kuster <greg@bx.psu.edu>
branch:
default
Message:

Upload tool will now create a job record, no job queued though.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lib/galaxy/tools/actions/upload.py

    r1591 r1602  
    2626        temp_name = "" 
    2727        data_list = [] 
    28  
     28        # Create the job object 
     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        try: 
     34            # For backward compatibility, some tools may not have versions yet. 
     35            job.tool_version = tool.version 
     36        except: 
     37            job.tool_version = "1.0.0" 
     38        job.flush() 
     39        log.debug( 'tool %s created job id %d' % ( tool.id, job.id ) ) 
     40        trans.log_event( 'created job id %d' % job.id, tool_id=tool.id ) 
    2941        if 'local_filename' in dir( data_file ): 
    3042            # Use the existing file 
     
    3547                data_list.append( self.add_file( trans, data_file.local_filename, file_name, file_type, dbkey, space_to_tab=space_to_tab ) ) 
    3648            except Exception, e: 
    37                 return self.upload_empty( trans, "Error:", str( e ) ) 
     49                return self.upload_empty( trans, job, "Error:", str( e ) ) 
    3850        elif 'filename' in dir( data_file ): 
    3951            try: 
     
    4456                data_list.append( self.add_file( trans, temp_name, file_name, file_type, dbkey, space_to_tab=space_to_tab ) ) 
    4557            except Exception, e: 
    46                 return self.upload_empty( trans, "Error:", str( e ) ) 
     58                return self.upload_empty( trans, job, "Error:", str( e ) ) 
    4759        if url_paste not in [ None, "" ]: 
    4860            if url_paste.lower().find( 'http://' ) >= 0 or url_paste.lower().find( 'ftp://' ) >= 0: 
     
    5567                            data_list.append( self.add_file( trans, temp_name, line, file_type, dbkey, info="uploaded url", space_to_tab=space_to_tab ) ) 
    5668                        except Exception, e: 
    57                             return self.upload_empty( trans, "Error:", str( e ) ) 
     69                            return self.upload_empty( trans, job, "Error:", str( e ) ) 
    5870            else: 
    5971                is_valid = False 
     
    6880                        data_list.append( self.add_file( trans, temp_name, 'Pasted Entry', file_type, dbkey, info="pasted entry", space_to_tab=space_to_tab ) ) 
    6981                    except Exception, e: 
    70                         return self.upload_empty( trans, "Error:", str( e ) ) 
     82                        return self.upload_empty( trans, job, "Error:", str( e ) ) 
    7183                else: 
    72                     return self.upload_empty( trans, "No data error:", "you pasted no data." ) 
     84                    return self.upload_empty( trans, job, "No data error:", "you pasted no data." ) 
    7385        if self.empty: 
    74             return self.upload_empty( trans, "Empty file error:", "you attempted to upload an empty file." ) 
     86            return self.upload_empty( trans, job, "Empty file error:", "you attempted to upload an empty file." ) 
    7587        elif len( data_list ) < 1: 
    76             return self.upload_empty( trans, "No data error:", "either you pasted no data, the url you specified is invalid, or you have not specified a file." ) 
    77         return dict( output=data_list[0] ) 
    78  
    79     def upload_empty(self, trans, err_code, err_msg): 
     88            return self.upload_empty( trans, job, "No data error:", "either you pasted no data, the url you specified is invalid, or you have not specified a file." ) 
     89        hda = data_list[0] 
     90        job.state = trans.app.model.Job.states.OK 
     91        file_size_str = nice_size( hda.dataset.file_size ) 
     92        job.info = "Uploaded file '%s', size: %s" % ( file_name, file_size_str ) 
     93        job.flush() 
     94        log.debug( 'tool %s job id %d ended ok, file: %s, size: %s' % ( tool.id, job.id, file_name, file_size_str ) ) 
     95        trans.log_event( 'job id %d ended ok, file: %s, size: %s' % ( job.id, file_name, file_size_str ), tool_id=tool.id ) 
     96        return dict( output=hda ) 
     97 
     98    def upload_empty(self, trans, job, err_code, err_msg): 
    8099        data = trans.app.model.HistoryDatasetAssociation( create_dataset = True ) 
    81100        data.name = err_code  
     
    84103        data.info = err_msg 
    85104        data.file_size = 0 
     105        data.state = data.states.EMPTY 
    86106        data.flush() 
    87         data.state = data.states.EMPTY 
    88107        trans.history.add_dataset( data ) 
    89108        trans.app.model.flush() 
     109        # Indicate job failure by setting state and message 
     110        job.state = trans.app.model.Job.states.ERROR 
     111        job.info = err_msg 
     112        # If the failure is due to a Galaxy framework exception, save the traceback 
     113        job.flush() 
     114        log.debug( 'tool %s job id %d ended with errors' % ( job.tool_id, job.id ) ) 
     115        trans.log_event( 'job id %d ended with errors' % job.id, tool_id=job.tool_id ) 
    90116        return dict( output=data ) 
    91117 
     
    276302        return False 
    277303 
     304def nice_size( size ): 
     305    """Returns a readably formatted string with the size""" 
     306    words = [ 'bytes', 'Kb', 'Mb', 'Gb' ] 
     307    try: 
     308        size = float( size ) 
     309    except: 
     310        return '??? bytes' 
     311    for ind, word in enumerate( words ): 
     312        step  = 1024 ** ( ind + 1 ) 
     313        if step > size: 
     314            size = size / float( 1024 ** ind ) 
     315            out  = "%.1f %s" % ( size, word ) 
     316            return out 
     317    return '??? bytes' 
     318 
    278319class BadFileException( Exception ): 
    279320    pass