示例#1
0
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
示例#2
0
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)
示例#3
0
    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")
示例#4
0
    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 かいと")
示例#5
0
 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
                           )
示例#7
0
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
示例#10
0
 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())
示例#11
0
 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={})