Skip to content

Commit dde9c04

Browse files
authored
ENH: Add update_validation_metadata() to ProjectFMUDirectory (#304)
1 parent 05efdb0 commit dde9c04

3 files changed

Lines changed: 47 additions & 1 deletion

File tree

src/fmu/settings/_fmu_dir.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""Main interface for working with .fmu directory."""
22

3+
import getpass
34
from collections.abc import Mapping
5+
from datetime import UTC, datetime
46
from pathlib import Path
57
from typing import TYPE_CHECKING, Any, Final, Self, TypeAlias, cast
68

@@ -19,7 +21,11 @@
1921
from ._resources.lock_manager import DEFAULT_LOCK_TIMEOUT, LockManager
2022
from ._utils import path_exists, path_is_dir, path_is_file
2123
from .models._enums import CacheResource
22-
from .models.project_config import ProjectConfig
24+
from .models.project_config import (
25+
ProjectConfig,
26+
ValidationRecord,
27+
ValidationSource,
28+
)
2329
from .models.user_config import UserConfig
2430

2531
logger: Final = null_logger(__name__)
@@ -341,6 +347,24 @@ def __init__(
341347
f"Using default value '{CacheManager.MIN_REVISIONS}'. Error: {e}"
342348
)
343349

350+
def update_validation_metadata(
351+
self: Self,
352+
validation_source: ValidationSource,
353+
) -> None:
354+
"""Record successful validation of project configuration data.
355+
356+
Args:
357+
validation_source: Configuration data checked by the validation.
358+
"""
359+
record = ValidationRecord(
360+
last_validated_at=datetime.now(UTC),
361+
last_validated_by=getpass.getuser(),
362+
)
363+
self.set_config_value(
364+
f"validation.{validation_source}",
365+
record.model_dump(),
366+
)
367+
344368
@property
345369
def changelog(self: Self) -> ChangelogManager:
346370
"""Access the ChangelogManager."""

src/fmu/settings/models/project_config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ class ValidationRecord(BaseModel):
8484
"""User who performed the last validation."""
8585

8686

87+
ValidationSource = Literal["masterdata_smda", "rms_project"]
88+
89+
8790
class ProjectValidation(BaseModel):
8891
"""Validation metadata for project configuration data."""
8992

tests/test_fmu_dir.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,25 @@ def test_set_config_value(fmu_dir: ProjectFMUDirectory) -> None:
355355
assert fmu_dir.config.load().version == "200.0.0"
356356

357357

358+
def test_update_validation_metadata(
359+
fmu_dir: ProjectFMUDirectory,
360+
monkeypatch: pytest.MonkeyPatch,
361+
) -> None:
362+
"""Tests update_validation_metadata stores a validation record."""
363+
monkeypatch.setattr(
364+
"fmu.settings._fmu_dir.getpass.getuser",
365+
lambda: "test-user",
366+
)
367+
368+
fmu_dir.update_validation_metadata("rms_project")
369+
370+
record = fmu_dir.config.load().validation.rms_project
371+
assert record is not None
372+
assert record.last_validated_at.tzinfo is not None
373+
assert record.last_validated_at.utcoffset() is not None
374+
assert record.last_validated_by == "test-user"
375+
376+
358377
def test_update_config(fmu_dir: ProjectFMUDirectory) -> None:
359378
"""Tests update_config updates and saves the config for multiple values."""
360379
updated_config = fmu_dir.update_config({"version": "2.0.0", "created_by": "user2"})

0 commit comments

Comments
 (0)