about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Kabui2021-04-15 02:15:39 +0300
committerAlexander Kabui2021-04-15 02:15:39 +0300
commitff80b5228e741c24d66d1d1c13702a34aac77a78 (patch)
treeba6b0b8590f949d134c5d21abcc28c287fff5e6f
parent941ac598f7c15161c4e8da2f1f279bb6b6f73d80 (diff)
downloadgenenetwork3-ff80b5228e741c24d66d1d1c13702a34aac77a78.tar.gz
test endpoint for fetching probeset data types
-rw-r--r--gn3/api/datasets.py20
-rw-r--r--gn3/computations/datasets.py50
2 files changed, 69 insertions, 1 deletions
diff --git a/gn3/api/datasets.py b/gn3/api/datasets.py
index 3d6518e..2d13120 100644
--- a/gn3/api/datasets.py
+++ b/gn3/api/datasets.py
@@ -4,6 +4,8 @@ from flask import jsonify
 
 from gn3.computations.datasets import create_dataset
 from gn3.computations.datasets import get_traits_data
+from gn3.computations.datasets import get_probeset_trait_data
+
 from gn3.db_utils import database_connector
 
 
@@ -42,3 +44,21 @@ def fetch_traits_data(dataset_name, dataset_type):
     conn.close()
 
     return jsonify({"results": results})
+
+
+@dataset.route("/fetch_probeset_data/<dataset_name>")
+def fetch_probeset_data(dataset_name):
+    """Endpoint for fetching probeset trait data"""
+    trait_sample_ids = [4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15,
+                        17, 18, 19, 20, 21, 22, 24, 25, 26, 28, 29, 30, 31,
+                        35, 36, 37, 39, 98, 99, 100, 103, 487, 105, 106, 110, 115,
+                        116, 117, 118, 119, 120, 919, 147,
+                        121, 40, 41, 124, 125, 128, 135, 129, 130, 131,
+                        132, 134, 138, 139, 140, 141, 142, 144,
+                        145, 148, 149, 920, 922, 2, 3, 1, 1100]
+
+    conn, _cursor = database_connector()
+
+    results = get_probeset_trait_data(trait_sample_ids, conn, dataset_name)
+
+    return jsonify({"results": results})
diff --git a/gn3/computations/datasets.py b/gn3/computations/datasets.py
index 57e1fe1..b69583e 100644
--- a/gn3/computations/datasets.py
+++ b/gn3/computations/datasets.py
@@ -320,4 +320,52 @@ def get_traits_data(sample_ids, database_instance, dataset_name, dataset_type):
         # print(query)
 
         _results = fetch_from_db_sample_data(query, database_instance)
-    return {}
+
+        return []
+
+
+def get_probeset_trait_data(strain_ids: List, conn, dataset_name) -> dict:
+    """function for getting trait data\
+    for probeset data type similar to\
+    get trait data only difference is that\
+    it uses sub queries"""
+
+    trait_data: dict = {}
+
+    trait_id_name = {}
+
+    traits_query = """
+    SELECT ProbeSetXRef.DataId,ProbeSet.Name FROM (ProbeSet, ProbeSetXRef, ProbeSetFreeze)
+                    WHERE ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id
+                    and ProbeSetFreeze.Name = '{}'
+                    and ProbeSet.Id = ProbeSetXRef.ProbeSetId
+                    order by ProbeSet.Id
+    """.format(dataset_name)
+
+    query = """
+    SELECT * from ProbeSetData
+    where StrainID in ({})
+    and id in (SELECT ProbeSetXRef.DataId FROM (ProbeSet, ProbeSetXRef, ProbeSetFreeze)
+                WHERE ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id
+                and ProbeSetFreeze.Name = '{}'
+                and ProbeSet.Id = ProbeSetXRef.ProbeSetId
+                order by ProbeSet.Id)
+    """.format(",".join(str(strain_id) for strain_id in strain_ids), dataset_name)
+
+    with conn:
+        cursor = conn.cursor()
+        cursor.execute(query)
+        _results = cursor.fetchall()
+        cursor.execute(traits_query)
+        trait_id_name = dict(cursor.fetchall())
+
+    for trait_id, _strain_id, strain_value in _results:
+        trait_name = trait_id_name[trait_id]
+        if trait_data.get(trait_name):
+            trait_data[trait_name].append(strain_value)
+        else:
+            trait_data[trait_name] = []
+
+            trait_data[trait_name].append(strain_value)
+
+    return trait_data