about summary refs log tree commit diff
path: root/gn3
diff options
context:
space:
mode:
Diffstat (limited to 'gn3')
-rw-r--r--gn3/api/traits.py48
-rw-r--r--gn3/computations/datasets.py66
2 files changed, 114 insertions, 0 deletions
diff --git a/gn3/api/traits.py b/gn3/api/traits.py
new file mode 100644
index 0000000..b3ddcc0
--- /dev/null
+++ b/gn3/api/traits.py
@@ -0,0 +1,48 @@
+"""this module contains the all endpoints for traits"""
+from unittest import mock
+
+from flask import Blueprint
+from flask import jsonify
+from flask import request
+
+from gn3.computations.traits import fetch_trait
+from gn3.computations.traits import get_trait_info_data
+trait = Blueprint("trait", __name__)
+
+
+@trait.route("/")
+def home():
+    """initial endpoint for traits"""
+    return jsonify({"results": "success"})
+
+
+@trait.route("/<string:trait_name>/<string:dataset_name>")
+def create_trait(trait_name, dataset_name):
+    """endpoints for creating trait first should\
+    call the endpoint for creating the trait only\
+    trait  data is the  sample data"""
+
+    trait_dataset = mock.Mock()  # xtodo should replace this with calling epoints
+    trait_dataset.name = dataset_name
+
+    trait_results = fetch_trait(dataset=trait_dataset, trait_name=trait_name)
+
+    return jsonify(trait_results)
+
+
+@trait.route("/trait_info/<string:trait_name>", methods=["POST"])
+def fetch_trait_info(trait_name):
+    """api endpoint for fetching the trait info \
+    expects the trait and trait dataset to have\
+    been created """
+    data = request.get_json()
+
+    trait_dataset = data["trait_dataset"]
+    trait_data = data["trait"]
+    _trait_name = trait_name  # should be used as key to return results
+
+    database_instance = mock.Mock()
+
+    results = get_trait_info_data(trait_dataset, trait_data, database_instance)
+
+    return jsonify(results)
diff --git a/gn3/computations/datasets.py b/gn3/computations/datasets.py
new file mode 100644
index 0000000..92a7bdf
--- /dev/null
+++ b/gn3/computations/datasets.py
@@ -0,0 +1,66 @@
+"""module contains the code all related to datasets"""
+from unittest import mock
+
+from typing import Optional
+from typing import List
+
+
+def retrieve_trait_sample_data(dataset_id, dataset_type: str, trait_name: str) -> List:
+    """given the dataset id and trait_name fetch the\
+    sample_name,value from the dataset"""
+
+    # should pass the db as arg all  do a setup
+
+    _func_args = (dataset_id, dataset_type, trait_name)
+    dataset_query = get_query_for_dataset_sample(dataset_type)
+
+    if dataset_query:
+        if dataset_type == "Publish":
+            formatted_query = dataset_query % (trait_name, dataset_id)
+            results = fetch_from_db_sample_data(formatted_query, mock.Mock())
+            return results
+
+        return []
+
+    return []
+
+
+def fetch_from_db_sample_data(formatted_query: str, database_instance) -> List:
+    """this is the function that does the actual fetching of\
+    results from the database"""
+    cursor = database_instance.cursor()
+    cursor.execute(formatted_query)
+    results = cursor.fetchall()
+
+    cursor.close()
+
+    return results
+
+
+def get_query_for_dataset_sample(dataset_type) -> Optional[str]:
+    """this functions contains querys for\
+    getting sample data from the db depending in
+    dataset"""
+    dataset_query = {}
+
+    pheno_query = """
+                SELECT
+                        Strain.Name, PublishData.value, PublishSE.error,NStrain.count, Strain.Name2
+                FROM
+                        (PublishData, Strain, PublishXRef, PublishFreeze)
+                left join PublishSE on
+                        (PublishSE.DataId = PublishData.Id AND PublishSE.StrainId = PublishData.StrainId)
+                left join NStrain on
+                        (NStrain.DataId = PublishData.Id AND
+                        NStrain.StrainId = PublishData.StrainId)
+                WHERE
+                        PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND
+                        PublishData.Id = PublishXRef.DataId AND PublishXRef.Id = %s AND
+                        PublishFreeze.Id = %s AND PublishData.StrainId = Strain.Id
+                Order BY
+                        Strain.Name
+                """
+
+    dataset_query["Publish"] = pheno_query
+
+    return dataset_query.get(dataset_type)