Skip to content

Commit

Permalink
Merge pull request chop-dbhi#309 from ryanjohara/issue-28
Browse files Browse the repository at this point in the history
Batch the variant data into a single request
  • Loading branch information
naegelyd committed Jun 11, 2014
2 parents a139848 + 9fb150b commit 91db32b
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 29 deletions.
25 changes: 25 additions & 0 deletions varify/samples/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from varify import api
from varify.assessments.models import Assessment
from .models import Sample, Result, ResultScore
from restlib2.http import codes

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -246,6 +247,28 @@ def get(self, request, pk):

return data

post = get


class ResultsResource(ThrottledResource):
template = api.templates.SampleResultVariant

def post(self, request):
ids_not_found = 'ids' not in request.data
not_a_list = not isinstance(request.data['ids'], list)

if ids_not_found or not_a_list:
return self.render(
{'message': 'An array of "ids" is required'},
status=codes.unprocessable_entity)

data = []
resource = SampleResultResource()
for id in request.data['ids']:
data.append(resource.get(request, id))

return data


class PhenotypeResource(ThrottledResource):
def get(self, request, sample_id):
Expand Down Expand Up @@ -327,6 +350,7 @@ def get(self, request, year, month, day, name):
named_sample_resource = never_cache(NamedSampleResource())
sample_results_resource = never_cache(SampleResultsResource())
sample_result_resource = never_cache(SampleResultResource())
results_resource = never_cache(ResultsResource())
phenotype_resource = never_cache(PhenotypeResource())
pedigree_resource = never_cache(PedigreeResource())

Expand All @@ -338,6 +362,7 @@ def get(self, request, year, month, day, name):
named_sample_resource, name='named_sample'),
url(r'^(?P<pk>\d+)/variants/$', sample_results_resource, name='variants'),
url(r'^variants/(?P<pk>\d+)/$', sample_result_resource, name='variant'),
url(r'^variants/$', results_resource, name='results_resource'),
url(r'^(?P<sample_id>.+)/phenotypes/$', phenotype_resource,
name='phenotype'),
url(r'^pedigrees/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<name>.+)$',
Expand Down
11 changes: 10 additions & 1 deletion varify/static/js/src/models/result.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,16 @@ define([
}
});

var ResultCollection = Backbone.Collection.extend({
model: Result,

url: function() {
return '' + utils.getRootUrl() + 'api/samples/variants/';
}
});

return {
Result: Result
Result: Result,
ResultCollection: ResultCollection
};
});
18 changes: 13 additions & 5 deletions varify/static/js/src/ui/tables/body.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
define([
'underscore',
'marionette',
'../../models',
'./row'
], function(_, Marionette, row) {
], function(_, Marionette, models, row) {

// Represents a "frame" of rows. The model is referenced for keeping
// track which frame this is relative to the whole series.
Expand All @@ -13,11 +14,18 @@ define([

template: function() {},

itemView: row.ResultRow,
initialize: function(options) {
this.collection = new models.ResultCollection();
var data = {ids: options.collection.pluck('pk')};
this.collection.fetch({
data: JSON.stringify(data),
type: 'POST',
contentType: 'application/json',
parse: true
});
},

itemViewOptions: function (model, index) {
return _.defaults({resultPk: model.get('pk')}, this.options);
}
itemView: row.ResultRow
});

return {
Expand Down
25 changes: 2 additions & 23 deletions varify/static/js/src/ui/tables/row.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,27 +19,11 @@ define([
'click': 'onClick'
},

onClick: function(events) {
onClick: function() {
c.dialogs.resultDetails.open(this, this.model);
},

initialize: function() {
_.bindAll(this, 'onSync');

this.data = {};

if (!(this.data.resultPk = this.options.resultPk)) {
throw new Error('result pk required');
}

this.model = new models.Result({
id: this.data.resultPk
});

this.model.on('sync', this.onSync);
},

onSync: function() {
onRender: function() {
var $condensedFlags, $gene, $genomicPosition, $genotype, $hgvsC,
$hgvsP, $phenotypeScore, $variantEffects, assessment, resultScore,
variant;
Expand Down Expand Up @@ -84,12 +68,7 @@ define([

this.$el.empty();
return this.$el.append($gene, $hgvsP, $variantEffects, $hgvsC, $genotype, $genomicPosition, $phenotypeScore, $condensedFlags);
},

onRender: function() {
this.model.fetch();
}

});

var EmptyResultRow = c.ui.LoadView.extend({
Expand Down

0 comments on commit 91db32b

Please sign in to comment.