about summary refs log tree commit diff
path: root/uploader/db/tissues.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-07-25 11:07:33 -0500
committerFrederick Muriuki Muriithi2024-07-25 14:34:09 -0500
commit754e8f214b940e05298cb360ed829f5c685d55a5 (patch)
tree62c2c5b601746621f0949b38937ad232f006dee2 /uploader/db/tissues.py
parentde9e1b9fe37928b864bea28b408de6c14d04526b (diff)
downloadgn-uploader-754e8f214b940e05298cb360ed829f5c685d55a5.tar.gz
Rename module: qc_app --> uploader
Diffstat (limited to 'uploader/db/tissues.py')
-rw-r--r--uploader/db/tissues.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/uploader/db/tissues.py b/uploader/db/tissues.py
new file mode 100644
index 0000000..9fe7bab
--- /dev/null
+++ b/uploader/db/tissues.py
@@ -0,0 +1,50 @@
+"""Handle db interactions for tissue."""
+from typing import Union, Optional
+
+import MySQLdb as mdb
+from MySQLdb.cursors import DictCursor
+
+def all_tissues(conn: mdb.Connection) -> tuple[dict, ...]:
+    """All available tissue."""
+    with conn.cursor(cursorclass=DictCursor) as cursor:
+        cursor.execute("SELECT * FROM Tissue ORDER BY TissueName")
+        return tuple(dict(row) for row in cursor.fetchall())
+
+
+def tissue_by_id(conn: mdb.Connection, tissueid) -> Optional[dict]:
+    """Retrieve a tissue by its ID"""
+    with conn.cursor(cursorclass=DictCursor) as cursor:
+        cursor.execute("SELECT * FROM Tissue WHERE Id=%s", (tissueid,))
+        result = cursor.fetchone()
+        if bool(result):
+            return dict(result)
+
+    return None
+
+
+def create_new_tissue(
+        conn: mdb.Connection,
+        name: str,
+        shortname: str,
+        birnlexid: Optional[str] = None,
+        birnlexname: Optional[str] = None
+) -> dict[str, Union[int, str, None]]:
+    """Add a new tissue, organ or biological material to the database."""
+    with conn.cursor() as cursor:
+        cursor.execute(
+            "INSERT INTO "
+            "Tissue(TissueName, Name, Short_Name, BIRN_lex_ID, BIRN_lex_Name) "
+            "VALUES (%s, %s, %s, %s, %s)",
+            (name, name, shortname, birnlexid, birnlexname))
+        tissueid = cursor.lastrowid
+        cursor.execute("UPDATE Tissue SET TissueId=%s WHERE Id=%s",
+                       (tissueid, tissueid))
+        return {
+            "Id": tissueid,
+            "TissueId": tissueid,
+            "TissueName": name,
+            "Name": name,
+            "Short_Name": shortname,
+            "BIRN_lex_ID": birnlexid,
+            "BIRN_lex_Name": birnlexname
+        }