Source code for kappa_sdk.wellbore.wellbore
from typing import List, Optional
from .wellbore_geometry import WellboreGeometry
from .wellbore_perforation import WellborePerforation
from .._private._tech_objects_api import TechObjectsAPI
from .._private._tech_objects_dto import WellboreQueryDto
from .._private.dto_converters._wellbore_dto_converter import WellboreDtoConverter
from datetime import datetime
[docs]
class Wellbore:
[docs]
    def __init__(self, id: str, name: str, technical_object_id: str, tech_objects_api: TechObjectsAPI, dto_converter: WellboreDtoConverter) -> None:
        self.__id = id
        self.__name = name
        self.__technical_object_id = technical_object_id
        self.__geometries: Optional[List[WellboreGeometry]] = None
        self.__perforations: Optional[List[WellborePerforation]] = None
        self.__wellbore_query_dto: Optional[WellboreQueryDto] = None
        self.__tech_objects_api = tech_objects_api
        self.__dto_converter = dto_converter 
[docs]
    def refresh_data(self) -> None:
        self.__wellbore_query_dto = None
        self.__geometries = None
        self.__perforations = None 
    def __get_wellbore_query_dto(self) -> WellboreQueryDto:
        if self.__wellbore_query_dto is None:
            self.__wellbore_query_dto = self.__tech_objects_api.get_wellbore(self.__technical_object_id)
        return self.__wellbore_query_dto
    @property
    def id(self) -> str:
        """Gets the unique id of this :class:`Wellbore`."""
        return self.__id
    @property
    def name(self) -> str:
        """Gets the name of this :class:`Wellbore`."""
        return self.__name
    @property
    def technical_object_id(self) -> str:
        """Gets the technical object id associated with this :class:`Wellbore`."""
        return self.__technical_object_id
    @property
    def geometries(self) -> List[WellboreGeometry]:
        """Gets the geometries of this :class:`Wellbore`."""
        if self.__geometries is None:
            self.__geometries = self.__dto_converter.get_geometries_from_dto(self.__get_wellbore_query_dto().geometries)
        return self.__geometries
    @property
    def perforations(self) -> List[WellborePerforation]:
        """Gets the perforations of this :class:`Wellbore`."""
        if self.__perforations is None:
            self.__perforations = self.__dto_converter.get_perforations_from_dto(self.__get_wellbore_query_dto().perforations)
        return self.__perforations
[docs]
    def add_geometries(self, geometries: List[WellboreGeometry]) -> List[WellboreGeometry]:
        """Add a geometry to the wellbore"""
        geometries_command_dto = self.__dto_converter.build_geometries_command_dto_from_geometries(geometries)
        self.__tech_objects_api.add_wellbore_geometries(self.__technical_object_id, geometries_command_dto)
        self.geometries.extend(geometries)
        return self.geometries 
[docs]
    def delete_geometries(self, start_date: Optional[datetime], end_date: Optional[datetime]) -> None:
        self.__wellbore_query_dto = self.__tech_objects_api.delete_wellbore_geometries(self.__technical_object_id, start_date, end_date)
        self.__geometries = self.__dto_converter.get_geometries_from_dto(self.__wellbore_query_dto.geometries) 
[docs]
    def add_perforations(self, perforations: List[WellborePerforation]) -> List[WellborePerforation]:
        perforations_command_dto = self.__dto_converter.build_perforations_dto_from_perforations(perforations)
        self.__tech_objects_api.add_perforations(self.__technical_object_id, perforations_command_dto)
        self.perforations.extend(perforations)
        return self.perforations 
[docs]
    def delete_perforations(self) -> None:
        self.__tech_objects_api.delete_wellbore_perforations(self.technical_object_id)
        self.__perforations = None