aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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