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