diff options
-rw-r--r-- | tests/uploader/phenotypes/test_misc.py | 24 | ||||
-rw-r--r-- | uploader/phenotypes/misc.py | 17 |
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 |