Esempio n. 1
0
def dbdownload(template):
    web_config = load()
    db_dir = web_config['templates_directory']
    result = os.popen(f'cut -f 1,2 {db_dir}/{template}.fai').read()
    response = make_response(result)
    response.headers[
        "Content-Disposition"] = f"attachment; filename={template}.fai"
    response.headers["Content-type"] = "application/octet-stream"
    return response
Esempio n. 2
0
def dbselect():
    web_config = load()
    dbs_in_select = {}
    for (template, meta) in web_config['templates'].items():
        (desc, group, ids) = (meta['description'], meta['group'], meta['IDs'])
        if group not in dbs_in_select:
            dbs_in_select[group] = {}
        if template not in dbs_in_select[group]:
            dbs_in_select[group][template] = {}
        dbs_in_select[group][template]['desc'] = desc
        dbs_in_select[group][template]['IDs'] = ids
    return json.dumps(dbs_in_select, indent=4)
Esempio n. 3
0
def run():
    ###################  init #############################
    web_config = load()
    global_var.init()
    db_dir = web_config['templates_directory']

    ###################  Design primers ###################
    query_string = request.form['query']
    dbs = [db_dir + '/' + x for x in request.form['selected_dbs'].split(',')]
    if request.form['app-type'] == 'check':
        primers = make_primers.make_primers(query=query_string)
        if 'error' in primers:
            return json.dumps(
                {
                    'error':
                    '<p>' + primers['error'] + '</p>' +
                    '<p>Your inputs might be invalid; Check the \
                <a href="javascript:void(0)" data-toggle="modal" data-target="#input-help">manual</a> carefully \
                to ensure that your inputs are in correct formats</p>'
                },
                indent=4)
    else:
        if request.form['app-type'] == 'design':
            primer_num_return = request.form['retain']
        else:
            primer_num_return = request.form['primer_num_return']
        if make_sites.judge_input_type(query_string) == 'pos':
            sites = make_sites.build_by_pos(query=query_string, template_file=dbs[0], primer_type=request.form['region_type'], \
                primer_num_return=int(primer_num_return), size_min=int(request.form['product_size_min']), \
                    size_max=int(request.form['product_size_max']), pick_internal=bool(int(request.form['pick_internal'])), \
                        use_junction=bool(int(request.form['junction'])) )
        else:
            sites = make_sites.build_by_seq(query=query_string, primer_type=request.form['region_type'], \
                primer_num_return=int(primer_num_return), size_min=int(request.form['product_size_min']), \
                    size_max=int(request.form['product_size_max']), pick_internal=bool(int(request.form['pick_internal'])))
        if 'error' in sites:
            return json.dumps(
                {
                    'error':
                    '<p>' + sites['error'] + '</p>' +
                    '<p>Your inputs might be invalid; Check the \
                <a href="javascript:void(0)" data-toggle="modal" data-target="#input-help">manual</a> carefully \
                to ensure that your inputs are in correct formats</p>'
                },
                indent=4)
        primers = design_primer.multiple(sites,
                                         cpu=web_config['cpu'],
                                         monitor=False)

    ###################  Checking specificity  #############
    if request.form['app-type'] != 'design':
        primers = run_blast.run_blast_parallel(primers=primers, dbs=dbs, cpu=web_config['cpu'],\
            checking_size_max=int(request.form['checking_size_max']), checking_size_min=int(request.form['checking_size_min']), \
                report_amplicon_seq=bool(int(request.form['report_amplicon_seqs'])), Tm_diff=int(request.form['Tm_diff']), \
                    use_3_end=bool(int(request.form['use_3_end'])), monitor=False)
        primers = sort_primers.sort_rank(primers=primers, dbs=dbs, max_num_return=int(request.form['retain']), \
            use_isoforms=bool(int(request.form['isoform'])) )

    ###################  Checking multiplex  ###############
    dimers = {}
    if int(request.form['multiplex']) == 1:
        dimers = multiplex.extract_fake_pair(primers,
                                             Tm_diff=int(
                                                 request.form['Tm_diff']),
                                             cpu=web_config['cpu'],
                                             monitor=False)

    ###################  Output    #########################
    global_var.current_task = 'finish'
    return json.dumps({'meta':{'mode':request.form['app-type'], 'dbs':dbs, 'region_type': request.form['region_type'], \
         'check_multiplex': bool(int(request.form['multiplex']))}, 'primers':primers, 'dimers':dimers}, indent=4)
Esempio n. 4
0
def dbinfo():
    web_config = load()
    return json.dumps(web_config['templates'], indent=4)