Skip to content

Commit

Permalink
CLN: Use pydantic in FmuProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
tnatt committed Apr 16, 2024
1 parent dde70fe commit baff72b
Show file tree
Hide file tree
Showing 9 changed files with 318 additions and 346 deletions.
6 changes: 1 addition & 5 deletions src/fmu/dataio/_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,6 @@ def _get_meta_masterdata(masterdata: dict) -> meta.Masterdata:
return meta.Masterdata.model_validate(masterdata)


def _get_meta_fmu(fmudata: FmuProvider) -> internal.FMUClassMetaData:
return internal.FMUClassMetaData.model_validate(fmudata.get_metadata())


def _get_meta_display(dataio: ExportData, objdata: ObjectDataProvider) -> meta.Display:
return meta.Display(name=dataio.display_name or objdata.name)

Expand Down Expand Up @@ -173,7 +169,7 @@ def generate_export_metadata(
version=VERSION,
source=SOURCE,
class_=objdata.classname,
fmu=_get_meta_fmu(fmudata) if fmudata else None,
fmu=fmudata.get_metadata() if fmudata else None,
masterdata=_get_meta_masterdata(masterdata) if masterdata else None,
access=_get_meta_access(access) if access else None,
data=_get_meta_objectdata(objdata),
Expand Down
4 changes: 2 additions & 2 deletions src/fmu/dataio/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,9 @@ def size(fname: str) -> int:
return Path(fname).stat().st_size


def uuid_from_string(string: str) -> str:
def uuid_from_string(string: str) -> uuid.UUID:
"""Produce valid and repeteable UUID4 as a hash of given string"""
return str(uuid.UUID(hashlib.md5(string.encode("utf-8")).hexdigest()))
return uuid.UUID(hashlib.md5(string.encode("utf-8")).hexdigest())


def read_parameters_txt(pfile: Path | str) -> types.Parameters:
Expand Down
2 changes: 1 addition & 1 deletion src/fmu/dataio/aggregation.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def __post_init__(self) -> None:
@staticmethod
def _generate_aggr_uuid(uuids: list[str]) -> str:
"""Unless aggregation_id; use existing UUIDs to generate a new UUID."""
return _utils.uuid_from_string("".join(sorted(uuids)))
return str(_utils.uuid_from_string("".join(sorted(uuids))))

def _update_settings(self, newsettings: dict) -> None:
"""Update instance settings (properties) from other routines."""
Expand Down
17 changes: 12 additions & 5 deletions src/fmu/dataio/dataio.py
Original file line number Diff line number Diff line change
Expand Up @@ -589,6 +589,14 @@ def _validate_and_establish_fmucontext(self) -> None:
)
self.fmu_context = FmuContext.NON_FMU

if self.fmu_context != FmuContext.CASE and env_fmu_context == FmuContext.CASE:
warn(
"fmu_context is set to 'realization', but unable to detect "
"ERT runpath from environment variable. "
"Did you mean fmu_context='case'?",
UserWarning,
)

def _update_fmt_flag(self) -> None:
# treat special handling of "xtgeo" in format name:
if self.points_fformat == "csv|xtgeo" or self.polygons_fformat == "csv|xtgeo":
Expand Down Expand Up @@ -712,7 +720,7 @@ def _get_fmu_provider(self) -> FmuProvider:
return FmuProvider(
model=self.config.get("model"),
fmu_context=self.fmu_context,
casepath_proposed=self.casepath or "",
casepath_proposed=Path(self.casepath) if self.casepath else None,
include_ertjobs=self.include_ertjobs,
forced_realization=self.realization,
workflow=self.workflow,
Expand Down Expand Up @@ -769,13 +777,12 @@ def generate_metadata(
self._update_fmt_flag()

fmudata = self._get_fmu_provider() if self._fmurun else None

# update rootpath based on fmurun or not
# TODO: Move to ExportData init when/if users are
# disallowed to update class settings on the export.
self._rootpath = Path(
fmudata.get_casepath() if fmudata else str(self._rootpath.absolute())
)
if fmudata and (casepath := fmudata.get_casepath()):
self._rootpath = casepath
self._rootpath = self._rootpath.absolute()
logger.debug("Rootpath is now %s", self._rootpath)

# TODO: refactor the argument list for generate_export_metadata; we do not need
Expand Down
12 changes: 9 additions & 3 deletions src/fmu/dataio/datastructure/_internal/internal.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,13 @@
Model as GlobalConfigurationModel,
)
from fmu.dataio.datastructure.meta import meta
from pydantic import AnyHttpUrl, BaseModel, Field, TypeAdapter, model_validator
from pydantic import (
AnyHttpUrl,
BaseModel,
Field,
TypeAdapter,
model_validator,
)


def seismic_warn() -> None:
Expand Down Expand Up @@ -163,7 +169,7 @@ class PreprocessedInfo(BaseModel):
subfolder: str


class Context(BaseModel):
class Context(BaseModel, use_enum_values=True):
stage: FmuContext


Expand Down Expand Up @@ -211,5 +217,5 @@ class CaseSchema(JsonSchemaMetadata):
masterdata: meta.Masterdata
access: meta.Access
fmu: FMUModel
description: Optional[List[str]]
description: Optional[List[str]] = Field(default=None)
tracklog: List[meta.TracklogEvent]
Loading

0 comments on commit baff72b

Please sign in to comment.