about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBonfaceKilz2022-04-06 16:25:23 +0300
committerBonfaceKilz2022-04-07 11:54:28 +0300
commitdc71058e894c9857de68c7844bfc4b813c0532da (patch)
tree1bd02314bd4e754673f307c905b247c2047b5f8d
parenta7b7cdd1a5f1a9d071c5fd11c6f1fefa5302a838 (diff)
downloadgenenetwork3-dc71058e894c9857de68c7844bfc4b813c0532da.tar.gz
Use case attribute id inside brackets if present during insertions
* gn3/db/sample_data.py (insert_sample_data): If an id is present in the column header, use it.
* tests/unit/db/test_sample_data.py (test_insert_sample_data): Update tests to
capture the above.
-rw-r--r--gn3/db/sample_data.py21
-rw-r--r--tests/unit/db/test_sample_data.py59
2 files changed, 47 insertions, 33 deletions
diff --git a/gn3/db/sample_data.py b/gn3/db/sample_data.py
index 47be5b0..518d2a2 100644
--- a/gn3/db/sample_data.py
+++ b/gn3/db/sample_data.py
@@ -343,25 +343,28 @@ def insert_sample_data(
     def __insert_case_attribute(conn, case_attr, value):
         if value != "x":
             with conn.cursor() as cursor:
-                cursor.execute(
-                    "SELECT Id FROM " "CaseAttribute WHERE Name = %s",
-                    (case_attr,),
-                )
-                if case_attr_id := cursor.fetchone():
-                    case_attr_id = case_attr_id[0]
+                (id_, name) = parse_csv_column(case_attr)
+                if not id_:
+                    cursor.execute(
+                        "SELECT Id FROM CaseAttribute WHERE Name = %s",
+                        (case_attr,),
+                    )
+                    if case_attr_id := cursor.fetchone():
+                        id_ = case_attr_id[0]
+
                 cursor.execute(
                     "SELECT StrainId FROM "
                     "CaseAttributeXRefNew WHERE StrainId = %s "
                     "AND CaseAttributeId = %s "
                     "AND InbredSetId = %s",
-                    (strain_id, case_attr_id, inbredset_id),
+                    (strain_id, id_, inbredset_id),
                 )
-                if (not cursor.fetchone()) and case_attr_id:
+                if (not cursor.fetchone()) and id_:
                     cursor.execute(
                         "INSERT INTO CaseAttributeXRefNew "
                         "(StrainId, CaseAttributeId, Value, InbredSetId) "
                         "VALUES (%s, %s, %s, %s)",
-                        (strain_id, case_attr_id, value, inbredset_id),
+                        (strain_id, id_, value, inbredset_id),
                     )
                     row_count = cursor.rowcount
                     return row_count
diff --git a/tests/unit/db/test_sample_data.py b/tests/unit/db/test_sample_data.py
index af00393..e7d7fb0 100644
--- a/tests/unit/db/test_sample_data.py
+++ b/tests/unit/db/test_sample_data.py
@@ -21,6 +21,7 @@ def test_insert_sample_data(mocker):
                 19,
             ],
             0,
+            0,
         )
         mocker.patch(
             "gn3.db.sample_data.get_sample_data_ids",
@@ -29,45 +30,55 @@ def test_insert_sample_data(mocker):
         insert_sample_data(
             conn=mock_conn,
             trait_name=35,
-            data="BXD1,18,3,0,M",
-            csv_header="Strain Name,Value,SE,Count,Sex",
+            data="BXD1,18,3,0,Red,M",
+            csv_header="Strain Name,Value,SE,Count,Color,Sex (13)",
             phenotype_id=10007,
         )
         calls = [
             mocker.call(
-                "SELECT Id FROM PublishData where Id = %s "
-                "AND StrainId = %s",
-                (data_id, strain_id),
+                "SELECT Id FROM PublishData where Id = %s AND StrainId = %s",
+                (17373, 1),
+            ),
+            mocker.call(
+                "INSERT INTO PublishData (StrainId, Id, value) "
+                "VALUES (%s, %s, %s)",
+                (1, 17373, "18"),
+            ),
+            mocker.call(
+                "INSERT INTO PublishSE (StrainId, DataId, error) VALUES "
+                "(%s, %s, %s)",
+                (1, 17373, "3"),
             ),
             mocker.call(
-                "INSERT INTO PublishData "
-                "(StrainId, Id, value) VALUES (%s, %s, %s)",
-                (strain_id, data_id, "18"),
+                "INSERT INTO NStrain (StrainId, DataId, count) VALUES "
+                "(%s, %s, %s)",
+                (1, 17373, "0"),
             ),
             mocker.call(
-                "INSERT INTO PublishSE "
-                "(StrainId, DataId, error) VALUES (%s, %s, %s)",
-                (strain_id, data_id, "3"),
+                "SELECT Id FROM CaseAttribute WHERE Name = %s", ("Color",)
             ),
             mocker.call(
-                "INSERT INTO NStrain "
-                "(StrainId, DataId, count) VALUES (%s, %s, %s)",
-                (strain_id, data_id, "0"),
+                "SELECT StrainId FROM CaseAttributeXRefNew WHERE "
+                "StrainId = %s AND CaseAttributeId = %s AND InbredSetId = %s",
+                (1, 19, 20),
             ),
             mocker.call(
-                "SELECT Id FROM CaseAttribute WHERE Name = %s", ("Sex",)
+                "INSERT INTO CaseAttributeXRefNew (StrainId, "
+                "CaseAttributeId, Value, InbredSetId) VALUES "
+                "(%s, %s, %s, %s)",
+                (1, 19, "Red", 20),
             ),
             mocker.call(
-                "SELECT StrainId FROM CaseAttributeXRefNew "
-                "WHERE StrainId = %s AND "
-                "CaseAttributeId = %s AND InbredSetId = %s",
-                (strain_id, 19, inbredset_id),
+                "SELECT StrainId FROM CaseAttributeXRefNew WHERE "
+                "StrainId = %s AND CaseAttributeId = %s AND "
+                "InbredSetId = %s",
+                (1, "13", 20),
             ),
             mocker.call(
-                "INSERT INTO CaseAttributeXRefNew "
-                "(StrainId, CaseAttributeId, Value, "
-                "InbredSetId) VALUES (%s, %s, %s, %s)",
-                (strain_id, 19, "M", inbredset_id),
+                "INSERT INTO CaseAttributeXRefNew (StrainId, "
+                "CaseAttributeId, Value, InbredSetId) VALUES "
+                "(%s, %s, %s, %s)",
+                (1, "13", "M", 20),
             ),
         ]
         cursor.execute.assert_has_calls(calls, any_order=False)
@@ -206,7 +217,7 @@ def test_update_sample_data(mocker):
                     "CaseAttribute WHERE Name = %s) "
                     "AND InbredSetId = %s",
                     ("Green", strain_id, "Color", inbredset_id),
-                )
+                ),
             ],
             any_order=False,
         )