Source code for kappa_sdk.user_tasks.simulation.services

import datetime
from ..context import Context
from .event_publisher import EventPublisherSimulated
from ..scheduler import Scheduler
from .log import LogSimulated
from ..data_query_service import DataQueryService
from ..data_command_service import DataCommandService
from ..parameters import Parameters
from ..task_settings import TaskSettings
from ...connection import Connection
from ...field import Field
from ...well import Well
from ...unit_converter import UnitConverter
from ...rest_api import RestAPI
from ...enumerator import TimeRangeEnum, ExtrapolationMethodEnum, InterpolationMethodEnum, DataEnumerator, DataEnumeratorSettings
from .simulated_user_task import SimulatedUserTask
from ...user_task import UserTask
from typing import Dict, Optional
from ..services import Services
from ..redefinition import Redefinition


[docs] class ServicesSimulated(Services): def __init__(self, connection: Connection, context: Context, parameters: Parameters, name: str, outputs: Optional[Dict[str, Dict[str, str]]] = None, redefinition: Optional[Redefinition] = None): self.__connection: Connection = connection self.__event_publisher: EventPublisherSimulated = EventPublisherSimulated() self.__context: Context = context self.__redefinition: Optional[Redefinition] = redefinition if self.__context is not None and self.__context.field_id is not None: try: self.__field: Field = next(x for x in self.__connection.get_fields() if x.id == self.__context.field_id) except StopIteration: raise ValueError('Field {} cannot be found'.format(self.__context.field_id)) else: raise ValueError('Field id must be specified') if self.__context is not None and self.__context.field_id is not None and self.__context.well_id is not None: try: self.__well: Well = next(x for x in self.__field.wells if x.id == self.__context.well_id) except StopIteration: raise ValueError('Well {} cannot be found'.format(self.__context.well_id)) else: raise ValueError('Well id must be specified') outputs_data = [] if outputs is not None: for output_name in list(outputs.keys()): if outputs[output_name]["type"] == "dataset": try: outputs_data.append(next(x for x in self.__well.data if x.name == str(output_name))) except StopIteration: raise ValueError('Output Data {} cannot be found'.format(output_name)) self.__rest_api: RestAPI = self.__connection.rest_api self.__settings: TaskSettings = TaskSettings(TimeRangeEnum.total, ExtrapolationMethodEnum.zero, InterpolationMethodEnum.absent_value) self.__data_command_service: DataCommandService = DataCommandService(connection._Connection__cluster_apis.data_api, connection._Connection__connection_dto_converter.field_dto_converter.well_dto_converter.data_dto_converter) # type:ignore[attr-defined] self.__scheduler: Scheduler = Scheduler() self.__log: LogSimulated = LogSimulated() data_enumerator_settings = DataEnumeratorSettings(self.__settings.time_range, datetime.datetime.min, datetime.datetime.max, self.__settings.extrapolation_method, self.__settings.absent_data_treatment, 100000) self.__data_enumerator: DataEnumerator = DataEnumerator(data_enumerator_settings, self.__rest_api) self.__parameters: Parameters = parameters self.__data_query_service: DataQueryService = DataQueryService(connection._Connection__cluster_apis.data_api, connection.unit_converter) # type:ignore[attr-defined] self.__user_task: UserTask = SimulatedUserTask(self.well, name, outputs_data) @property def rest_api(self) -> RestAPI: """ Gets the rest_api of the :class:`Service`. """ return self.__connection.rest_api @property def unit_converter(self) -> UnitConverter: """ Gets the unit converter of the :class:`Service`. """ return self.__connection.unit_converter @property def context(self) -> Context: """ Gets the context of the :class:`Service`. """ return self.__context @property def redefinition(self) -> Optional[Redefinition]: """ Gets the redefine setting of the user task. """ return self.__redefinition @property def field(self) -> Field: """ Gets the field of the :class:`Service`. """ return self.__field @property def well(self) -> Well: """ Gets the well of the :class:`Service`. """ return self.__well @property def event_publisher(self) -> EventPublisherSimulated: """ Gets the event_publisher of the :class:`Service`. """ return self.__event_publisher @property def data_enumerator(self) -> DataEnumerator: """ Gets the data_enumerator of the :class:`Service`. """ return self.__data_enumerator @property def data_command_service(self) -> DataCommandService: """ Gets the well of the :class:`Service`. """ return self.__data_command_service @property def log(self) -> LogSimulated: """ Gets the log of the :class:`Service`. """ return self.__log @property def scheduler(self) -> Scheduler: """ Gets the scheduler of the :class:`Service`. """ return self.__scheduler @property def parameters(self) -> Parameters: """ Gets the parameters of this :class:`Service`. """ return self.__parameters @property def data_query_service(self) -> DataQueryService: """ Gets the data query service of this :class:'Service'. """ return self.__data_query_service @property def user_task(self) -> UserTask: """ Gets the user task of this :class:'Service'. """ return self.__user_task