about summary refs log tree commit diff
path: root/gn3/db
diff options
context:
space:
mode:
authorJohn Nduli2024-08-26 12:40:15 +0300
committerBonfaceKilz2024-08-26 13:06:47 +0300
commit7b2a1794c1b7e7c589b1abe6d307b2a7e4cd2c42 (patch)
tree5dcff41e762419771a4448955281f3f6cce60781 /gn3/db
parent3156f84055502035620a0279e62eb383a5f7d665 (diff)
downloadgenenetwork3-7b2a1794c1b7e7c589b1abe6d307b2a7e4cd2c42.tar.gz
refactor: split out utlities into their modules and change api to use metadata
Diffstat (limited to 'gn3/db')
-rw-r--r--gn3/db/wiki.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/gn3/db/wiki.py b/gn3/db/wiki.py
new file mode 100644
index 0000000..a56f26c
--- /dev/null
+++ b/gn3/db/wiki.py
@@ -0,0 +1,38 @@
+from typing import List
+
+
+class MissingDBDataException(Exception):
+    pass
+
+
+def get_species_id(cursor, species_name: str) -> int:
+    cursor.execute("SELECT SpeciesID from Species  WHERE Name = %s", (species_name,))
+    species_ids = cursor.fetchall()
+    if len(species_ids) != 1:
+        raise MissingDBDataException(
+            f"expected 1 species with Name={species_name} but found {len(species_ids)}!"
+        )
+    return species_ids[0][0]
+
+
+def get_next_comment_version(cursor, comment_id: int) -> int:
+    cursor.execute(
+        "SELECT MAX(versionId) as version_id from GeneRIF WHERE Id = %s", (comment_id,)
+    )
+    latest_version = cursor.fetchone()[0]
+    if latest_version is None:
+        raise MissingDBDataException(f"No comment found with comment_id={comment_id}")
+    return latest_version + 1
+
+
+def get_categories_ids(cursor, categories: List[str]) -> List[int]:
+    cursor.execute("SELECT Name, Id from GeneCategory")
+    raw_categories = cursor.fetchall()
+    dict_cats = dict(raw_categories)
+    category_ids = []
+    for category in set(categories):
+        cat_id = dict_cats.get(category.strip())
+        if cat_id is None:
+            raise MissingDBDataException(f"Category with Name={category} not found")
+        category_ids.append(cat_id)
+    return category_ids