diff --git a/src/fmu/dataio/datastructure/configuration/global_configuration.py b/src/fmu/dataio/datastructure/configuration/global_configuration.py index 4fd5004df..936173f4b 100644 --- a/src/fmu/dataio/datastructure/configuration/global_configuration.py +++ b/src/fmu/dataio/datastructure/configuration/global_configuration.py @@ -59,6 +59,18 @@ class Ssdl(BaseModel): default=False, ) + @model_validator(mode="after") + def _migrate_asset_to_restricted(self) -> Ssdl: + if self.access_level == enums.AccessLevel.asset: + warnings.warn( + "The value 'asset' for access.ssdl.access_level is deprecated. " + "Please use 'restricted' in input arguments or global variables " + "to silence this warning.", + FutureWarning, + ) + self.access_level = enums.AccessLevel.restricted + return self + class Asset(BaseModel): """ @@ -75,18 +87,15 @@ class Access(BaseModel): asset: Asset ssdl: Ssdl - classification: Optional[enums.AccessLevel] = Field( - default=enums.AccessLevel.internal, - ) - - @model_validator(mode="before") - @classmethod - def _classification_mirros_accesslevel(cls, values: Dict) -> Dict: - if isinstance(ssdl := values.get("ssdl", {}), dict): - values["classification"] = ssdl.get("access_level") - if values["classification"] == "asset": - values["classification"] = "restricted" - return values + classification: Optional[enums.AccessLevel] = Field(default=None) + + @model_validator(mode="after") + def _classification_mirrors_accesslevel(self) -> Access: + # Ideally we want to only copy if the user has NOT + # set the classification. + # See: https://github.com/equinor/fmu-dataio/issues/540 + self.classification = self.ssdl.access_level + return self class StratigraphyElement(BaseModel): diff --git a/tests/test_units/test_global_configuration.py b/tests/test_units/test_global_configuration.py index bddb2bccf..c86ae30e3 100644 --- a/tests/test_units/test_global_configuration.py +++ b/tests/test_units/test_global_configuration.py @@ -47,9 +47,11 @@ def test_access_classification_mirrors(): # classification should be set to restricted if # ssdl.access_level => asset - global_configuration.Access.model_validate( + gc = global_configuration.Access.model_validate( { "asset": {"name": "FakeName"}, "ssdl": {"access_level": "asset"}, } - ).classification == "restricted" + ) + assert gc.classification == "restricted" + assert gc.ssdl.access_level == "restricted" diff --git a/tests/test_units/test_metadata_class.py b/tests/test_units/test_metadata_class.py index 066155095..b9777aa94 100644 --- a/tests/test_units/test_metadata_class.py +++ b/tests/test_units/test_metadata_class.py @@ -305,15 +305,18 @@ def test_metadata_access_deprecated_input(globalconfig1): """Test giving deprecated input.""" # Input is "asset". Is deprecated, shall work with warning. # Output shall be "restricted". - edata = dio.ExportData( - config=globalconfig1, access_ssdl={"access_level": "asset"}, content="depth" - ) - mymeta = MetaData("dummy", edata) with pytest.warns( - UserWarning, + FutureWarning, match="The value 'asset' for access.ssdl.access_level is deprec", ): - mymeta._populate_meta_access() + edata = dio.ExportData( + config=globalconfig1, + access_ssdl={"access_level": "asset"}, + content="depth", + ) + + mymeta = MetaData("dummy", edata) + mymeta._populate_meta_access() assert mymeta.meta_access["ssdl"]["access_level"] == "restricted" assert mymeta.meta_access["classification"] == "restricted"