def panel(panel_id): """Display (and add pending updates to) a specific gene panel.""" panel_obj = store.gene_panel(panel_id) or store.panel(panel_id) if request.method == 'POST': raw_hgnc_id = request.form['hgnc_id'] if '|' in raw_hgnc_id: raw_hgnc_id = raw_hgnc_id.split(' | ', 1)[0] hgnc_id = int(raw_hgnc_id) action = request.form['action'] if action == 'add': panel_gene = controllers.existing_gene(store, panel_obj, hgnc_id) if panel_gene: flash("gene already in panel: {}".format(panel_gene['symbol']), 'warning') else: # ask user to fill-in more information about the gene return redirect( url_for('.gene_edit', panel_id=panel_id, hgnc_id=hgnc_id)) elif action == 'delete': log.debug("marking gene to be deleted: %s", hgnc_id) store.add_pending(panel_obj, hgnc_id, action='delete') data = controllers.panel(store, panel_obj) if request.args.get('case_id'): data['case'] = store.case(request.args['case_id']) if request.args.get('institute_id'): data['institute'] = store.institute(request.args['institute_id']) return data
def gene_edit(panel_id, hgnc_id): """Edit additional information about a panel gene.""" panel_obj = store.panel(panel_id) hgnc_gene = store.hgnc_gene(hgnc_id) panel_gene = controllers.existing_gene(store, panel_obj, hgnc_id) form = PanelGeneForm() transcript_choices = [] for transcript in hgnc_gene['transcripts']: if transcript.get('refseq_id'): refseq_id = transcript.get('refseq_id') transcript_choices.append((refseq_id, refseq_id)) form.disease_associated_transcripts.choices = transcript_choices if form.validate_on_submit(): action = 'edit' if panel_gene else 'add' info_data = form.data.copy() if 'csrf_token' in info_data: del info_data['csrf_token'] store.add_pending(panel_obj, hgnc_gene, action=action, info=info_data) return redirect(url_for('.panel', panel_id=panel_id)) if panel_gene: for field_key in ['disease_associated_transcripts', 'reduced_penetrance', 'mosaicism', 'inheritance_models', 'database_entry_version', 'comment']: form_field = getattr(form, field_key) if not form_field.data: panel_value = panel_gene.get(field_key) if panel_value is not None: form_field.process_data(panel_value) return dict(panel=panel_obj, form=form, gene=hgnc_gene, panel_gene=panel_gene)
def gene_edit(panel_id, hgnc_id): """Edit additional information about a panel gene.""" panel_obj = store.panel(panel_id) hgnc_gene = store.hgnc_gene(hgnc_id) panel_gene = controllers.existing_gene(store, panel_obj, hgnc_id) form = PanelGeneForm() transcript_choices = [] for transcript in hgnc_gene["transcripts"]: if transcript.get("refseq_id"): refseq_id = transcript.get("refseq_id") transcript_choices.append((refseq_id, refseq_id)) # collect even refseq version provided by user for this transcript (might have a version) if panel_obj.get("genes"): genes_dict = {gene_obj["symbol"]: gene_obj for gene_obj in panel_obj["genes"]} gene_obj = genes_dict.get(hgnc_gene["hgnc_symbol"]) if gene_obj: for transcript in gene_obj.get("disease_associated_transcripts", []): if (transcript, transcript) not in transcript_choices: transcript_choices.append((transcript, transcript)) form.disease_associated_transcripts.choices = transcript_choices if form.validate_on_submit(): action = "edit" if panel_gene else "add" info_data = form.data.copy() if "csrf_token" in info_data: del info_data["csrf_token"] if info_data["custom_inheritance_models"] != "": info_data["custom_inheritance_models"] = info_data[ "custom_inheritance_models" ].split(",") store.add_pending(panel_obj, hgnc_gene, action=action, info=info_data) return redirect(url_for(".panel", panel_id=panel_id)) if panel_gene: form.custom_inheritance_models.data = ", ".join( panel_gene.get("custom_inheritance_models", []) ) for field_key in [ "disease_associated_transcripts", "reduced_penetrance", "mosaicism", "inheritance_models", "custom_inheritance_models", "database_entry_version", "comment", ]: form_field = getattr(form, field_key) if not form_field.data: panel_value = panel_gene.get(field_key) if panel_value is not None: form_field.process_data(panel_value) return dict(panel=panel_obj, form=form, gene=hgnc_gene, panel_gene=panel_gene)
def gene_edit(panel_id, hgnc_id): """Edit additional information about a panel gene.""" panel_obj = store.panel(panel_id) hgnc_gene = store.hgnc_gene_caption( hgnc_identifier=hgnc_id, build="37") or store.hgnc_gene_caption( hgnc_identifier=hgnc_id, build="38") panel_gene = controllers.existing_gene(store, panel_obj, hgnc_id) form = PanelGeneForm() form.disease_associated_transcripts.choices = tx_choices( hgnc_id, panel_obj) if form.validate_on_submit(): action = "edit" if panel_gene else "add" info_data = form.data.copy() if "csrf_token" in info_data: del info_data["csrf_token"] if info_data["custom_inheritance_models"] != "": info_data["custom_inheritance_models"] = info_data[ "custom_inheritance_models"].split(",") store.add_pending(panel_obj, hgnc_gene, action=action, info=info_data) return redirect(url_for(".panel", panel_id=panel_id)) if panel_gene: custom_models = [ model for model in panel_gene.get("custom_inheritance_models", []) if model != "" ] if custom_models: form.custom_inheritance_models.data = ", ".join( panel_gene.get("custom_inheritance_models")) for field_key in [ "disease_associated_transcripts", "reduced_penetrance", "mosaicism", "inheritance_models", "custom_inheritance_models", "database_entry_version", "comment", ]: form_field = getattr(form, field_key) if not form_field.data: panel_value = panel_gene.get(field_key) if panel_value is not None: form_field.process_data(panel_value) return dict(panel=panel_obj, form=form, gene=hgnc_gene, panel_gene=panel_gene)
def panel(panel_id): """Display (and add pending updates to) a specific gene panel.""" panel_obj = store.gene_panel(panel_id) or store.panel(panel_id) if not panel_obj: flash("Panel with id {} not found.".format(panel_id), "warning") return redirect(url_for("panels.panels")) if request.method == "POST": if request.form.get("update_description"): panel_obj["description"] = request.form["panel_description"] if controllers.panel_write_granted(panel_obj, current_user): store.update_panel(panel_obj=panel_obj) else: flash( "Permission denied: please ask a panel maintainer or admin for help.", "danger", ) return redirect(url_for("panels.panel", panel_id=panel_obj["_id"])) raw_hgnc_id = request.form["hgnc_id"] if "|" in raw_hgnc_id: raw_hgnc_id = raw_hgnc_id.split(" | ", 1)[0] hgnc_id = 0 try: hgnc_id = int(raw_hgnc_id) except ValueError: flash("Provided HGNC is not valid : '{}'".format(raw_hgnc_id), "danger") return redirect(request.referrer) action = request.form["action"] gene_obj = store.hgnc_gene_caption( hgnc_identifier=hgnc_id, build="37") or store.hgnc_gene_caption( hgnc_identifier=hgnc_id, build="38") if gene_obj is None: flash("HGNC id not found: {}".format(hgnc_id), "warning") return redirect(request.referrer) if action == "add": panel_gene = controllers.existing_gene(store, panel_obj, hgnc_id) if panel_gene: flash("gene already in panel: {}".format(panel_gene["symbol"]), "warning") else: # ask user to fill-in more information about the gene return redirect( url_for(".gene_edit", panel_id=panel_id, hgnc_id=hgnc_id)) elif action == "delete": LOG.debug("marking gene to be deleted: %s", hgnc_id) panel_obj = store.add_pending(panel_obj, gene_obj, action="delete") data = controllers.panel(store, panel_obj) if request.args.get("case_id"): data["case"] = store.case(request.args["case_id"]) if request.args.get("institute_id"): data["institute"] = store.institute(request.args["institute_id"]) return data
def panel(panel_id): """Display (and add pending updates to) a specific gene panel.""" panel_obj = store.gene_panel(panel_id) or store.panel(panel_id) if request.method == 'POST': if request.form.get('update_description'): panel_obj['description'] = request.form['panel_description'] store.update_panel(panel_obj=panel_obj) return redirect( url_for('panels.panel', panel_id=panel_obj['_id']) ) raw_hgnc_id = request.form['hgnc_id'] if '|' in raw_hgnc_id: raw_hgnc_id = raw_hgnc_id.split(' | ', 1)[0] hgnc_id = 0 try: hgnc_id = int(raw_hgnc_id) except: flash("Provided HGNC is not valid : '{}'". format(raw_hgnc_id), 'danger') return redirect(request.referrer) action = request.form['action'] gene_obj = store.hgnc_gene(hgnc_id) if gene_obj is None: flash("HGNC id not found: {}".format(hgnc_id), 'warning') return redirect(request.referrer) if action == 'add': panel_gene = controllers.existing_gene(store, panel_obj, hgnc_id) if panel_gene: flash("gene already in panel: {}".format(panel_gene['symbol']), 'warning') else: # ask user to fill-in more information about the gene return redirect(url_for('.gene_edit', panel_id=panel_id, hgnc_id=hgnc_id)) elif action == 'delete': log.debug("marking gene to be deleted: %s", hgnc_id) panel_obj = store.add_pending(panel_obj, gene_obj, action='delete') data = controllers.panel(store, panel_obj) if request.args.get('case_id'): data['case'] = store.case(request.args['case_id']) if request.args.get('institute_id'): data['institute'] = store.institute(request.args['institute_id']) return data
def panel(panel_id): """Display (and add pending updates to) a specific gene panel.""" panel_obj = store.gene_panel(panel_id) or store.panel(panel_id) if request.method == 'POST': raw_hgnc_id = request.form['hgnc_id'] if '|' in raw_hgnc_id: raw_hgnc_id = raw_hgnc_id.split(' | ', 1)[0] hgnc_id = 0 try: hgnc_id = int(raw_hgnc_id) except: flash("Provided HGNC is not valid : '{}'". format(raw_hgnc_id), 'danger') return redirect(request.referrer) action = request.form['action'] gene_obj = store.hgnc_gene(hgnc_id) if gene_obj is None: flash("HGNC id not found: {}".format(hgnc_id), 'warning') return redirect(request.referrer) if action == 'add': panel_gene = controllers.existing_gene(store, panel_obj, hgnc_id) if panel_gene: flash("gene already in panel: {}".format(panel_gene['symbol']), 'warning') else: # ask user to fill-in more information about the gene return redirect(url_for('.gene_edit', panel_id=panel_id, hgnc_id=hgnc_id)) elif action == 'delete': log.debug("marking gene to be deleted: %s", hgnc_id) panel_obj = store.add_pending(panel_obj, gene_obj, action='delete') data = controllers.panel(store, panel_obj) if request.args.get('case_id'): data['case'] = store.case(request.args['case_id']) if request.args.get('institute_id'): data['institute'] = store.institute(request.args['institute_id']) return data