scout/server/blueprints/variants/views.py
def sv_variants(institute_id, case_name):
    """Display a list of structural variants."""
    page = int(request.form.get('page', 1))

    variant_type = request.args.get('variant_type', 'clinical')

    institute_obj, case_obj = institute_and_case(store, institute_id, case_name)

    form = SvFiltersForm(request.form)

    default_panels = []
    for panel in case_obj['panels']:
        if panel['is_default']:
            default_panels.append(panel['panel_name'])

    request.form.get('gene_panels')
    if bool(request.form.get('clinical_filter')):
        clinical_filter = MultiDict({
            'variant_type': 'clinical',
            'region_annotations': ['exonic','splicing'],
            'functional_annotations': SEVERE_SO_TERMS,
            'thousand_genomes_frequency': str(institute_obj['frequency_cutoff']),
            'variant_type': 'clinical',
            'clingen_ngi': 10,
            'swegen': 10,
            'size': 100,
            'gene_panels': default_panels
             })

    if(request.method == "POST"):
        if bool(request.form.get('clinical_filter')):
            form = SvFiltersForm(clinical_filter)
            form.csrf_token = request.args.get('csrf_token')
        else:
            form = SvFiltersForm(request.form)
    else:
        form = SvFiltersForm(request.args)

    available_panels = case_obj.get('panels', []) + [
        {'panel_name': 'hpo', 'display_name': 'HPO'}]

    panel_choices = [(panel['panel_name'], panel['display_name'])
                     for panel in available_panels]
    form.gene_panels.choices = panel_choices

    if form.data['gene_panels'] == ['hpo']:
        hpo_symbols = list(set(term_obj['hgnc_symbol'] for term_obj in
                               case_obj['dynamic_gene_list']))
        form.hgnc_symbols.data = hpo_symbols

    # update status of case if vistited for the first time
    if case_obj['status'] == 'inactive' and not current_user.is_admin:
        flash('You just activated this case!', 'info')
        user_obj = store.user(current_user.email)
        case_link = url_for('cases.case', institute_id=institute_obj['_id'],
                            case_name=case_obj['display_name'])
        store.update_status(institute_obj, case_obj, user_obj, 'active', case_link)

    variants_query = store.variants(case_obj['_id'], category='sv',
                                    query=form.data)
    data = {}
    # if variants should be exported
    if request.form.get('export'):
        document_header = controllers.variants_export_header(case_obj)
        export_lines = []
        # Return max 500 variants
        export_lines = controllers.variant_export_lines(store, case_obj, variants_query.limit(500))

        def generate(header, lines):
            yield header + '\n'
            for line in lines:
                yield line + '\n'

        headers = Headers()
        headers.add('Content-Disposition','attachment', filename=str(case_obj['display_name'])+'-filtered_sv-variants.csv')
        return Response(generate(",".join(document_header), export_lines), mimetype='text/csv', headers=headers) # return a csv with the exported variants

    else:
        data = controllers.sv_variants(store, institute_obj, case_obj,
                                       variants_query, page)

    return dict(institute=institute_obj, case=case_obj, variant_type=variant_type,
                form=form, severe_so_terms=SEVERE_SO_TERMS, page=page, **data)
def sv_variants(institute_id, case_name):
    """Display a list of structural variants."""
    page = int(request.form.get('page', 1))

    variant_type = request.args.get('variant_type', 'clinical')

    institute_obj, case_obj = institute_and_case(store, institute_id, case_name)

    form = SvFiltersForm(request.form)

    default_panels = []
    for panel in case_obj['panels']:
        if panel['is_default']:
            default_panels.append(panel['panel_name'])

    request.form.get('gene_panels')
    if bool(request.form.get('clinical_filter')):
        clinical_filter = MultiDict({
            'variant_type': 'clinical',
            'region_annotations': ['exonic','splicing'],
            'functional_annotations': SEVERE_SO_TERMS,
            'thousand_genomes_frequency': str(institute_obj['frequency_cutoff']),
            'variant_type': 'clinical',
            'clingen_ngi': 10,
            'swegen': 10,
            'size': 100,
            'gene_panels': default_panels
             })

    if(request.method == "POST"):
        if bool(request.form.get('clinical_filter')):
            form = SvFiltersForm(clinical_filter)
            form.csrf_token = request.args.get('csrf_token')
        else:
            form = SvFiltersForm(request.form)
    else:
        form = SvFiltersForm(request.args)

    available_panels = case_obj.get('panels', []) + [
        {'panel_name': 'hpo', 'display_name': 'HPO'}]

    panel_choices = [(panel['panel_name'], panel['display_name'])
                     for panel in available_panels]
    form.gene_panels.choices = panel_choices

    if form.data['gene_panels'] == ['hpo']:
        hpo_symbols = list(set(term_obj['hgnc_symbol'] for term_obj in
                               case_obj['dynamic_gene_list']))
        form.hgnc_symbols.data = hpo_symbols

    # update status of case if vistited for the first time
    if case_obj['status'] == 'inactive' and not current_user.is_admin:
        flash('You just activated this case!', 'info')
        user_obj = store.user(current_user.email)
        case_link = url_for('cases.case', institute_id=institute_obj['_id'],
                            case_name=case_obj['display_name'])
        store.update_status(institute_obj, case_obj, user_obj, 'active', case_link)

    variants_query = store.variants(case_obj['_id'], category='sv',
                                    query=form.data)
    data = {}
    # if variants should be exported
    if request.form.get('export'):
        document_header = controllers.variants_export_header(case_obj)
        export_lines = []
        # Return max 500 variants
        export_lines = controllers.variant_export_lines(store, case_obj, variants_query.limit(500))

        def generate(header, lines):
            yield header + '\n'
            for line in lines:
                yield line + '\n'

        headers = Headers()
        headers.add('Content-Disposition','attachment', filename=str(case_obj['display_name'])+'-filtered_sv-variants.csv')
        return Response(generate(",".join(document_header), export_lines), mimetype='text/csv', headers=headers) # return a csv with the exported variants

    else:
        data = controllers.sv_variants(store, institute_obj, case_obj,
                                       variants_query, page)

    return dict(institute=institute_obj, case=case_obj, variant_type=variant_type,
                form=form, severe_so_terms=SEVERE_SO_TERMS, page=page, **data)
def sv_variants ( institute_id , case_name ) : page = int ( request . form . get ( 'page' , 1 ) ) variant_type = request . args . get ( 'variant_type' , 'clinical' ) institute_obj , case_obj = institute_and_case ( store , institute_id , case_name ) form = SvFiltersForm ( request . form ) default_panels = [ ] for panel in case_obj [ 'panels' ] : if panel [ 'is_default' ] : default_panels . append ( panel [ 'panel_name' ] ) request . form . get ( 'gene_panels' ) if bool ( request . form . get ( 'clinical_filter' ) ) : clinical_filter = MultiDict ( { 'variant_type' : 'clinical' , 'region_annotations' : [ 'exonic' , 'splicing' ] , 'functional_annotations' : SEVERE_SO_TERMS , 'thousand_genomes_frequency' : str ( institute_obj [ 'frequency_cutoff' ] ) , 'variant_type' : 'clinical' , 'clingen_ngi' : 10 , 'swegen' : 10 , 'size' : 100 , 'gene_panels' : default_panels } ) if ( request . method == "POST" ) : if bool ( request . form . get ( 'clinical_filter' ) ) : form = SvFiltersForm ( clinical_filter ) form . csrf_token = request . args . get ( 'csrf_token' ) else : form = SvFiltersForm ( request . form ) else : form = SvFiltersForm ( request . args ) available_panels = case_obj . get ( 'panels' , [ ] ) + [ { 'panel_name' : 'hpo' , 'display_name' : 'HPO' } ] panel_choices = [ ( panel [ 'panel_name' ] , panel [ 'display_name' ] ) for panel in available_panels ] form . gene_panels . choices = panel_choices if form . data [ 'gene_panels' ] == [ 'hpo' ] : hpo_symbols = list ( set ( term_obj [ 'hgnc_symbol' ] for term_obj in case_obj [ 'dynamic_gene_list' ] ) ) form . hgnc_symbols . data = hpo_symbols # update status of case if vistited for the first time if case_obj [ 'status' ] == 'inactive' and not current_user . is_admin : flash ( 'You just activated this case!' , 'info' ) user_obj = store . user ( current_user . email ) case_link = url_for ( 'cases.case' , institute_id = institute_obj [ '_id' ] , case_name = case_obj [ 'display_name' ] ) store . update_status ( institute_obj , case_obj , user_obj , 'active' , case_link ) variants_query = store . variants ( case_obj [ '_id' ] , category = 'sv' , query = form . data ) data = { } # if variants should be exported if request . form . get ( 'export' ) : document_header = controllers . variants_export_header ( case_obj ) export_lines = [ ] # Return max 500 variants export_lines = controllers . variant_export_lines ( store , case_obj , variants_query . limit ( 500 ) ) def generate ( header , lines ) : yield header + '\n' for line in lines : yield line + '\n' headers = Headers ( ) headers . add ( 'Content-Disposition' , 'attachment' , filename = str ( case_obj [ 'display_name' ] ) + '-filtered_sv-variants.csv' ) return Response ( generate ( "," . join ( document_header ) , export_lines ) , mimetype = 'text/csv' , headers = headers ) # return a csv with the exported variants else : data = controllers . sv_variants ( store , institute_obj , case_obj , variants_query , page ) return dict ( institute = institute_obj , case = case_obj , variant_type = variant_type , form = form , severe_so_terms = SEVERE_SO_TERMS , page = page , * * data )
Display a list of structural variants.
Display a list of structural variants .