Skip to content

Commit

Permalink
Add checkbox restricting genes to those having PTM muts #97
Browse files Browse the repository at this point in the history
  • Loading branch information
krassowski committed Jul 17, 2017
1 parent d1bb025 commit 6a8e500
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 4 deletions.
2 changes: 1 addition & 1 deletion website/templates/gene/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ <h3>Gene list: {{ list_name }}</h3>
<div>
<div id="toolbar" class="gene-widgets">
<form method="GET" class="widget-form" id="toolbar_form">
{% with widgets=[widgets.dataset, widgets.ptm_type, widgets.cancer] %}
{% with widgets=[widgets.dataset, widgets.ptm_type, widgets.cancer, widgets.has_ptm] %}
{% include 'filters/bar.html' %}
{% endwith %}
<input type="hidden" name="fallback" value="True">
Expand Down
36 changes: 33 additions & 3 deletions website/views/gene.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from flask import request
from flask_classful import FlaskView
from flask_classful import route
from sqlalchemy.sql.elements import TextClause

from models import Protein, MC3Mutation, Cancer
from models import Mutation
from models import Gene
Expand All @@ -24,6 +26,13 @@
import sqlalchemy


def select_textual_filters(filters):
return [
filter_ for filter_ in filters
if type(filter_) is TextClause
]


def select_filters(filters, models):
"""Selects filters which are applicable to at least one of given models."""
selected = set()
Expand Down Expand Up @@ -137,6 +146,11 @@ def __init__(self, **kwargs):
choices=Site.types,
as_sqlalchemy=True
),
Filter(
Gene, 'has_ptm_muts',
comparators=['eq'],
as_sqlalchemy=lambda self, value: text('ptm_muts_cnt > 0') if value else text('ptm_muts_cnt > -1')
),
SourceDependentFilter(
[Mutation, MC3Mutation], 'mc3_cancer_code',
comparators=['in'],
Expand All @@ -163,7 +177,13 @@ def make_widgets(filter_manager, cancer=False):
'Type of PTM site', 'select',
filter=filter_manager.filters['Site.type'],
disabled_label='all sites'
)
),
'has_ptm': FilterWidget(
'Genes with PTM mutations only', 'checkbox',
filter=filter_manager.filters['Gene.has_ptm_muts'],
disabled_label='all genes',
labels=['Genes with PTM mutations only']
),
}
if cancer:
base_widgets.update({
Expand All @@ -184,6 +204,8 @@ def ajax_query(sql_filters):

muts, ptm_muts, sites = prepare_subqueries(sql_filters)

textutal_filters = select_textual_filters(sql_filters)

query = (
db.session.query(
Gene.name,
Expand All @@ -195,6 +217,7 @@ def ajax_query(sql_filters):
.select_from(Gene)
.join(Protein, Protein.id == Gene.preferred_isoform_id)
.group_by(Gene.id)
.having(and_(*textutal_filters))
)
return query

Expand Down Expand Up @@ -241,6 +264,9 @@ def list_data(self, list_name):
def query_constructor(sql_filters):
muts, ptm_muts, sites = prepare_subqueries(sql_filters)

textutal_filters = select_textual_filters(sql_filters)
textutal_filters.append(text('muts_cnt > 0'))

return (
db.session.query(
Gene.name,
Expand All @@ -255,23 +281,27 @@ def query_constructor(sql_filters):
.filter(GeneListEntry.gene_list_id == gene_list.id)
.join(Gene, Gene.id == GeneListEntry.gene_id)
.join(Protein, Protein.id == Gene.preferred_isoform_id)
.having(text('muts_cnt > 0'))
.having(and_(*textutal_filters))
.group_by(Gene.id)
)

def count_query_constructor(sql_filters):
muts, ptm_muts, sites = prepare_subqueries(sql_filters)

textutal_filters = select_textual_filters(sql_filters)
textutal_filters.append(text('muts_cnt > 0'))

return (
db.session.query(
GeneListEntry.id,
ptm_muts,
muts
)
.select_from(GeneListEntry)
.join(Gene, GeneListEntry.gene_id == Gene.id)
.join(Protein, Protein.id == Gene.preferred_isoform_id)
.filter(GeneListEntry.gene_list_id == gene_list.id)
.having(text('muts_cnt > 0'))
.having(and_(*textutal_filters))
)

ajax_view = AjaxTableView.from_query(
Expand Down

0 comments on commit 6a8e500

Please sign in to comment.