aboutsummaryrefslogtreecommitdiff
path: root/gn3/api/metadata_api/wiki.py
diff options
context:
space:
mode:
authorJohn Nduli2024-08-26 12:40:15 +0300
committerBonfaceKilz2024-08-26 13:06:47 +0300
commit7b2a1794c1b7e7c589b1abe6d307b2a7e4cd2c42 (patch)
tree5dcff41e762419771a4448955281f3f6cce60781 /gn3/api/metadata_api/wiki.py
parent3156f84055502035620a0279e62eb383a5f7d665 (diff)
downloadgenenetwork3-7b2a1794c1b7e7c589b1abe6d307b2a7e4cd2c42.tar.gz
refactor: split out utlities into their modules and change api to use metadata
Diffstat (limited to 'gn3/api/metadata_api/wiki.py')
-rw-r--r--gn3/api/metadata_api/wiki.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/gn3/api/metadata_api/wiki.py b/gn3/api/metadata_api/wiki.py
new file mode 100644
index 0000000..7e22c94
--- /dev/null
+++ b/gn3/api/metadata_api/wiki.py
@@ -0,0 +1,61 @@
+import datetime
+from typing import Any, Dict, List
+from flask import Blueprint, request, jsonify, current_app
+from gn3 import db_utils
+from gn3.db import wiki
+
+
+wiki_blueprint = Blueprint("wiki", __name__, url_prefix="wiki")
+
+
+class MissingDBDataException(Exception):
+ pass
+
+
+@wiki_blueprint.route("/<int:comment_id>/edit", methods=["POST"])
+def edit_wiki(comment_id: int):
+ # FIXME: attempt to check and fix for types here with relevant errors
+ payload: Dict[str, Any] = request.json
+ pubmed_ids = [str(x) for x in payload.get("pubmed_ids", [])]
+
+ insert_dict = {
+ "Id": comment_id,
+ "symbol": payload["symbol"],
+ "PubMed_ID": " ".join(pubmed_ids),
+ "comment": payload["comment"],
+ "email": payload["email"],
+ "createtime": datetime.datetime.now(datetime.timezone.utc).strftime(
+ "%Y-%m-%d %H:%M"
+ ),
+ "user_ip": request.environ.get("HTTP_X_REAL_IP", request.remote_addr),
+ "weburl": payload.get("web_url"),
+ "initial": payload.get("initial"),
+ "reason": payload["reason"],
+ }
+
+ insert_query = """
+ INSERT INTO GeneRIF (Id, versionId, symbol, PubMed_ID, SpeciesID, comment,
+ email, createtime, user_ip, weburl, initial, reason)
+ VALUES (%(Id)s, %(versionId)s, %(symbol)s, %(PubMed_ID)s, %(SpeciesID)s, %(comment)s, %(email)s, %(createtime)s, %(user_ip)s, %(weburl)s, %(initial)s, %(reason)s)
+ """
+ with db_utils.database_connection(current_app.config["SQL_URI"]) as conn:
+ cursor = conn.cursor()
+ try:
+ category_ids = wiki.get_categories_ids(cursor, payload["categories"])
+ species_id = wiki.get_species_id(cursor, payload["species"])
+ next_version = wiki.get_next_comment_version(cursor, comment_id)
+ except MissingDBDataException as missing_exc:
+ return jsonify(error=f"Error editting wiki entry, {missing_exc}"), 500
+ insert_dict["SpeciesID"] = species_id
+ insert_dict["versionId"] = next_version
+ current_app.logger.debug(f"Running query: {insert_query}")
+ cursor.execute(insert_query, insert_dict)
+ category_addition_query = "INSERT INTO GeneRIFXRef (GeneRIFId, versionId, GeneCategoryId) VALUES (%s, %s, %s)"
+
+ for cat_id in category_ids:
+ current_app.logger.debug(f"Running query: {category_addition_query}")
+ cursor.execute(
+ category_addition_query, (comment_id, insert_dict["versionId"], cat_id)
+ )
+ return jsonify({"success": "ok"})
+ return jsonify(error="Error editting wiki entry, most likely due to DB error!"), 500