Пример #1
0
    def test_get_or_create_from_clonofilters_does_not_create_a_new_comparison_if_one_already_exists_for_the_set_of_clonofilters(self):
        cf_1 = ClonoFilter(sample=self.s)
        cf_1.save()
        cf_2 = ClonoFilter(sample=self.s)
        cf_2.save()

        Comparison.get_or_create_from_clonofilters([cf_1, cf_2])
        Comparison.get_or_create_from_clonofilters([cf_1, cf_2])

        self.assertEqual(1, Comparison.objects.all().count())
Пример #2
0
def remove_clonofilter(request):
    '''
    Given a comparison id and a clonofilter id from post
    get or create a comparison without the specified clonofilter.
    Returns updated comparison id via http response.
    '''
    if request.method == "POST":
        comp = Comparison.objects.get(id=request.POST['comparison'])
        cfs = [cf for cf in comp.clonofilters_all() if cf.id != int(request.POST['clonofilter'])]
        new_comp, created = Comparison.get_or_create_from_clonofilters(cfs)
        return HttpResponse(new_comp.id)
    else:
        return HttpResponseRedirect(reverse('cf_comparisons.views.compare_v3'))
Пример #3
0
def compare(request, comparison_id):
    '''
    Compare view takes in a comparison object and generates a summary view
    that compares an arbitrary number of clonofilters
    '''

    if request.method == 'POST':
        num_forms = int(request.POST['num_forms'])

        cf_forms = [ClonoFilterForm(request.POST, prefix=str(x))
                    for x in range(0, num_forms)]
        if all([cf_form.is_valid() for cf_form in cf_forms]):
            clonofilters = []
            for cf_form in cf_forms:
                cf, created = ClonoFilter.objects.get_or_create(
                    **cf_form.cleaned_data)
                clonofilters.append(cf)
            comparison, created = Comparison.get_or_create_from_clonofilters(clonofilters)
        else:
            comparison = Comparison.objects.get(id=comparison_id)

            for cf_form in cf_forms:
                print cf_form.errors

        return HttpResponseRedirect(reverse('cf_comparisons.views.compare', args=[comparison.id]))

    comparison = Comparison.objects.get(id=comparison_id)
    filter_forms = comparison.filter_forms_list()


    shared_amino_acids = comparison.get_shared_amino_acids_related()

    samples = comparison.get_samples()
    context = {
               'comparison': comparison,
               'samples': samples,
               'shared_amino_acids': shared_amino_acids,
               }

    if request.is_ajax():
        return render(request, 'compare_ajax.html', context)
    else:
#        context.update({'comparison': comparison})
        return render(request, 'compare.html', context)
Пример #4
0
def update_clonofilters(request, comparison_id):
    comparison = Comparison.objects.get(id=comparison_id)
    if request.method == 'POST':
#        num_forms = int(request.POST['num_forms'])
        cf_forms = [ClonoFilterForm(request.POST, prefix=str(x))
                    for x in range(len(comparison.clonofilters_all()))]
        if all([cf_form.is_valid() for cf_form in cf_forms]):
            clonofilters = []
            for cf_form in cf_forms:
                cf, created = ClonoFilter.objects.get_or_create(
                    **cf_form.cleaned_data)
                clonofilters.append(cf)
            comparison, created = Comparison.get_or_create_from_clonofilters(clonofilters)
        else:
            omparison = Comparison.objects.get(id=comparison_id)

            for cf_form in cf_forms:
                print cf_form.errors

    return HttpResponse(comparison.id, mimetype='application/json')
Пример #5
0
 def test_get_shared_clonotypes_returns_empty_dict_if_only_one_clonofilter_is_provided(self):
     cf = ClonoFilter.objects.all()[0]
     comparison, created = Comparison.get_or_create_from_clonofilters([cf])
     self.assertEqual({}, comparison.get_shared_clonotypes())