aboutsummaryrefslogtreecommitdiff
"""Miscellaneous functions dealing with publications."""


def publications_differences(
        filedata: tuple[dict, ...],
        dbdata: tuple[dict, ...],
        pubmedid2pubidmap: tuple[dict, ...]
) -> tuple[dict, ...]:
    """Compute the differences between file data and db data"""
    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"]))):
        if filerow["PubMed_ID"] == dbrow["PubMed_ID"]:
            continue

        newpubmed = filerow["PubMed_ID"]
        diff = diff + ({
            **dbrow,
            "PubMed_ID": newpubmed,
            "PublicationId": pubmedid2pubidmap.get(newpubmed)},)

    return diff