From 91ca0d28a143c4f1d680bdaf421be0c326b28a87 Mon Sep 17 00:00:00 2001 From: Manuel Holtgrewe Date: Tue, 20 Sep 2022 15:05:54 +0200 Subject: [PATCH] Fixing clinvar submission sex/gender update (#686) Related-Issue: #686 Projected-Results-Impact: none --- HISTORY.rst | 2 ++ clinvar_export/models.py | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 019569213..dd344e4bd 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -19,6 +19,7 @@ End-User Summary - Fixing ClinVar submission XML generation (#677). - Fixing ClinVar export editor timing issues (#667, #668). - Fixing hemizygous count display in fold-outs (#646). +- Fixing clinvar submission sex/gender update (#686). Full Change List ================ @@ -35,6 +36,7 @@ Full Change List - Adding regular task to sync ClinVar submission ``Individual`` sex from the one from the ``Case``. - Fixing ClinVar export editor timing issues (#667, #668). - Fixing hemizygous count display in fold-outs (#646). +- Fixing clinvar submission sex/gender update (#686). ----------------- v1.2.2 (anthenea) diff --git a/clinvar_export/models.py b/clinvar_export/models.py index d48033a4a..3ee4d94b1 100644 --- a/clinvar_export/models.py +++ b/clinvar_export/models.py @@ -4,6 +4,7 @@ records in ``variants``. """ +import logging import uuid as uuid_object from django.contrib.postgres.fields import ArrayField @@ -14,6 +15,8 @@ from varfish.utils import JSONField from variants.models import CaseAwareProject, Case +logger = logging.getLogger(__name__) + #: Django user model. AUTH_USER_MODEL = getattr(settings, "AUTH_USER_MODEL", "auth.User") @@ -400,9 +403,13 @@ def refresh_individual_sex_affected(): This is done regularly in a related task. """ for family in Family.objects.select_related("case").prefetch_related("individual_set").all(): - ped_entries = {entry["patient"]: entry for entry in family.case.pedigree} - for individual in family.individual_set.all(): - related_ped_entry = ped_entries[individual.name] - individual.sex = SEX_MAP.get(related_ped_entry["sex"], "unknown") - individual.affected = AFFECTED_MAP.get(related_ped_entry["affected"], "unknown") - individual.save() + if family.case: + ped_entries = {entry["patient"]: entry for entry in family.case.pedigree} + for individual in family.individual_set.all(): + if individual.name not in ped_entries: + logger.info(f"{individual.name} not in pedigree for case {family.case}") + else: + related_ped_entry = ped_entries[individual.name] + individual.sex = SEX_MAP.get(related_ped_entry["sex"], "unknown") + individual.affected = AFFECTED_MAP.get(related_ped_entry["affected"], "unknown") + individual.save()