about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gn3/db/rdf.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/gn3/db/rdf.py b/gn3/db/rdf.py
index f46e33c..deecefa 100644
--- a/gn3/db/rdf.py
+++ b/gn3/db/rdf.py
@@ -90,3 +90,31 @@ WHERE {
     )[0].items():
         result[key] = value.bind(lambda x: Just(x["value"]))
     return result
+
+
+def get_trait_metadata(
+        sparql_conn: SPARQLWrapper,
+        trait_name: str,
+        dataset_name: str
+):
+    """Return metadata about a given trait"""
+    __metadata_query = """
+PREFIX gn: <http://genenetwork.org/>
+
+SELECT strafter((str(?key)), "http://genenetwork.org/sampledata:") as ?key
+    ?value WHERE {
+    gn:sampledata_$trait_name gn:sampledata:dataset "$dataset_name" .
+    gn:sampledata_$trait_name ?key ?value .
+}
+"""
+    result: MonadicDict = MonadicDict()
+    for _r in sparql_query(
+            sparql_conn,
+            Template(__metadata_query)
+            .substitute(trait_name=trait_name,
+                        dataset_name=dataset_name)
+    ):
+        _key = _r["key"].bind(lambda x: x["value"])  # type:ignore
+        if _key:
+            result[_key] = _r["value"].bind(lambda x: Just(x["value"]))  # type:ignore
+    return result