From 30cdc8a3e6c3169fddaf622db3c9d10240227da6 Mon Sep 17 00:00:00 2001 From: islean Date: Fri, 30 Aug 2024 13:55:54 +0200 Subject: [PATCH] Fix models to reflect new samples --- .../workflows/balsamic/models/case.py | 14 ++++++++++++-- .../workflows/balsamic/models/order.py | 18 +++++++++++++++--- .../workflows/mip_dna/models/case.py | 17 +++++++++++++++-- .../workflows/mip_dna/models/order.py | 14 ++++++++++++-- .../workflows/mip_dna/models/sample.py | 7 ++++--- 5 files changed, 58 insertions(+), 12 deletions(-) diff --git a/cg/services/order_validation_service/workflows/balsamic/models/case.py b/cg/services/order_validation_service/workflows/balsamic/models/case.py index 1930b38b9a..59bda05c99 100644 --- a/cg/services/order_validation_service/workflows/balsamic/models/case.py +++ b/cg/services/order_validation_service/workflows/balsamic/models/case.py @@ -1,8 +1,18 @@ +from pydantic import Discriminator, Tag +from typing_extensions import Annotated + from cg.services.order_validation_service.models.case import Case -from cg.services.order_validation_service.workflows.balsamic.models.sample import BalsamicSample +from cg.services.order_validation_service.models.discriminators import has_internal_id +from cg.services.order_validation_service.models.existing_sample import ExistingSample +from cg.services.order_validation_service.workflows.balsamic.models.sample import ( + BalsamicSample, +) + +NewSample = Annotated[BalsamicSample, Tag("new")] +OldSample = Annotated[ExistingSample, Tag("existing")] class BalsamicCase(Case): - samples: list[BalsamicSample] cohorts: list[str] | None = None + samples: list[Annotated[NewSample | OldSample, Discriminator(has_internal_id)]] synopsis: str | None = None diff --git a/cg/services/order_validation_service/workflows/balsamic/models/order.py b/cg/services/order_validation_service/workflows/balsamic/models/order.py index baca693e04..7a3bbf459f 100644 --- a/cg/services/order_validation_service/workflows/balsamic/models/order.py +++ b/cg/services/order_validation_service/workflows/balsamic/models/order.py @@ -1,8 +1,20 @@ +from pydantic import Discriminator, Tag +from typing_extensions import Annotated + +from cg.services.order_validation_service.models.discriminators import has_internal_id +from cg.services.order_validation_service.models.existing_case import ExistingCase from cg.services.order_validation_service.models.order_with_cases import OrderWithCases -from cg.services.order_validation_service.workflows.balsamic.constants import BalsamicDeliveryType -from cg.services.order_validation_service.workflows.balsamic.models.case import BalsamicCase +from cg.services.order_validation_service.workflows.balsamic.constants import ( + BalsamicDeliveryType, +) +from cg.services.order_validation_service.workflows.balsamic.models.case import ( + BalsamicCase, +) + +NewCase = Annotated[BalsamicCase, Tag("new")] +OldCase = Annotated[ExistingCase, Tag("existing")] class BalsamicOrder(OrderWithCases): - cases: list[BalsamicCase] + cases: list[Annotated[NewCase | OldCase, Discriminator(has_internal_id)]] delivery_type: BalsamicDeliveryType diff --git a/cg/services/order_validation_service/workflows/mip_dna/models/case.py b/cg/services/order_validation_service/workflows/mip_dna/models/case.py index 573ce70c0e..924f75964e 100644 --- a/cg/services/order_validation_service/workflows/mip_dna/models/case.py +++ b/cg/services/order_validation_service/workflows/mip_dna/models/case.py @@ -1,6 +1,19 @@ +from pydantic import Discriminator, Tag +from typing_extensions import Annotated + from cg.services.order_validation_service.models.case import Case -from cg.services.order_validation_service.workflows.mip_dna.models.sample import MipDnaSample +from cg.services.order_validation_service.models.discriminators import has_internal_id +from cg.services.order_validation_service.models.existing_sample import ExistingSample +from cg.services.order_validation_service.workflows.mip_dna.models.sample import ( + MipDnaSample, +) + +NewSample = Annotated[MipDnaSample, Tag("new")] +OldSample = Annotated[ExistingSample, Tag("existing")] class MipDnaCase(Case): - samples: list[MipDnaSample] + cohorts: list[str] | None = None + panels: list[str] + synopsis: str | None = None + samples: list[Annotated[NewSample | OldSample, Discriminator(has_internal_id)]] diff --git a/cg/services/order_validation_service/workflows/mip_dna/models/order.py b/cg/services/order_validation_service/workflows/mip_dna/models/order.py index 041dfdac82..6c31736e5d 100644 --- a/cg/services/order_validation_service/workflows/mip_dna/models/order.py +++ b/cg/services/order_validation_service/workflows/mip_dna/models/order.py @@ -1,6 +1,16 @@ +from pydantic import Discriminator, Tag +from typing_extensions import Annotated + +from cg.services.order_validation_service.models.discriminators import has_internal_id +from cg.services.order_validation_service.models.existing_case import ExistingCase from cg.services.order_validation_service.models.order_with_cases import OrderWithCases -from cg.services.order_validation_service.workflows.mip_dna.models.case import MipDnaCase +from cg.services.order_validation_service.workflows.mip_dna.models.case import ( + MipDnaCase, +) + +NewCase = Annotated[MipDnaCase, Tag("new")] +OldCase = Annotated[ExistingCase, Tag("existing")] class MipDnaOrder(OrderWithCases): - cases: list[MipDnaCase] + cases: list[Annotated[NewCase | OldCase, Discriminator(has_internal_id)]] diff --git a/cg/services/order_validation_service/workflows/mip_dna/models/sample.py b/cg/services/order_validation_service/workflows/mip_dna/models/sample.py index 47300848ec..3adaa13dc6 100644 --- a/cg/services/order_validation_service/workflows/mip_dna/models/sample.py +++ b/cg/services/order_validation_service/workflows/mip_dna/models/sample.py @@ -1,4 +1,5 @@ from pydantic import Field + from cg.models.orders.sample_base import NAME_PATTERN, ControlEnum, SexEnum, StatusEnum from cg.services.order_validation_service.constants import TissueBlockEnum from cg.services.order_validation_service.models.sample import Sample @@ -14,9 +15,9 @@ class MipDnaSample(Sample): phenotype_groups: list[str] | None = None phenotype_terms: list[str] | None = None post_formalin_fixation_time: int | None = None - sex: SexEnum | None = None - source: str | None = None - status: StatusEnum | None = None + sex: SexEnum + source: str + status: StatusEnum subject_id: str = Field(pattern=NAME_PATTERN, max_length=128) tissue_block_size: TissueBlockEnum | None = None concentration_ng_ul: float | None = None