#14772 Python: Add Project.import_formation_names and Case.set_formation_names as object methods and forward importFormationNames to them

The legacy command combined import and assignment with an applyToCaseId.
This is split into RimProject_importFormationNames (returns the
FormationNames object) and RimCase_setFormationNames (takes the
object). RimFormationNames is made scriptable so it can be returned and
passed. RicfImportFormationNames forwards to both.

Project.import_formation_names() in Python keeps its signature, now
returns the FormationNames object, and gains an apply_to_all_cases
flag (default True, matching the old behavior).
Case.import_formation_names() is kept and emits a DeprecationWarning.
This commit is contained in:
Kristian Bendiksen committed 2026-09-22 14:19:23 +02:00
1 parent b60ccf1f83
commit 147a60ceec
9 files changed
+249 -64

No files matched your search

+12 -9
View File
@@ -932,20 +932,23 @@ def import_formation_names(
) -> None:
"""Import formation names into project and apply it to the current case
Deprecated: use Project.import_formation_names(apply_to_all_cases=False) followed by
Case.set_formation_names() instead.
Arguments:
formation_files(list): list of files to import
"""
if formation_files is None:
formation_files = []
elif isinstance(formation_files, str):
formation_files = [formation_files]
self._execute_command(
importFormationNames=Cmd.ImportFormationNamesRequest(
formationFiles=formation_files, applyToCaseId=self.id
)
warnings.warn(
"Case.import_formation_names() is deprecated, use Project.import_formation_names() and Case.set_formation_names() instead",
DeprecationWarning,
stacklevel=3,
)
project = self.ancestor(rips.project.Project)
formation_names = project.import_formation_names(
formation_files=formation_files, apply_to_all_cases=False
)
self.set_formation_names(formation_names=formation_names)
@add_method(Case)
+13 -6
View File
@@ -23,6 +23,7 @@ import KeyValueStore_pb2
from .exception import RipsError
from .resinsight_classes import (
ColorLegendCollection,
FormationNames,
FractureTemplate,
PlotWindow,
Project,
@@ -458,23 +459,29 @@ def import_well_log_files(self, well_log_files=None, well_log_folder=""):
@add_method(Project)
def import_formation_names(self, formation_files=None):
"""Import formation names into project
def import_formation_names(self, formation_files=None, apply_to_all_cases=True):
"""Import formation names into project and apply it to all grid cases in the project
Arguments:
formation_files(list): list of files to import
apply_to_all_cases(bool): assign the imported formation names to all grid cases.
Use Case.set_formation_names() for finer control.
Returns:
:class:`rips.generated.generated_classes.FormationNames`
"""
if formation_files is None:
formation_files = []
elif isinstance(formation_files, str):
formation_files = [formation_files]
self._execute_command(
importFormationNames=Commands_pb2.ImportFormationNamesRequest(
formationFiles=formation_files, applyToCaseId=-1
)
formation_names = self._call_pdm_method_return_value(
"importFormationNames", FormationNames, formation_files=formation_files
)
if apply_to_all_cases:
for case in self.descendants(Case):
case.set_formation_names(formation_names=formation_names)
return formation_names
@add_method(Project)
@@ -311,6 +311,33 @@ def test_import_formation_names(rips_instance, initialize_test):
assert "Active Formation Names" in available
def test_import_and_set_formation_names_object_methods(rips_instance, initialize_test):
case_path = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
case = rips_instance.project.load_case(case_path)
formation_names = rips_instance.project.import_formation_names(
formation_files=[dataroot.PATH + "/20Layers.lyr"], apply_to_all_cases=False
)
assert isinstance(formation_names, rips.FormationNames)
assert formation_names.formation_names_file_name.endswith("20Layers.lyr")
# No formation names assigned to the case yet
with pytest.raises(rips.RipsError):
case.available_properties(rips.PropertyType.FORMATION_NAMES)
case.set_formation_names(formation_names=formation_names)
assert "Active Formation Names" in case.available_properties(
rips.PropertyType.FORMATION_NAMES
)
with pytest.raises(rips.RipsError):
rips_instance.project.import_formation_names(formation_files=["/no/such.lyr"])
with pytest.raises(rips.RipsError):
case.set_formation_names()
with pytest.warns(DeprecationWarning):
case.import_formation_names(formation_files=dataroot.PATH + "/20Layers.lyr")
_MINIMAL_LAS = """~Version Information
VERS. 2.0 : CWLS log ASCII Standard - VERSION 2.0
WRAP. NO : One line per depth step