diff --git a/dataconnect/models.py b/dataconnect/models.py index 4bd1387..d96a4e1 100644 --- a/dataconnect/models.py +++ b/dataconnect/models.py @@ -36,6 +36,7 @@ class DatasetVersion: dataset_uuid: UUID dataset_name: str dataset_version: str + blinding_status: str | None = None class DatasetFrame: @@ -79,6 +80,7 @@ class Dataset: source: str | None = None activation_status: str | None = None dataset_status: str | None = None + blinding_status: str | None = None collection: list[str] | None = field(default=None, hash=False) last_updated: str | None = None version: str | None = None diff --git a/dataconnect/service/mappers.py b/dataconnect/service/mappers.py index 0a6ac25..6d56ef9 100644 --- a/dataconnect/service/mappers.py +++ b/dataconnect/service/mappers.py @@ -75,6 +75,7 @@ def resource_to_dataset_version(resource: ResourceInfo) -> DatasetVersion: dataset_uuid=UUID(data["dataset_uuid"]), dataset_name=data["dataset_name"], dataset_version=data["dataset_version"], + blinding_status=data.get("blinding_status"), ) @@ -114,6 +115,7 @@ def resource_to_dataset(resource: ResourceInfo) -> Dataset: source=data.get("source"), activation_status=data.get("activation_status"), dataset_status=data.get("dataset_status"), + blinding_status=data.get("blinding_status"), collection=data.get("collection"), last_updated=data.get("last_updated"), version=data.get("version"), diff --git a/tests/test_get_datasets_paginated.py b/tests/test_get_datasets_paginated.py index bea7bc7..d3cae99 100644 --- a/tests/test_get_datasets_paginated.py +++ b/tests/test_get_datasets_paginated.py @@ -192,6 +192,7 @@ def test_multiple_items_returned(self) -> None: "source": "JL_templ_upgrd2", "activation_status": "Activated", "dataset_status": "Warning", + "blinding_status": "NOT_UNBLINDING", "collection": ["clinical", "labs"], "last_updated": "2024-06-15 09:30:00", "version": "1", @@ -207,6 +208,7 @@ def test_multiple_items_returned(self) -> None: "source", "activation_status", "dataset_status", + "blinding_status", "collection", "last_updated", "version", @@ -294,6 +296,16 @@ def test_metadata_preserves_missing_null_and_empty_values(scenario: str) -> None assert dataset.frame is not None +def test_blinding_status_variants_from_backend_are_preserved() -> None: + unblinding = _FakeTransport([_dataset_resource({**_IDENTIFIERS, "blinding_status": "UNBLINDING"})]) + dataset = DefaultDataConnectService(unblinding).get_datasets(_STUDY_ENV_UUID).items[0] + assert dataset.blinding_status == "UNBLINDING" + + missing = _FakeTransport([_dataset_resource({**_IDENTIFIERS})]) + dataset = DefaultDataConnectService(missing).get_datasets(_STUDY_ENV_UUID).items[0] + assert dataset.blinding_status is None + + @pytest.mark.parametrize("version", ["3", "v1,v2", "41, 51, 88", "", None]) def test_version_labels_are_preserved_without_coercion(version: str | None) -> None: transport = _FakeTransport([_dataset_resource({**_IDENTIFIERS, "version": version})]) @@ -417,18 +429,33 @@ def test_dataset_remains_hashable_with_collection_metadata() -> None: def test_dataset_versions_response_is_unchanged_before_and_after_listing() -> None: - older = {**_IDENTIFIERS, "dataset_version": "1", "dataset_uuid": _OTHER_DATASET_UUID} - newer = {**_IDENTIFIERS, "dataset_version": "2"} - versions = [_dataset_resource(older), _dataset_resource(newer)] + older = { + **_IDENTIFIERS, + "dataset_version": "1", + "dataset_uuid": _OTHER_DATASET_UUID, + "blinding_status": "UNBLINDING", + } + newer = {**_IDENTIFIERS, "dataset_version": "2", "blinding_status": "NOT_UNBLINDING"} + omitted = {**_IDENTIFIERS, "dataset_version": "3"} + versions = [_dataset_resource(older), _dataset_resource(newer), _dataset_resource(omitted)] transport = _FakeTransport(versions) client = DataConnectClient(DefaultDataConnectService(transport)) expected = [ + { + "study_uuid": UUID(_IDENTIFIERS["study_uuid"]), + "study_environment_uuid": _STUDY_ENV_UUID, + "dataset_uuid": UUID(_DATASET_UUID), + "dataset_name": "LBHEM2", + "dataset_version": "3", + "blinding_status": None, + }, { "study_uuid": UUID(_IDENTIFIERS["study_uuid"]), "study_environment_uuid": _STUDY_ENV_UUID, "dataset_uuid": UUID(_DATASET_UUID), "dataset_name": "LBHEM2", "dataset_version": "2", + "blinding_status": "NOT_UNBLINDING", }, { "study_uuid": UUID(_IDENTIFIERS["study_uuid"]), @@ -436,10 +463,13 @@ def test_dataset_versions_response_is_unchanged_before_and_after_listing() -> No "dataset_uuid": UUID(_OTHER_DATASET_UUID), "dataset_name": "LBHEM2", "dataset_version": "1", + "blinding_status": "UNBLINDING", }, ] - assert [asdict(item) for item in client.get_dataset_versions(UUID(_DATASET_UUID))] == expected + listed = client.get_dataset_versions(UUID(_DATASET_UUID)) + assert [asdict(item) for item in listed] == expected + assert listed[0].blinding_status is None transport._resources = [_dataset_resource({**_IDENTIFIERS, **_METADATA})] assert client.get_datasets(_STUDY_ENV_UUID).items[0].frame is not None transport._resources = versions