Skip to content

Commit

Permalink
ENH: Add Ert experiment id to case metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
slangeveld committed Aug 21, 2024
1 parent 2e58bdf commit 8ce3ee5
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 1 deletion.
20 changes: 20 additions & 0 deletions src/fmu/dataio/_model/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,22 @@ class Case(BaseModel):
"""A free-text description of this case."""


class Ert(BaseModel):
"""The ``fmu.ert`` block contains information about the current ert run."""

experiment: Optional[Experiment] = Field(default=None)
"""Reference to the ert experiment.
See :class:`Experiment`."""


class Experiment(BaseModel):
"""The ``fmu.ert.experiment`` block contains information about
the current ert experiment run."""

id: Optional[UUID] = Field(default=None)
"""The unique identifier of this ert experiment run."""


class Iteration(BaseModel):
"""
The ``fmu.iteration`` block contains information about the iteration this data
Expand Down Expand Up @@ -543,6 +559,10 @@ class FMUBase(BaseModel):
"""The ``fmu.case`` block contains information about the case from which this data
object was exported. See :class:`Case`."""

ert: Optional[Ert] = Field(default=None)
"""The ``fmu.ert`` block contains information about the current ert run
object was exported. See :class:`Ert`."""

model: Model
"""The ``fmu.model`` block contains information about the model used.
See :class:`Model`."""
Expand Down
1 change: 1 addition & 0 deletions src/fmu/dataio/_model/internal.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ class JsonSchemaMetadata(BaseModel, populate_by_name=True):
class FMUModelCase(BaseModel):
model: fields.Model
case: fields.Case
ert: Optional[fields.Ert] = Field(default=None)


class Context(BaseModel, use_enum_values=True):
Expand Down
10 changes: 9 additions & 1 deletion src/fmu/dataio/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
from . import _utils
from ._logging import null_logger
from ._model import global_configuration, internal
from ._model.fields import Access, Case, Masterdata, Model, User
from ._model.fields import Access, Case, Ert, Experiment, Masterdata, Model, User
from .providers._fmu import FmuEnv

logger: Final = null_logger(__name__)

Expand Down Expand Up @@ -131,6 +132,13 @@ def generate_metadata(self) -> dict:
user=User(id=self.caseuser),
description=None,
),
ert=Ert(
experiment=Experiment(
id=uuid.UUID(FmuEnv.EXPERIMENT_ID.value)
if FmuEnv.EXPERIMENT_ID.value
else None
)
),
),
tracklog=fields.Tracklog.initialize(),
description=_utils.generate_description(self.description),
Expand Down
39 changes: 39 additions & 0 deletions tests/test_units/test_initialize_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,23 @@ def test_create_case_metadata_generate_metadata_warn_if_exists(
icase.generate_metadata()


def test_create_case_metadata_generate_metadata_with_experiment_id(
monkeypatch, fmurun, globalconfig2
):
monkeypatch.chdir(fmurun)
logger.info("Active folder is %s", fmurun)
myroot = fmurun.parent.parent.parent / "mycase"
logger.info("Case folder is now %s", myroot)

icase = CreateCaseMetadata(
config=globalconfig2, rootfolder=myroot, casename="mycase", caseuser="user"
)
metadata = icase.generate_metadata()
experiment_id_expected = "6a8e1e0f-9315-46bb-9648-8de87151f4c7"
assert metadata
assert metadata["fmu"]["ert"]["experiment"]["id"] == experiment_id_expected


def test_create_case_metadata_with_export(monkeypatch, globalconfig2, fmurun):
monkeypatch.chdir(fmurun)
caseroot = fmurun.parent.parent
Expand Down Expand Up @@ -195,3 +212,25 @@ def test_create_case_metadata_export_with_norsk_alphabet(
metadata_string = stream.read()

assert "æøå" in metadata_string


def test_create_case_metadata_with_export_with_experiment_id(
monkeypatch, globalconfig2, fmurun
):
monkeypatch.chdir(fmurun)
caseroot = fmurun.parent.parent

icase = CreateCaseMetadata(
config=globalconfig2,
rootfolder=caseroot,
casename="MyCaseName",
caseuser="MyUser",
description="Some description",
)
fmu_case_yml = Path(icase.export())

with open(fmu_case_yml) as stream:
metadata = yaml.safe_load(stream)

experiment_id_expected = "6a8e1e0f-9315-46bb-9648-8de87151f4c7"
assert metadata["fmu"]["ert"]["experiment"]["id"] == experiment_id_expected

0 comments on commit 8ce3ee5

Please sign in to comment.