aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2021-09-20 08:43:38 +0300
committerFrederick Muriuki Muriithi2021-09-20 08:43:38 +0300
commit8442204492a28153e995f3147e06c9758cd3bd28 (patch)
treee53d227c7059d2d5f9c3b4869eb3809bb7250739
parentf5415f41d7f682771555e73f36ac4ee7ef51a1d3 (diff)
downloadgenenetwork3-8442204492a28153e995f3147e06c9758cd3bd28.tar.gz
Enable Cross-Origin Resource Sharing
Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/clustering.gmi * gn3/api/heatmaps.py: Fix bugs in data parsing * gn3/app.py: enable CORS * gn3/settings.py: add flask-cors configurations * guix.scm: Add flask-cors dependency For easier testing of the heatmaps generation feature, this commit activates the cross-origin resource sharing for all "localhost" origins.
-rw-r--r--gn3/api/heatmaps.py4
-rw-r--r--gn3/app.py7
-rw-r--r--gn3/settings.py12
-rw-r--r--guix.scm3
4 files changed, 23 insertions, 3 deletions
diff --git a/gn3/api/heatmaps.py b/gn3/api/heatmaps.py
index eea3ebe..43ac580 100644
--- a/gn3/api/heatmaps.py
+++ b/gn3/api/heatmaps.py
@@ -15,9 +15,9 @@ def clustered_heatmaps():
"message": "You need to provide at least one trait name."
}), 400
conn, _cursor = database_connector()
- def setup_trait_fullname(trait):
+ def parse_trait_fullname(trait):
name_parts = trait.split(":")
return "{dataset_name}::{trait_name}".format(
- dataset_name=trait[1], trait_name=trait[0])
+ dataset_name=name_parts[1], trait_name=name_parts[0])
traits_fullnames = [parse_trait_fullname(trait) for trait in traits_names]
return jsonify(build_heatmap(traits_fullnames, conn)), 200
diff --git a/gn3/app.py b/gn3/app.py
index b4b08d0..6b4c57e 100644
--- a/gn3/app.py
+++ b/gn3/app.py
@@ -11,6 +11,7 @@ from gn3.api.heatmaps import heatmaps
from gn3.api.correlation import correlation
from gn3.api.data_entry import data_entry
+from flask_cors import CORS
def create_app(config: Union[Dict, str, None] = None) -> Flask:
"""Create a new flask object"""
@@ -18,6 +19,12 @@ def create_app(config: Union[Dict, str, None] = None) -> Flask:
# Load default configuration
app.config.from_object("gn3.settings")
+ CORS(
+ app,
+ origins=app.config["CORS_ORIGINS"],
+ allow_headers=app.config["CORS_HEADERS"],
+ supports_credentials=True, intercept_exceptions=False)
+
# Load environment configuration
if "GN3_CONF" in os.environ:
app.config.from_envvar('GN3_CONF')
diff --git a/gn3/settings.py b/gn3/settings.py
index a08f846..9d7bba3 100644
--- a/gn3/settings.py
+++ b/gn3/settings.py
@@ -31,3 +31,15 @@ REAPER_COMMAND = "{}/bin/qtlreaper".format(os.environ.get("GUIX_ENVIRONMENT"))
# genotype files
GENOTYPE_FILES = os.environ.get(
"GENOTYPE_FILES", "{}/genotype_files/genotype".format(os.environ.get("HOME")))
+
+# CROSS-ORIGIN SETUP
+CORS_ORIGINS = [
+ "http://localhost:*",
+ "http://127.0.0.1:*"
+]
+
+CORS_HEADERS = [
+ "Content-Type",
+ "Authorization",
+ "Access-Control-Allow-Credentials"
+]
diff --git a/guix.scm b/guix.scm
index 8e1cf79..fb97142 100644
--- a/guix.scm
+++ b/guix.scm
@@ -106,7 +106,8 @@
("r-stringi" ,r-stringi)
("python-plotly" ,python-plotly)
("python-pandas" ,python-pandas)
- ("rust-qtlreaper" ,rust-qtlreaper)))
+ ("rust-qtlreaper" ,rust-qtlreaper)
+ ("python-flask-cors" ,python-flask-cors)))
(build-system python-build-system)
(home-page "https://github.com/genenetwork/genenetwork3")
(synopsis "GeneNetwork3 API for data science and machine learning.")