Source code for kappa_sdk.well_group

from typing import Optional, Dict, List, Any
from ._private._cluster_apis import ClusterAPIS
from ._private.dto_converters._well_group_dto_converter import WellGroupDtoConverter
from .file import File
from .pvt.pvt import PVT
from .well_production_enum import WellProductionTypeEnum
from .well import Well
from .field_data_types_catalog import FieldDataTypesCatalog
from .field_well_properties_catalog import FieldWellPropertiesCatalog
from .file_folder import FileFolder
from .file_folders_extensions import find_file_folder_recursively_by_id
from datetime import datetime
from .gas_oil_type_enum import GasOilTypeEnum
from .unit_system_pvt_enum import UnitSystemPvtEnum


[docs] class WellGroup: """ Well group object. Presents a KAPPA Automate well group information object. """ def __init__(self, well_group_id: str, field_id: str, name: str, cluster_apis: ClusterAPIS, uwi: Optional[str], file_folders: List[FileFolder], pvts: List[PVT], well_group_dto_converter: WellGroupDtoConverter, data_types_catalog: FieldDataTypesCatalog, well_properties_catalog: FieldWellPropertiesCatalog): self.__id: str = well_group_id self.__field_id: str = field_id self.__name: str = name self.__cluster_apis: ClusterAPIS = cluster_apis self.__uwi: Optional[str] = uwi self.__dto_converter: WellGroupDtoConverter = well_group_dto_converter self.__file_folders: List[FileFolder] = file_folders self.__data_type_catalog: FieldDataTypesCatalog = data_types_catalog self.__well_properties_catalog: FieldWellPropertiesCatalog = well_properties_catalog self.__pvts: List[PVT] = pvts @property def id(self) -> str: """ Gets the id of the :class:`WellGroup` object. """ return self.__id @property def name(self) -> str: """ Gets the name of the :class:`WellGroup`. """ return self.__name @property def uwi(self) -> Optional[str]: """ Gets the UWI of the :class:`WellGroup` object. """ return self.__uwi @property def file_folders(self) -> List[FileFolder]: """ Gets the list of file folders contained in this :class:`WellGroup`. .. note:: This property is populated on-demand and is cached for the duration of the :class:`Connection`. """ return self.__file_folders @property def pvts(self) -> List[PVT]: """ Gets the list of PVTs contained in this :class:`WellGroup`. .. note:: This property is populated on-demand and is cached for the duration of the :class:`Connection`. """ return self.__pvts def upload_file(self, file_path: str, file_folder_id: Optional[str] = None, overwrite: bool = False) -> File: """ Uploads a file to this :class:`WellGroup`. Parameters ---------- file_path: Full path and name of the file to upload. overwrite: A value indicating whether to overwrite a file with the same name if it already exists in the well group. file_folder_id: Id of the file folder to upload the file Returns ------- :class:`File`: An uploaded file object. """ if file_folder_id is not None: file_folder = find_file_folder_recursively_by_id(file_folder_id, self.__file_folders) if file_folder is None: raise ValueError(f"Missing File folder {file_folder_id} in well group {self.__name}") file_dto = self.__cluster_apis.field_api.upload_file_to_file_folder_in_field(self.__field_id, file_folder.id, file_path, overwrite) else: file_dto = self.__cluster_apis.field_api.upload_file_to_well_group(self.__field_id, self.__id, file_path, overwrite) file = self.__dto_converter.file_dto_converter.build_file_from_file_dto(self.__id, file_dto) return file def create_well(self, name: str, uwi: Optional[str] = None, comment: Optional[str] = None, production_type: WellProductionTypeEnum = WellProductionTypeEnum.unknown, labels: Optional[List[str]] = None, well_properties_values: Optional[List[Dict[str, Any]]] = None) -> Well: """ Create a new well under the field associated to this :class:`WellGroup` Parameters ---------- name: Name of the new well uwi: Unique well identifier of the new well comment: Any description production_type: Production type of the new well, unknow by default labels: Labels of the new well well_properties_values: You can fill the well properties values, it has to be a dictionary following this format {'alias_of_the_well_property':value} Returns ------- :class:`Well`: The new well """ payload = self.__dto_converter.get_create_well_payload(name, uwi, comment, production_type, labels, well_properties_values) return self.__dto_converter.build_well(self.__field_id, self.__id, self.__cluster_apis.field_api.create_well(self.__field_id, self.__id, payload), self.__data_type_catalog, self.__well_properties_catalog) def create_pvt_from_file(self, pvt_name: str, file_id: str, start_date: Optional[datetime] = None, reservoir_pressure: Optional[float] = None, reservoir_temperature: Optional[float] = None, gas_oil_type: Optional[GasOilTypeEnum] = None, unit_system: Optional[UnitSystemPvtEnum] = None) -> PVT: """ Creates a PVT (Pressure-Volume-Temperature) object from a file. You can define fallback parameters when the gas oil type is undetermined. Parameters ---------- pvt_name : str The name of the PVT object to be created. file_id : str The identifier of the file from which the PVT object will be created. start_date : datetime, optional The start date for the PVT data coverage. Defaults to None. reservoir_pressure : float, optional The pressure of the reservoir associated with the PVT object. Defaults to None. reservoir_temperature : float, optional The temperature of the reservoir associated with the PVT object. Defaults to None. gas_oil_type : GasOilTypeEnum, optional The type of gas or oil associated with the PVT object, as per the enumerated GasOilTypeEnum. Defaults to None. unit_system : UnitSystemPvtEnum, optional The unit system used for the PVT object, as per the enumerated UnitSystemPvtEnum. Defaults to None. Returns ------- PVT An instance of the PVT object created using the provided parameters and data from the specified text file. """ dto = self.__dto_converter.well_dto_converter.get_command_pvt_from_text_file_dto(pvt_name, self.__field_id, None, file_id, start_date, reservoir_pressure, reservoir_temperature, gas_oil_type, unit_system) pvt = self.__dto_converter.well_dto_converter.build_pvt(self.__field_id, None, self.__cluster_apis.automation_api.create_pvt_from_text_file_wellgroup(self.id, dto)) self.pvts.append(pvt) return pvt def create_pvt_from_kw_document(self, pvt_name: str, document_id: str, analysis_id: str) -> PVT: """ Create a PVT object in the well group from a KW document Parameters ---------- pvt_name: str Name of the PVT object to create document_id: str Id of the document to use analysis_id: str Id of the analysis to use Returns ------- PVT The PVT object created. """ dto = self.__dto_converter.well_dto_converter.get_command_pvt_from_kw_document_dto(pvt_name, self.__field_id, None, document_id, analysis_id) pvt = self.__dto_converter.well_dto_converter.build_pvt(self.__field_id, None, self.__cluster_apis.automation_api.create_pvt_from_kw_document_wellgroup(self.id, dto)) self.pvts.append(pvt) return pvt