aboutsummaryrefslogtreecommitdiff
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)