about summary refs log tree commit diff
path: root/gn3
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 /gn3
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.
Diffstat (limited to 'gn3')
-rw-r--r--gn3/api/heatmaps.py4
-rw-r--r--gn3/app.py7
-rw-r--r--gn3/settings.py12
3 files changed, 21 insertions, 2 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"
+]