about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--scripts/load_phenotypes_to_db.py18
1 files changed, 15 insertions, 3 deletions
diff --git a/scripts/load_phenotypes_to_db.py b/scripts/load_phenotypes_to_db.py
index 2be8096..9d8b82f 100644
--- a/scripts/load_phenotypes_to_db.py
+++ b/scripts/load_phenotypes_to_db.py
@@ -209,9 +209,20 @@ def save_phenotype_n(
 
 
 def cross_reference_phenotypes_publications_and_data(
-        conn: mysqldb.Connection, xref_data: tuple[dict, ...]):
+        conn: mysqldb.Connection, xref_data: tuple[dict, ...]
+):
     """Crossreference the phenotypes, publication and data."""
-    pass
+    with conn.cursor(cursorclass=DictCursor) as cursor:
+        cursor.execute("SELECT MAX(Id) CurrentMaxId FROM PublishXRef")
+        _nextid = int(cursor.fetchone()["CurrentMaxId"]) + 1
+        cursor.execute(
+            ("INSERT INTO PublishXRef(Id, InbredSetId, PhenotypeId, PublicationId, DataId) "
+             "VALUES(%(xref_id)s, %(population_id)s, %(phenotype_id)s, %(data_id)s) "
+             "RETURNING *"),
+            tuple({**row, "xref_id": _id}
+                  for _id, row in enumerate(xref_data, start=_next_id)))
+        return tuple(dict(row) for row in cursor.fetchall())
+    return tuple()
 
 
 def update_auth(user, species, population, dataset, phenos):
@@ -236,6 +247,7 @@ def load_data(conn, job):
     _phenos = save_phenotypes(cursor, _control_data)
     dataidmap = {
         row["phenotype_id"]: {
+            "population_id": population["Id"],
             "phenotype_id": row["phenotype_id"],
             "data_id": dataid,
             "publication_id": _publication["Id"],
@@ -251,7 +263,7 @@ def load_data(conn, job):
     data = save_pheno_data(conn, dataidmap, samples, _control_data)
     # 4. Cross-reference Phenotype, Publication, and PublishData in PublishXRef
     xrefs = cross_reference_phenotypes_publications_and_data(
-        cursor, __merge_map_with_publications__(dataidmap))
+        conn, tuple(dataidmap.values()))
     # 5. If standard errors and N exist, save them too
     #    (use IDs returned in `3. b.` above).
     data_se = save_phenotypes_se(conn, dataidmap, samples, _control_data)