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())
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'))
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)
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')
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())