def functional_table(): form = FunctionClassFilterForm() form.function_class.choices = [('cog', 'Cog'), ('pfam', 'Pfam'), ('tigrfam', 'TigrFam'), ('all', 'All') ] form.select_sample_groups.choices = [(sample_set.name, sample_set.name) for sample_set in SampleSet.query.all()] type_identifiers = [] if form.validate_on_submit(): function_class = form.function_class.data if function_class == 'all': function_class = None limit = form.limit.data if limit == 'all': limit = None else: limit = int(limit) filter_alternative = form.filter_alternative.data if filter_alternative == 'filter_with_type_identifiers': for type_identifier in form.type_identifiers.entries: if type_identifier.data != '': type_identifiers.append(type_identifier.data) elif filter_alternative == 'filter_with_search': search_string = form.search_annotations if search_string.data != '': q = _search_query(search_string.data) type_identifiers = [a.type_identifier for a in q.all()] sample_sets = form.select_sample_groups.data if len(sample_sets) > 0: samples = [sample.scilifelab_code for sample in Sample.all_from_sample_sets(sample_sets)] else: samples = None download_action = False if form.submit_download.data: download_action = True download_select = form.download_select.data else: function_class=None limit=20 samples = None download_action = False if len(form.type_identifiers) == 0: form.type_identifiers.append_entry() if type_identifiers == []: type_identifiers = None samples, table = Annotation.rpkm_table(limit=limit, samples=samples, function_class=function_class, type_identifiers=type_identifiers) samples = sorted(samples, key=lambda x: x.scilifelab_code) sample_scilifelab_codes = [sample.scilifelab_code for sample in samples] if download_action: if download_select == 'Gene List': # Fetch all contributing genes for all the annotations in the table annotation_ids = [annotation.id for annotation, sample in table.items()] genes_per_annotation = Annotation.genes_per_annotation(annotation_ids) csv_output = '\n'.join( [','.join([gene.name, annotation.type_identifier]) \ for gene, annotation in genes_per_annotation]) r = make_response(csv_output) r.headers["Content-Disposition"] = "attachment; filename=gene_list.csv" r.headers["Content-Type"] = "text/csv" return r return render_template('functional_table.html', table=table, samples=samples, sample_scilifelab_codes = sample_scilifelab_codes, form=form )
def test_sample_sampleset(self): #Test that sample and sample set references each other properly sample_set = SampleSet("first_sampleset") sample1 = Sample("P1993_101", sample_set, None) self.session.add(sample1) self.session.add(sample_set) # Sample sets relations are created assert Sample.query.filter_by(scilifelab_code='P1993_101').first().sample_set is sample_set sample_set2 = SampleSet("second_sampleset") sample2 = Sample("P1993_102", sample_set2, None) sample3 = Sample("P1993_103", sample_set, None) self.session.add(sample2) self.session.add(sample3) self.session.commit() # Sample2 should have sample set 2 assert Sample.query.filter_by(scilifelab_code='P1993_102').first().sample_set is sample_set2 # There should be 2 sample sets and 3 samples in the db assert len(SampleSet.query.all()) == 2 assert len(Sample.query.all()) == 3 # The reverse relationship for sample set 2 should have sample1 and sample3 assert len(sample_set.samples) == 2 assert sample2 not in sample_set.samples assert sample1 in sample_set.samples assert sample3 in sample_set.samples assert len(Sample.all_from_sample_sets(['first_sampleset'])) == 2 assert sample1 in Sample.all_from_sample_sets(['first_sampleset']) assert sample3 in Sample.all_from_sample_sets(['first_sampleset']) assert sample2 not in Sample.all_from_sample_sets(['first_sampleset']) assert len(Sample.all_from_sample_sets(['second_sampleset'])) == 1 assert sample1 not in Sample.all_from_sample_sets(['second_sampleset']) assert sample3 not in Sample.all_from_sample_sets(['second_sampleset']) assert sample2 in Sample.all_from_sample_sets(['second_sampleset']) assert len(Sample.all_from_sample_sets(['second_sampleset', 'first_sampleset'])) == 3 assert sample1 in Sample.all_from_sample_sets(['second_sampleset', 'first_sampleset']) assert sample3 in Sample.all_from_sample_sets(['second_sampleset', 'first_sampleset']) assert sample2 in Sample.all_from_sample_sets(['second_sampleset', 'first_sampleset'])