about summary refs log tree commit diff
path: root/gn2/wqflask/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'gn2/wqflask/views.py')
-rw-r--r--gn2/wqflask/views.py109
1 files changed, 98 insertions, 11 deletions
diff --git a/gn2/wqflask/views.py b/gn2/wqflask/views.py
index 993c6f0c..4421011b 100644
--- a/gn2/wqflask/views.py
+++ b/gn2/wqflask/views.py
@@ -1,4 +1,5 @@
 """Main routing table for GN2"""
+
 import array
 import base64
 import csv
@@ -44,6 +45,7 @@ from flask import flash
 
 from gn2.wqflask import search_results
 from gn2.wqflask import server_side
+
 # Used by YAML in marker_regression
 from gn2.base.data_set import create_dataset
 from gn2.base.trait import fetch_symbols
@@ -288,6 +290,38 @@ def gnqna():
     return render_template("gnqa.html")
 
 
+@app.route("/editor/edit", methods=["GET"])
+@require_oauth2
+def edit_gn_doc_file():
+    file_path = request.args.get("file-path", "")
+    response = requests.get(f"http://localhost:8091/edit?file_path={file_path}")
+    response.raise_for_status()
+    return render_template("gn_editor.html", **response.json())
+
+
+@app.route("/editor/settings", methods=["GET"])
+@require_oauth2
+def configure_gn_editor():
+    return render_template("gn_editor_settings.html")
+
+
+@app.route("/editor/commit", methods=["GET", "POST"])
+@require_oauth2
+def commit_gn_doc():
+    # TODO add env variable for gn-guile web server
+    if request.method == "GET":
+        return render_template("gn_editor_commit.html")
+    results = requests.post("http://localhost:8091/commit", json={
+                          "content":  request.form.get("content"),
+                          "filename": request.form.get("file_path"),
+                          "username": session_info()["user"]["name"],
+                          "email": session_info()["user"]["email"],
+                          "commit_message": request.form.get("msg"),
+                          "prev_commit": request.form.get("hash")})
+    data = results.json()
+    data["filename"] = request.form.get("file_path")
+    return render_template("gn_editor_results_page.html", **data)
+
 
 @app.route("/gnqna/hist", methods=["GET", "DELETE"])
 @require_oauth2
@@ -1039,7 +1073,8 @@ def corr_compute_page():
     with Redis.from_url(REDIS_URL, decode_responses=True) as rconn:
         if request.method == "POST":
             request_received = datetime.datetime.utcnow()
-            filename = hmac.hmac_creation(f"request_form_{request_received.isoformat()}")
+            filename = hmac.hmac_creation(
+                f"request_form_{request_received.isoformat()}")
             filepath = f"{TMPDIR}{filename}"
             with open(filepath, "wb") as pfile:
                 pickle.dump(request.form, pfile,
@@ -1201,19 +1236,25 @@ def display_diffs_users():
                            files=files)
 
 
-@app.route("/genewiki/<symbol>")
-def display_generif_page(symbol):
+@app.route("/genewiki/<string:symbol>")
+def display_genewiki_page(symbol: str):
     """Fetch GeneRIF metadata from GN3 and display it"""
-    entries = requests.get(
-        urljoin(
-            GN3_LOCAL_URL,
-            f"/api/metadata/genewiki/{symbol}"
+    wiki = {}
+    try:
+        wiki = requests.get(
+            urljoin(
+                GN3_LOCAL_URL,
+                f"/api/metadata/wiki/{symbol}"
+            )
         )
-    ).json()
+        wiki.raise_for_status()
+        wiki = wiki.json()
+    except requests.RequestException as excp:
+        flash(excp, "alert-warning")
     return render_template(
-        "generif.html",
+        "wiki/genewiki.html",
         symbol=symbol,
-        entries=entries
+        wiki=wiki
     )
 
 
@@ -1346,7 +1387,8 @@ def edit_case_attributes(inbredset_id: int) -> Response:
 
         def flash_success(resp):
             def __succ__(remote_resp):
-                flash(f"Success: {remote_resp.json()['message']}", "alert-success")
+                flash(
+                    f"Success: {remote_resp.json()['message']}", "alert-success")
                 return resp
             return __succ__
         return monad_requests.post(
@@ -1472,3 +1514,48 @@ def approve_reject_diff() -> Response:
         return redirect(url_for("view_diff",
                                 inbredset_id=inbredset_id,
                                 diff_id=form["diff_id"]))
+
+
+@app.route("/metadata/wiki/<int:comment_id>/edit", methods=["GET", "POST"])
+def edit_wiki(comment_id: int):
+    """fetch generif metadata from gn3 and display it"""
+    # FIXME: better error handling
+    if request.method == "GET":
+        last_wiki_resp = requests.get(urljoin(GN3_LOCAL_URL, f"/api/metadata/wiki/{comment_id}"))
+        last_wiki_resp.raise_for_status()
+        last_wiki_content = last_wiki_resp.json()
+
+        species_dict_resp = requests.get(urljoin(GN3_LOCAL_URL, "/api/metadata/wiki/species"))
+        species_dict_resp.raise_for_status()
+        species_dict = species_dict_resp.json()
+
+        categories_resp = requests.get(urljoin(GN3_LOCAL_URL, "/api/metadata/wiki/categories"))
+        categories_resp.raise_for_status()
+        categories = list(categories_resp.json().keys())
+        grouped_categories = [categories[i : i + 3] for i in range(0, len(categories), 3)]
+
+        return render_template(
+            "wiki/edit_wiki.html",
+            content=last_wiki_content,
+            species_dict=species_dict,
+            grouped_categories=grouped_categories,
+        )
+    if request.method == "POST":
+        post_data = request.form
+        payload = {
+            "symbol": post_data["symbol"],
+            "pubmed_ids": [x.strip() for x in post_data["pubmed_ids"].split()],
+            "species": post_data["species"],
+            "comment": post_data["comment"],
+            "email": post_data["email"],
+            "web_url": post_data["web_url"],
+            "initial": post_data["initial"],
+            "categories": post_data.getlist("genecategory"),
+            "reason": post_data["reason"],
+            }
+        post_response = requests.post(urljoin(GN3_LOCAL_URL, f"api/metadata/wiki/{comment_id}/edit"), json=payload)
+        post_response.raise_for_status()
+        post_res = post_response.json()
+
+        flash(f"Success: {post_res}", "alert-success")
+        return redirect(url_for("edit_wiki", comment_id=comment_id))