from uuid import UUID
from datetime import datetime
import yaml
from typing import Dict, Optional, Union, ItemsView, Any
from .._parameters_group_enum import ParametersGroupEnum
from .._parameter import Parameter
from ..parameters_dictionary import ParametersDictionary
[docs]
class ParametersDictionarySimulation(ParametersDictionary):
def __init__(self, yaml_definition: str, parameter_group_type: ParametersGroupEnum = ParametersGroupEnum.input):
self.__supported_data_types = {
'boolean': bool,
'dataset': UUID,
'datetime': datetime,
'double': float,
'int': int,
'string': str,
'enum': str,
'file': UUID,
'wellproperty': str,
'wellpropertycontainer': str,
'pvt': str,
'filefolder': str}
self.__parameters_dictionary: Dict[str, Parameter] = dict()
yaml_parameters = yaml.load(yaml_definition, Loader=yaml.FullLoader)
if yaml_parameters is None:
return
try:
yaml_parameters_group = yaml_parameters[parameter_group_type.value]
except KeyError:
return
if yaml_parameters_group is None:
return
for yaml_parameter in yaml_parameters_group:
data_type = self.__supported_data_types[yaml_parameters_group[yaml_parameter]['type'].lower()]
value = yaml_parameters_group[yaml_parameter].get('currentValue', None)
self.__parameters_dictionary[str(yaml_parameter).lower()] = Parameter(data_type, value)
def __getitem__(self, parameter_name: str) -> Optional[Union[bool, UUID, datetime, float, int, str]]:
r"""Gets the value of the user task parameter identified by its name.
Parameters
----------
parameter_name : str
The name of the user task parameter.
"""
if parameter_name.lower() not in self.__parameters_dictionary:
raise KeyError('Parameter "{}" is not defined'.format(parameter_name))
return self.__parameters_dictionary[parameter_name.lower()].value
def __setitem__(self, parameter_name: str, value: Optional[Union[bool, UUID, datetime, float, int, str]]) -> None:
r"""Sets the value of the user task parameter identified by its name.
Parameters
----------
parameter_name : str
The name of the user task parameter.
"""
if parameter_name.lower() not in self.__parameters_dictionary:
raise KeyError('Parameter "{}" is not defined'.format(parameter_name))
self.__parameters_dictionary[parameter_name.lower()].value = value
def items(self) -> ItemsView[str, Any]:
"""
Access to the class like a real dictionnary
Returns
-------
key, values of the class
"""
return self.__parameters_dictionary.items()
def add_parameter(self, parameter_name: str, data_type_name: str, value: Optional[Union[bool, UUID, datetime, float, int, str]] = None) -> None:
r"""Adds a new parameter to the dictionary.
Parameters
----------
parameter_name : str
The name of the parameter to add.
data_type_name : str
The type of the parameter (e.g., 'file', 'string', 'double', etc.)
value : Optional
The initial value for the parameter (default is None).
Raises
------
ValueError
If the specified data_type_name is not supported.
"""
if data_type_name.lower() not in self.__supported_data_types:
raise ValueError(f"Data type '{data_type_name}' is not supported. Supported types are: {', '.join(self.__supported_data_types.keys())}")
data_type = self.__supported_data_types[data_type_name.lower()]
self.__parameters_dictionary[parameter_name.lower()] = Parameter(data_type, value)