about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2025-04-14 15:06:34 -0500
committerFrederick Muriuki Muriithi2025-04-14 16:09:21 -0500
commit3cd56ff2f774c13add3b5fa791fcc55a0c5f00c3 (patch)
tree3ce5c2b2a45f7283738aa30684ecbef83dd5c56f
parent4768b837c24aa3622d87c3c6adff112cb975ab20 (diff)
downloadgn-uploader-3cd56ff2f774c13add3b5fa791fcc55a0c5f00c3.tar.gz
Implement difference computations.
-rw-r--r--tests/uploader/phenotypes/test_misc.py24
-rw-r--r--uploader/phenotypes/misc.py17
2 files changed, 28 insertions, 13 deletions
diff --git a/tests/uploader/phenotypes/test_misc.py b/tests/uploader/phenotypes/test_misc.py
index f333d66..c0261aa 100644
--- a/tests/uploader/phenotypes/test_misc.py
+++ b/tests/uploader/phenotypes/test_misc.py
@@ -218,12 +218,12 @@ __sample_db_phenotypes_data__ = (
               }
           }),
          __sample_db_phenotypes_data__,
-         ({"PhenotypeId": 4, "xref_id": 10001, "DataId": 8967043, "StrainId": 4,  "value": 77.2},
-          {"PhenotypeId": 15, "xref_id": 10003, "DataId": 8967045, "StrainId": 6, "value": 503},
-          {"PhenotypeId": 15, "xref_id": 10003, "DataId": 8967045, "StrainId": 7, "value": 903},
-          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 3, "value": 1},
-          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 4, "value": 8},
-          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 5, "value": 9})),
+         ({"PhenotypeId": 4, "xref_id": 10001, "DataId": 8967043, "StrainId": 4, "StrainName": "BXD1", "value": 77.2},
+          {"PhenotypeId": 15, "xref_id": 10003, "DataId": 8967045, "StrainId": 6, "StrainName": "BXD5", "value": 503},
+          {"PhenotypeId": 15, "xref_id": 10003, "DataId": 8967045, "StrainId": 7, "StrainName": "BXD6", "value": 903},
+          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 3, "StrainName": "DBA/2J", "value": 1},
+          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 4, "StrainName": "BXD1", "value": 8},
+          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 5, "StrainName": "BXD2", "value": 9})),
 
      # Changes — with deletions
      (({
@@ -292,12 +292,12 @@ __sample_db_phenotypes_data__ = (
               }
           }),
          __sample_db_phenotypes_data__,
-         ({"PhenotypeId": 4, "xref_id": 10001, "DataId": 8967043, "StrainId": 4,  "value": None},
-          {"PhenotypeId": 15, "xref_id": 10003, "DataId": 8967045, "StrainId": 6, "value": None},
-          {"PhenotypeId": 15, "xref_id": 10003, "DataId": 8967045, "StrainId": 7, "value": None},
-          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 3, "value": 15},
-          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 4, "value": None},
-          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 5, "value": 24}))))
+         ({"PhenotypeId": 4, "xref_id": 10001, "DataId": 8967043, "StrainId": 4, "StrainName": "BXD1", "value": None},
+          {"PhenotypeId": 15, "xref_id": 10003, "DataId": 8967045, "StrainId": 6, "StrainName": "BXD5", "value": None},
+          {"PhenotypeId": 15, "xref_id": 10003, "DataId": 8967045, "StrainId": 7, "StrainName": "BXD6", "value": None},
+          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 3, "StrainName": "DBA/2J", "value": 15},
+          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 4, "StrainName": "BXD1", "value": None},
+          {"PhenotypeId": 20, "xref_id": 10004, "DataId": 8967046, "StrainId": 5, "StrainName": "BXD2", "value": 24}))))
 def test_phenotypes_data_differences(filedata, dbdata, expected):
     """Test differences are computed correctly."""
     assert phenotypes_data_differences(filedata, dbdata) == expected
diff --git a/uploader/phenotypes/misc.py b/uploader/phenotypes/misc.py
index 7003f81..cbe3b7f 100644
--- a/uploader/phenotypes/misc.py
+++ b/uploader/phenotypes/misc.py
@@ -8,4 +8,19 @@ def phenotypes_data_differences(
         filedata: tuple[dict, ...], dbdata: tuple[dict, ...]
 ) -> tuple[dict, ...]:
     """Compute differences between file data and db data"""
-    return tuple()
+    diff = tuple()
+    for filerow, dbrow in zip(
+            sorted(filedata, key=lambda item: (item["phenotype_id"], item["xref_id"])),
+            sorted(dbdata, key=lambda item: (item["PhenotypeId"], item["xref_id"]))):
+        for samplename, value in filerow["data"].items():
+            if value != dbrow["data"].get(samplename, {}).get("value"):
+                diff = diff + ({
+                    "PhenotypeId": filerow["phenotype_id"],
+                    "xref_id": filerow["xref_id"],
+                    "DataId": dbrow["DataId"],
+                    "StrainId": dbrow["data"].get(samplename, {}).get("StrainId"),
+                    "StrainName": samplename,
+                    "value": value
+                },)
+
+    return diff