def add_samples(self, samples): ''' Given an array of sample ids, add them to the current comparison and then return a new comparison ''' cfs = list(self.clonofilters_all()) new_cfs = [ClonoFilter.default_from_sample(sample) for sample in samples] comparison, created = Comparison.get_or_create_from_clonofilters( cfs+new_cfs) return comparison
def default_from_samples(samples): ''' In the case where samples are known, but no clonofilter has yet been defined, take in a list of samples, generate the default clonofilter, populate the Comparison object and save the object. ''' # Get a list of default clonofilters for the samples default_clonofilters = [ClonoFilter.default_from_sample(sample) for sample in samples] comparison, created = Comparison.get_or_create_from_clonofilters( default_clonofilters) return comparison
def summary(request, sample_id): ''' summary takes in a request and a sample id and displays an array of summary images and statistics. It can also take a clonofilter via POST or GET ''' s = Sample.objects.get(id=sample_id) if request.method == 'POST': # Handling changes to filter form via POST cf_form = ClonoFilterForm(request.POST) if cf_form.is_valid(): # This code does not create a new clonofilter object if one # with the same form parameters has already been generated cf, created = ClonoFilter.objects.get_or_create( **cf_form.cleaned_data) url = "%s?clonofilter=%s" % ( reverse('samples.views.summary', args=[cf.sample.id]), cf.id) else: url = reverse('samples.views.summary', args=[s.id]) return HttpResponseRedirect(url) else: # Handling requests via GET # Sets up the form to reflect the clonofilter supplied by GET if 'clonofilter' in request.GET: cf_id = request.GET['clonofilter'] try: cf = ClonoFilter.objects.get(id=cf_id) f = ClonoFilterForm( initial=ClonoFilter.objects.filter(id=cf_id).values()[0]) except: return HttpResponseRedirect(reverse('samples.views.summary', args=[s.id])) # If there is no clonofilter specified, just return the default # clonofilter with no values else: f = ClonoFilterForm(initial={'sample': s.id}) cf = ClonoFilter.default_from_sample(s) context = {'sample': s, 'filter_form': f, 'clonofilter': cf, } return render(request, 'summary.html', context)
def test_default_from_sample_creates_a_default_clonofilter_if_one_does_not_exist(self): ClonoFilter.objects.all().delete() cf = ClonoFilter.default_from_sample(self.s) self.assertEqual(cf, ClonoFilter.objects.get())
def test_default_from_sample_does_not_create_a_default_if_one_exists(self): ClonoFilter.objects.all().delete() ClonoFilter.default_from_sample(self.s) ClonoFilter.default_from_sample(self.s) self.assertEqual(1, ClonoFilter.objects.all().count())