def gen_gene_id_list(trait_list): trait_name_list = [] gene_id_list = [] for trait_db in trait_list: trait = trait_db[0] trait_name_list.append(trait.name) retrieve_trait_info(trait, trait.dataset) gene_id_list.append(str(trait.geneid)) return trait_name_list, gene_id_list
def view_collection(): params = request.args uc_id = params['uc_id'] uc = (collection for collection in g.user_session.user_collections if collection["id"] == uc_id).next() traits = uc["members"] trait_obs = [] json_version = [] for atrait in traits: name, dataset_name = atrait.split(':') if dataset_name == "Temp": group = name.split("_")[2] dataset = create_dataset(dataset_name, dataset_type="Temp", group_name=group) trait_ob = trait.GeneralTrait(name=name, dataset=dataset) else: dataset = create_dataset(dataset_name) trait_ob = trait.GeneralTrait(name=name, dataset=dataset) trait_ob = trait.retrieve_trait_info(trait_ob, dataset, get_qtl_info=True) trait_obs.append(trait_ob) json_version.append(trait.jsonable(trait_ob)) collection_info = dict(trait_obs=trait_obs, uc=uc) if "json" in params: return json.dumps(json_version) else: return render_template("collections/view.html", **collection_info)
def test_retrieve_trait_info_with_empty_lrs_field(self, resource_id_mock, g_mock, requests_mock): """Test retrieve trait info with empty lrs field""" resource_id_mock.return_value = 1 g_mock.db.execute.return_value.fetchone = mock.Mock() g_mock.db.execute.return_value.fetchone.side_effect = [ [1, 2, 3, 4], # trait_info = g.db.execute(query).fetchone() [1, None, 3, 4, 5], # trait_qtl = g.db.execute(query).fetchone() [2, 3] # trait_info = g.db.execute(query).fetchone() ] requests_mock.return_value = None mock_dataset = mock.MagicMock() type(mock_dataset).display_fields = mock.PropertyMock( return_value=["a", "b", "c", "d"]) type(mock_dataset).type = "ProbeSet" type(mock_dataset).name = "RandomName" mock_trait = MockTrait(dataset=mock_dataset, pre_publication_description="test_string") trait_attrs = { "description": "some description", "probe_target_description": "some description", "cellid": False, "chr": 2.733, "mb": 2.1204 } for key, val in list(trait_attrs.items()): setattr(mock_trait, key, val) test_trait = retrieve_trait_info(trait=mock_trait, dataset=mock_dataset, get_qtl_info=True) self.assertEqual(test_trait.LRS_score_repr, "N/A") self.assertEqual(test_trait.LRS_location_repr, "Chr2: 3.000000")
def test_retrieve_trait_info_utf8_parsing(self, requests_mock): """Test that utf-8 strings are parsed correctly""" utf_8_string = "test_string" mock_dataset = mock.MagicMock() requests_mock.return_value = TestResponse() type(mock_dataset).display_fields = mock.PropertyMock( return_value=["a", "b", "c", "d"]) type(mock_dataset).type = 'Publish' mock_trait = MockTrait(dataset=mock_dataset, pre_publication_description=utf_8_string) trait_attrs = { "group_code": "test_code", "pre_publication_description": "test_pre_pub", "pre_publication_abbreviation": "ファイルを画面毎に見て行くには、次のコマンドを使います。", "post_publication_description": None, "pubmed_id": None, 'year': "2020", "authors": "Jane Doe かいと", } for key, val in list(trait_attrs.items()): setattr(mock_trait, key, val) test_trait = retrieve_trait_info(trait=mock_trait, dataset=mock_dataset) self.assertEqual(test_trait.abbreviation, "ファイルを画面毎に見て行くには、次のコマンドを使います。") self.assertEqual(test_trait.authors, "Jane Doe かいと")
def test_retrieve_trait_info_with_non_empty_trait_info( self, requests_mock): """Test that attributes are set""" mock_dataset = mock.MagicMock() requests_mock.return_value = TestResponse() type(mock_dataset).display_fields = mock.PropertyMock( return_value=["a", "b", "c", "d"]) test_trait = retrieve_trait_info(trait=MockTrait(dataset=mock_dataset), dataset=mock_dataset) self.assertEqual(test_trait.a, 1) self.assertEqual(test_trait.b, 2) self.assertEqual(test_trait.c, 3) self.assertEqual(test_trait.d, 4)
def view_collection(): params = request.args print("PARAMS in view collection:", params) if "uc_id" in params: uc_id = params['uc_id'] uc = model.UserCollection.query.get(uc_id) traits = json.loads(uc.members) else: user_collections = json.loads(Redis.get(user_manager.AnonUser().key)) this_collection = {} for collection in user_collections: if collection['id'] == params['collection_id']: this_collection = collection break #this_collection = user_collections[params['collection_id']] traits = this_collection['members'] print("in view_collection traits are:", traits) trait_obs = [] json_version = [] for atrait in traits: name, dataset_name = atrait.split(':') if dataset_name == "Temp": group = name.split("_")[2] dataset = create_dataset(dataset_name, dataset_type = "Temp", group_name = group) trait_ob = trait.GeneralTrait(name=name, dataset=dataset) else: dataset = create_dataset(dataset_name) trait_ob = trait.GeneralTrait(name=name, dataset=dataset) trait_ob = trait.retrieve_trait_info(trait_ob, dataset, get_qtl_info=True) trait_obs.append(trait_ob) json_version.append(trait.jsonable(trait_ob)) if "uc_id" in params: collection_info = dict(trait_obs=trait_obs, uc = uc) else: collection_info = dict(trait_obs=trait_obs, collection_name=this_collection['name']) if "json" in params: print("json_version:", json_version) return json.dumps(json_version) else: return render_template("collections/view.html", **collection_info )
def view_collection(): params = request.args if g.user_session.logged_in and "uc_id" in params: uc_id = params['uc_id'] uc = (collection for collection in g.user_session.user_collections if collection["id"] == uc_id).next() traits = uc["members"] else: user_collections = json.loads(Redis.get(user_manager.AnonUser().key)) this_collection = {} for collection in user_collections: if collection['id'] == params['collection_id']: this_collection = collection break traits = this_collection['members'] trait_obs = [] json_version = [] for atrait in traits: name, dataset_name = atrait.split(':') if dataset_name == "Temp": group = name.split("_")[2] dataset = create_dataset(dataset_name, dataset_type = "Temp", group_name = group) trait_ob = trait.GeneralTrait(name=name, dataset=dataset) else: dataset = create_dataset(dataset_name) trait_ob = trait.GeneralTrait(name=name, dataset=dataset) trait_ob = trait.retrieve_trait_info(trait_ob, dataset, get_qtl_info=True) trait_obs.append(trait_ob) json_version.append(trait.jsonable(trait_ob)) if "uc_id" in params: collection_info = dict(trait_obs=trait_obs, uc = uc) else: collection_info = dict(trait_obs=trait_obs, collection_name=this_collection['name']) if "json" in params: return json.dumps(json_version) else: return render_template("collections/view.html", **collection_info )
def view_collection(): params = request.args uc_id = params['uc_id'] uc = next( (collection for collection in g.user_session.user_collections if collection["id"] == uc_id)) traits = uc["members"] trait_obs = [] json_version = [] for atrait in traits: if ':' not in atrait: continue name, dataset_name = atrait.split(':') if dataset_name == "Temp": group = name.split("_")[2] dataset = create_dataset( dataset_name, dataset_type="Temp", group_name=group) trait_ob = create_trait(name=name, dataset=dataset) else: dataset = create_dataset(dataset_name) trait_ob = create_trait(name=name, dataset=dataset) trait_ob = retrieve_trait_info( trait_ob, dataset, get_qtl_info=True) trait_obs.append(trait_ob) json_version.append(jsonable(trait_ob)) collection_info = dict( trait_obs=trait_obs, uc=uc, heatmap_data_url=f"{GN_SERVER_URL}heatmaps/clustered") if "json" in params: return json.dumps(json_version) else: return render_template("collections/view.html", **collection_info )
def export_search_results_csv(targs): table_data = json.loads(targs['export_data']) table_rows = table_data['rows'] now = datetime.datetime.now() time_str = now.strftime('%H:%M_%d%B%Y') if 'file_name' in targs: zip_file_name = targs['file_name'] + "_export_" + time_str else: zip_file_name = "export_" + time_str metadata = [] if 'database_name' in targs: if targs['database_name'] != "None": metadata.append(["Data Set: " + targs['database_name']]) if 'accession_id' in targs: if targs['accession_id'] != "None": metadata.append([ "Metadata Link: http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId=" + targs['accession_id'] ]) metadata.append( ["Export Date: " + datetime.datetime.now().strftime("%B %d, %Y")]) metadata.append( ["Export Time: " + datetime.datetime.now().strftime("%H:%M GMT")]) if 'search_string' in targs: if targs['search_string'] != "None": metadata.append(["Search Query: " + targs['search_string']]) if 'filter_term' in targs: if targs['filter_term'] != "None": metadata.append(["Search Filter Terms: " + targs['filter_term']]) metadata.append(["Exported Row Number: " + str(len(table_rows))]) metadata.append([ "Funding for The GeneNetwork: NIGMS (R01 GM123489, 2017-2021), NIDA (P30 DA044223, 2017-2022), NIA (R01AG043930, 2013-2018), NIAAA (U01 AA016662, U01 AA013499, U24 AA013513, U01 AA014425, 2006-2017), NIDA/NIMH/NIAAA (P20-DA 21131, 2001-2012), NCI MMHCC (U01CA105417), NCRR/BIRN (U24 RR021760)" ]) metadata.append([]) trait_list = [] for trait in table_rows: trait_name, dataset_name, _hash = trait.split(":") trait_ob = create_trait(name=trait_name, dataset_name=dataset_name) trait_ob = retrieve_trait_info(trait_ob, trait_ob.dataset, get_qtl_info=True) trait_list.append(trait_ob) table_headers = [ 'Index', 'URL', 'Species', 'Group', 'Dataset', 'Record ID', 'Symbol', 'Description', 'ProbeTarget', 'PubMed_ID', 'Chr', 'Mb', 'Alias', 'Gene_ID', 'Homologene_ID', 'UniGene_ID', 'Strand_Probe', 'Probe_set_specificity', 'Probe_set_BLAT_score', 'Probe_set_BLAT_Mb_start', 'Probe_set_BLAT_Mb_end', 'QTL_Chr', 'QTL_Mb', 'Locus_at_Peak', 'Max_LRS', 'P_value_of_MAX', 'Mean_Expression' ] traits_by_group = sort_traits_by_group(trait_list) file_list = [] for group in list(traits_by_group.keys()): group_traits = traits_by_group[group] buff = io.StringIO() writer = csv.writer(buff) csv_rows = [] sample_headers = [] for sample in group_traits[0].dataset.group.samplelist: sample_headers.append(sample) sample_headers.append(sample + "_SE") full_headers = table_headers + sample_headers for metadata_row in metadata: writer.writerow(metadata_row) csv_rows.append(full_headers) for i, trait in enumerate(group_traits): if getattr(trait, "symbol", None): trait_symbol = getattr(trait, "symbol") elif getattr(trait, "abbreviation", None): trait_symbol = getattr(trait, "abbreviation") else: trait_symbol = "N/A" row_contents = [ i + 1, "https://genenetwork.org/show_trait?trait_id=" + str(trait.name) + "&dataset=" + str(trait.dataset.name), trait.dataset.group.species, trait.dataset.group.name, trait.dataset.name, trait.name, trait_symbol, getattr(trait, "description_display", "N/A"), getattr(trait, "probe_target_description", "N/A"), getattr(trait, "pubmed_id", "N/A"), getattr(trait, "chr", "N/A"), getattr(trait, "mb", "N/A"), trait.alias_fmt, getattr(trait, "geneid", "N/A"), getattr(trait, "homologeneid", "N/A"), getattr(trait, "unigeneid", "N/A"), getattr(trait, "strand_probe", "N/A"), getattr(trait, "probe_set_specificity", "N/A"), getattr(trait, "probe_set_blat_score", "N/A"), getattr(trait, "probe_set_blat_mb_start", "N/A"), getattr(trait, "probe_set_blat_mb_end", "N/A"), getattr(trait, "locus_chr", "N/A"), getattr(trait, "locus_mb", "N/A"), getattr(trait, "locus", "N/A"), getattr(trait, "lrs", "N/A"), getattr(trait, "pvalue", "N/A"), getattr(trait, "mean", "N/A") ] for sample in trait.dataset.group.samplelist: if sample in trait.data: row_contents += [ trait.data[sample].value, trait.data[sample].variance ] else: row_contents += ["x", "x"] csv_rows.append(row_contents) csv_rows = list( map(list, itertools.zip_longest(*[row for row in csv_rows]))) writer.writerows(csv_rows) csv_data = buff.getvalue() buff.close() file_name = group + "_traits.csv" file_list.append([file_name, csv_data]) return file_list
def test_retrieve_trait_info_with_empty_trait_info(self, requests_mock): """Empty trait info""" requests_mock.return_value = TestNilResponse() with self.assertRaises(KeyError): retrieve_trait_info(trait=mock.MagicMock(), dataset=mock.MagicMock())
def test_retrieve_trait_info_with_empty_dataset(self): """Test that an exception is raised when dataset is empty""" with self.assertRaises(AssertionError): retrieve_trait_info(trait=mock.MagicMock(), dataset={})