From 9eb0ea26879fcd10281611728b7f9ddfcb088121 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Tue, 24 Sep 2024 14:23:13 -0500 Subject: Implement creation of new platform. --- uploader/platforms/models.py | 56 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) (limited to 'uploader/platforms/models.py') diff --git a/uploader/platforms/models.py b/uploader/platforms/models.py index 4b690bb..199f2df 100644 --- a/uploader/platforms/models.py +++ b/uploader/platforms/models.py @@ -2,7 +2,7 @@ from typing import Optional import MySQLdb as mdb -from MySQLdb.cursors import DictCursor +from MySQLdb.cursors import Cursor, DictCursor def platforms_by_species( conn: mdb.Connection, @@ -29,6 +29,7 @@ def species_platforms_count(conn: mdb.Connection, species_id: int) -> int: (species_id,)) return int(cursor.fetchone()["count"]) + def platform_by_id(conn: mdb.Connection, platformid: int) -> Optional[dict]: """Retrieve a platform by its ID""" with conn.cursor(cursorclass=DictCursor) as cursor: @@ -39,3 +40,56 @@ def platform_by_id(conn: mdb.Connection, platformid: int) -> Optional[dict]: return dict(result) return None + + +def platform_by_species_and_id( + conn: mdb.Connection, species_id: int, platformid: int +) -> Optional[dict]: + """Retrieve a platform by its species and ID""" + with conn.cursor(cursorclass=DictCursor) as cursor: + cursor.execute("SELECT * FROM GeneChip WHERE SpeciesId=%s AND Id=%s", + (species_id, platformid)) + result = cursor.fetchone() + if bool(result): + return dict(result) + + return None + + +def save_new_platform(# pylint: disable=[too-many-arguments] + cursor: Cursor, + species_id: int, + geo_platform: str, + platform_name: str, + platform_shortname: str, + platform_title: str, + go_tree_value: Optional[str] +) -> dict: + """Save a new platform to the database.""" + params = { + "species_id": species_id, + "GeoPlatform": geo_platform, + "GeneChipName": platform_name, + "Name": platform_shortname, + "Title": platform_title, + "GO_tree_value": go_tree_value + } + cursor.execute("SELECT SpeciesId, GeoPlatform FROM GeneChip") + assert (species_id, geo_platform) not in ( + (row["SpeciesId"], row["GeoPlatform"]) for row in cursor.fetchall()) + cursor.execute( + "INSERT INTO " + "GeneChip(SpeciesId, GeneChipName, Name, GeoPlatform, Title, GO_tree_value) " + "VALUES(" + "%(species_id)s, %(GeneChipName)s, %(Name)s, %(GeoPlatform)s, " + "%(Title)s, %(GO_tree_value)s" + ")", + params) + new_id = cursor.lastrowid + cursor.execute("UPDATE GeneChip SET GeneChipId=%s WHERE Id=%s", + (new_id, new_id)) + return { + **params, + "Id": new_id, + "GeneChipId": new_id + } -- cgit v1.2.3