Source code for kappa_sdk.user_task

from typing import List, Optional, Dict, Union
from .plot import Plot
from .data import Data
from .file import File
from .document import Document
from ._private._field_api import FieldAPI
from ._private._processing_api import ProcessingAPI
from ._private._well_dto import PlotPropertiesDto
from ._private._user_task_dto import UserTaskItemDto
from ._private.dto_converters._plot_dto_converter import PlotDtoConverter
from ._private.dto_converters._user_task_dto_converter import UserTaskDtoConverter
from .field_data_types_catalog import FieldDataTypesCatalog


[docs] class UserTask: """ User task object. Presents a KAPPA Automate user task information object. """ def __init__(self, field_id: str, well_id: str, custom_workflow_id: Optional[str], user_task_id: str, name: str, user_task_instance_id: str, data_types_catalog: FieldDataTypesCatalog, outputs: List[Data], plots: List[Plot], files: List[File], field_api: FieldAPI, processing_api: ProcessingAPI, plot_dto_converter: PlotDtoConverter, user_task_dto_converter: UserTaskDtoConverter): self.__field_id: str = field_id self.__well_id: str = well_id self.__custom_workflow_id: Optional[str] = custom_workflow_id self.__id: str = user_task_id self.__name: str = name self.__user_task_instance_id: str = user_task_instance_id self.__outputs: List[Data] = outputs self.__field_api: FieldAPI = field_api self.__processing_api: ProcessingAPI = processing_api self.__plots: List[Plot] = plots self.__data_types_catalog: FieldDataTypesCatalog = data_types_catalog self.__plot_dto_converter: PlotDtoConverter = plot_dto_converter self.__user_task_dto_converter: UserTaskDtoConverter = user_task_dto_converter self.__user_task_definition_id: Optional[str] = None self.__user_task_definition_name: Optional[str] = None self.__inputs: Optional[List[Dict[str, Union[bool, str, float]]]] = None self.__user_task_definition: Optional[UserTaskItemDto] = None self.__files: List[File] = files def create_plot(self, plot_name: str, pane_name: Optional[str] = None, square_log_cycles: bool = False, stacked_bars: bool = False, x_label: str = "", is_x_log: bool = False, labels: Optional[List[str]] = None) -> Plot: """ Create a Kappa Automate Plot instance under the user task Parameters ---------- plot_name: Name of plot pane_name: Name of the pane square_log_cycles: Whether or not use Square log cycles stacked_bars: Whether or not use stacked bars x_label: x label is_x_log: Whether or not use logarithmic scale for x values labels: Add some labels to the plot Returns ------- :class:`Plot`: The new Plot instance created under the task. """ if labels is None: labels = list() plot_properties = PlotPropertiesDto(name=plot_name, pane_name=pane_name, square_log_cycles=square_log_cycles, stacked_bars=stacked_bars, x_label=x_label, is_x_log=is_x_log, labels=labels) plot_instance_dto = self.__plot_dto_converter.get_plot_instance_dto(plot_properties) plot_id, plot_name = self.__field_api.create_plot(self.__field_id, self.__well_id, plot_instance_dto, self.__id) return Plot(self.__field_id, self.__well_id, plot_id, plot_name, self.__field_api, self.__data_types_catalog, self.__plot_dto_converter) @property def id(self) -> str: """ Gets the id of the :class:`UserTask` object.""" return self.__id @property def custom_workflow_id(self) -> Optional[str]: """ Get the custom workflow id of the :class:`UserTask` object.""" return self.__custom_workflow_id @property def name(self) -> str: """ Gets the name of the :class:`UserTask`.""" return self.__name @property def outputs(self) -> List[Data]: """ Gets the list of outputs of the :class:`UserTask`.""" return self.__outputs @property def plots(self) -> List[Plot]: """ Gets the list of the plot instances of the :class:`UserTask`.""" self.__plots = [Plot(self.__field_id, self.__well_id, str(x.id), x.name, self.__field_api, self.__data_types_catalog, self.__plot_dto_converter) for x in self.__field_api.get_user_task_dto(self.__field_id, self.__well_id, self.__id).customPlots] return self.__plots @property def files(self) -> List[File]: """ Gets the list of the files under this :class:`UserTask`.""" self.__files = [self.__user_task_dto_converter.build_file_from_file_dto(None, file, None) for file in self.__field_api.get_user_task_dto(self.__field_id, self.__well_id, self.__id).files] return self.__files @property def documents(self) -> List[Document]: """ Gets the list of the documents under this :class:`UserTask`.""" document_list = list() for file in self.files: document = file.as_kw_document() if document is not None: document_list.append(document) return document_list @property def user_task_instance_id(self) -> str: """ Gets the user task id (processing service) of the :class:`UserTask` object.""" return self.__user_task_instance_id @property def user_task_definition_name(self) -> str: """ Gets the user task definition name of the :class:`UserTask` object.""" if self.__user_task_definition_name is None: self.__user_task_definition_name = self.__get_user_task_definition_dto().userTaskDefinitionName return self.__user_task_definition_name def rename(self, new_name: str) -> None: """ Rename the User Task""" dto = {'name': new_name} self.__name = self.__field_api.rename_user_task(self.__field_id, self.__well_id, self.__id, dto) def delete(self) -> None: """ Delete the User Task""" self.__field_api.delete_user_task(self.__field_id, self.__well_id, self.__id) def __get_user_task_definition_dto(self) -> UserTaskItemDto: if self.__user_task_definition is None: self.__user_task_definition = self.__processing_api.get_user_task_dto(self.__user_task_instance_id) return self.__user_task_definition @property def inputs(self) -> List[Dict[str, Union[bool, str, float]]]: """ Retrieves the user task inputs. Returns: List[Dict[str, Union[bool, str, float]]]: A list of dictionaries, each containing the name and value of a user task input. The value can be of type bool, str, or float. """ if self.__inputs is None: self.__inputs = [{"name": key, "value": value.currentValue} for key, value in self.__get_user_task_definition_dto().inputs.items()] return self.__inputs