aboutsummaryrefslogtreecommitdiff
path: root/gn3/db/species.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2021-10-21 09:36:36 +0300
committerFrederick Muriuki Muriithi2021-10-21 09:36:36 +0300
commit41936d0a486ef54bf4fc049c2b4d85dca43ab761 (patch)
treea7c757dfc40c21de7acdc9a32f89c1adf06ae26f /gn3/db/species.py
parentcad4649d19001f62ef592dedf09f3ac53744962a (diff)
downloadgenenetwork3-41936d0a486ef54bf4fc049c2b4d85dca43ab761.tar.gz
Implement `translate_to_mouse_gene_id` function
Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Migrate the `web.webqtl.correlation/CorrelationPage.translateToMouseGeneID` function in GN1 to GN3. This is a function that retrieves data from the database, and therefore uses a system outside of our code, therefore, the function does not have a corresponding unit test. This kind of function will probably need to be tested at the integration or system tests level, where we test that our code interacts correcly with any and all external systems that it should.
Diffstat (limited to 'gn3/db/species.py')
-rw-r--r--gn3/db/species.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/gn3/db/species.py b/gn3/db/species.py
index 0deae4e..1e5015f 100644
--- a/gn3/db/species.py
+++ b/gn3/db/species.py
@@ -30,3 +30,34 @@ def get_chromosome(name: str, is_species: bool, conn: Any) -> Optional[Tuple]:
with conn.cursor() as cursor:
cursor.execute(_sql)
return cursor.fetchall()
+
+def translate_to_mouse_gene_id(species: str, geneid: int, conn: Any) -> int:
+ """
+ Translate rat or human geneid to mouse geneid
+
+ This is a migration of the
+ `web.webqtl.correlation/CorrelationPage.translateToMouseGeneID` function in
+ GN1
+ """
+ assert species in ("rat", "mouse", "human"), "Invalid species"
+ if geneid is None:
+ return 0
+
+ if species == "mouse":
+ return geneid
+
+ with conn.cursor as cursor:
+ if species == "rat":
+ cursor.execute(
+ "SELECT mouse FROM GeneIDXRef WHERE rat = %s", geneid)
+ rat_geneid = cursor.fetchone()
+ if rat_geneid:
+ return rat_geneid[0]
+
+ cursor.execute(
+ "SELECT mouse FROM GeneIDXRef WHERE human = %s", geneid)
+ human_geneid = cursor.fetchone()
+ if human_geneid:
+ return human_geneid[0]
+
+ return 0 # default if all else fails