示例#1
0
    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
示例#2
0
    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
示例#3
0
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)
示例#4
0
 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())
示例#5
0
 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())