"""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 }