Source code for exosim.tasks.task
from abc import ABCMeta, abstractmethod
from typing import Any
import exosim.log as log
from exosim.utils.timed_class import TimedClass
[docs]class Task(TimedClass):
"""
*Abstract class*
Base class for tasks.
"""
__metaclass__ = ABCMeta
_output = None
_task_input = None
_task_params = None
@abstractmethod
def __init__(self):
"""
Class initialisation, needed to prepare the task inputs reader
"""
pass
@abstractmethod
[docs] def execute(self) -> None:
"""
Class execution. It runs on call and executes all the task actions returning the outputs.
It requires the input with correct keywords
"""
pass
def __call__(self, **kwargs):
self.set_log_name()
self._task_input = kwargs
self._validate_input_params()
self._populate_empty_param()
self.trace("called")
self.execute()
self.trace("exited")
return self.get_output()
def _validate_input_params(self) -> None:
for key in self._task_input.keys():
if key not in self._task_params.keys():
self.error("Unexpected Task input parameter: {}".format(key))
raise ValueError
def _populate_empty_param(self) -> None:
for key in self._task_params.keys():
if key not in self._task_input.keys():
self._task_input[key] = self._task_params[key]["default"]
[docs] def get_output(self) -> Any:
"""Returns the output values."""
return self._output
[docs] def set_output(self, product: Any) -> None:
"""It sets the values to return."""
self._output = product
[docs] def get_task_param(self, paramName: str) -> Any:
"""It get the value from the task parameter."""
return self._task_input[paramName]
[docs] def add_task_param(
self, param_name: str, param_description: str, default: Any = None
) -> None:
"""It adds a parameter for the task."""
if self._task_params is None:
self._task_params = {}
self._task_params[param_name] = {
"parameters": param_description,
"default": default,
}