Esempio n. 1
0
def output():
    sample_set_id = get_sample_set_id_from_results_file(
        request.vars["results_file_id"])
    if (auth.can_view_sample_set(sample_set_id)):
        results_id = int(request.vars["results_file_id"])
        output_directory = defs.DIR_OUT_VIDJIL_ID % results_id
        files = os.listdir(output_directory)

        file_dicts = []

        for f in files:
            file_size = vidjil_utils.format_size(
                os.stat(output_directory + f).st_size)
            file_dicts.append({'filename': f, 'size': file_size})

        log.info("view output files",
                 extra={
                     'user_id': auth.user.id,
                     'record_id': request.vars["results_file_id"],
                     'table_name': "results_file"
                 })
        return dict(message="output files",
                    results_file_id=results_id,
                    files=file_dicts)
    return error_message("access denied")
Esempio n. 2
0
def upload(): 
    session.forget(response)
    mes = ""
    error = ""

    if request.vars['id'] == None :
        error += "missing id"
    elif db.sequence_file[request.vars["id"]] is None:
        error += "no sequence file with this id"

    if not error:
        mes += " file {%s} " % (request.vars['id'])
        res = {"message": mes + "processing uploaded file"}
        log.debug(res)
        if request.vars.file != None :
            f = request.vars.file
            try:
                if request.vars["file_number"] == "1" :
                    db.sequence_file[request.vars["id"]] = dict(data_file = db.sequence_file.data_file.store(f.file, f.filename))
                else :
                    db.sequence_file[request.vars["id"]] = dict(data_file2 = db.sequence_file.data_file.store(f.file, f.filename))
                mes += "upload finished"
            except IOError as e:
                if str(e).find("File name too long") > -1:
                    error += 'Your filename is too long, please shorten it.'
                else:
                    error += "System error during processing of uploaded file."
                    log.error(str(e))
        
        data_file = db.sequence_file[request.vars["id"]].data_file
        data_file2 = db.sequence_file[request.vars["id"]].data_file2
        
        if request.vars["file_number"] == "1" and len(error) == 0 and data_file is None:
            error += "no data file"
        if request.vars["file_number"] == "2" and len(error) == 0 and data_file2 is None:
            error += "no data file"
            
        if data_file is not None and data_file2 is not None and request.vars['pre_process'] != '0':
            db.sequence_file[request.vars["id"]] = dict(pre_process_flag = "WAIT")
            old_task_id = db.sequence_file[request.vars["id"]].pre_process_scheduler_task_id
            if db.scheduler_task[old_task_id] != None:
                scheduler.stop_task(old_task_id)
                db(db.scheduler_task.id == old_task_id).delete()
                db.commit()
            schedule_pre_process(int(request.vars['id']), int(request.vars['pre_process']))
            mes += " | p%s start pre_process %s " % (request.vars['pre_process'], request.vars['id'] + "-" +request.vars['pre_process'])

        if data_file is not None :
            seq_file = defs.DIR_SEQUENCES + data_file
            # Compute and store file size
            size = os.path.getsize(seq_file)
            mes += ' (%s)' % vidjil_utils.format_size(size)
            db.sequence_file[request.vars["id"]] = dict(size_file = size)

        if data_file2 is not None :
            seq_file2 = defs.DIR_SEQUENCES + data_file2
            #TODO
        
    # Log and exit
    res = {"message": error + mes}
    if error:
        res['success'] = 'false'
        res['priority'] = 3
        log.error(res)
    else:
        log.info(res)
    return gluon.contrib.simplejson.dumps(res, separators=(',',':'))
Esempio n. 3
0
def upload():
    session.forget(response)
    mes = ""
    error = ""

    if request.vars['id'] == None:
        error += "missing id"
    elif db.sequence_file[request.vars["id"]] is None:
        error += "no sequence file with this id"

    if not error:
        mes += " file {%s} " % (request.vars['id'])
        res = {"message": mes + "processing uploaded file"}
        log.debug(res)
        if request.vars.file != None:
            f = request.vars.file
            try:
                if request.vars["file_number"] == "1":
                    db.sequence_file[request.vars["id"]] = dict(
                        data_file=db.sequence_file.data_file.store(
                            f.file, f.filename))
                else:
                    db.sequence_file[request.vars["id"]] = dict(
                        data_file2=db.sequence_file.data_file.store(
                            f.file, f.filename))
                mes += "upload finished (%s)" % (f.filename)
            except IOError as e:
                if str(e).find("File name too long") > -1:
                    error += 'Your filename is too long, please shorten it.'
                else:
                    error += "System error during processing of uploaded file."
                    log.error(str(e))

        data_file = db.sequence_file[request.vars["id"]].data_file
        data_file2 = db.sequence_file[request.vars["id"]].data_file2

        if request.vars["file_number"] == "1" and len(
                error) == 0 and data_file is None:
            error += "no data file"
        if request.vars["file_number"] == "2" and len(
                error) == 0 and data_file2 is None:
            error += "no data file"

        if data_file is not None and data_file2 is not None and request.vars[
                'pre_process'] != '0':
            db.sequence_file[request.vars["id"]] = dict(
                pre_process_flag="WAIT")
            old_task_id = db.sequence_file[
                request.vars["id"]].pre_process_scheduler_task_id
            if db.scheduler_task[old_task_id] != None:
                scheduler.stop_task(old_task_id)
                db(db.scheduler_task.id == old_task_id).delete()
                db.commit()
            schedule_pre_process(int(request.vars['id']),
                                 int(request.vars['pre_process']))
            mes += " | p%s start pre_process %s " % (
                request.vars['pre_process'],
                request.vars['id'] + "-" + request.vars['pre_process'])

        if data_file is not None:
            seq_file = defs.DIR_SEQUENCES + data_file
            # Compute and store file size
            size = os.path.getsize(seq_file)
            mes += ' (%s)' % vidjil_utils.format_size(size)
            db.sequence_file[request.vars["id"]] = dict(size_file=size)

        if data_file2 is not None:
            seq_file2 = defs.DIR_SEQUENCES + data_file2
            #TODO

    # Log and exit
    res = {"message": error + mes}
    if error:
        res['success'] = 'false'
        res['priority'] = 3
        log.error(res)
    else:
        log.info(res)
    return gluon.contrib.simplejson.dumps(res, separators=(',', ':'))