diff options
Diffstat (limited to 'gn2/wqflask/views.py')
-rw-r--r-- | gn2/wqflask/views.py | 109 |
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)) |