Source code for est.core.process.process
"""module for process base class"""
import logging
from ewokscore.taskwithprogress import TaskWithProgress as Task
from est.core.types import XASObject
from .progress import Progress
from ..utils import extract_properties_from_dict
from ... import __version__
_logger = logging.getLogger(__name__)
[docs]
class Process(Task, register=False):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self._advancement = Progress(name=self.name)
self.__stop = False
"""flag to notice when a end of process is required"""
self._settings = {}
# configuration
self._callbacks = []
def __init_subclass__(subclass, name="", **kwargs):
super().__init_subclass__(**kwargs)
subclass._NAME = name
@property
def name(self) -> str:
return self._NAME
[docs]
def stop(self):
self.__stop = True
@property
def advancement(self):
return self._advancement
@advancement.setter
def advancement(self, advancement):
assert isinstance(advancement, Progress)
self._advancement = advancement
@property
def callbacks(self):
return self._callbacks
[docs]
@staticmethod
def getXasObject(xas_obj) -> XASObject:
if isinstance(xas_obj, dict):
_xas_obj = XASObject.from_dict(xas_obj)
else:
_xas_obj = xas_obj
assert isinstance(_xas_obj, XASObject)
if _xas_obj.n_spectrum > 0:
_xas_obj.spectra.check_validity()
assert isinstance(_xas_obj, XASObject)
return _xas_obj
[docs]
def program_name(self) -> str:
"""
:return: name of the process to be saved in HDF5
:rtype: dict
"""
return self.class_registry_name().split(".")[-1]
[docs]
@staticmethod
def program_version() -> str:
"""
:return: version of the process to be saved in HDF5
:rtype: dict
"""
return __version__
[docs]
@staticmethod
def definition(self) -> str:
"""
:return: definition of the process to be saved in HDF5
:rtype: dict
"""
raise NotImplementedError("Base class")
[docs]
def getConfiguration(self) -> dict:
"""
:return: parameters of the process to be saved in HDF5
:rtype: dict
"""
if len(self._settings) > 0:
return self._settings
else:
return None
[docs]
def setConfiguration(self, configuration: dict):
# filter configuration from orange widgets
if "__version__" in configuration:
del configuration["__version__"]
if "savedWidgetGeometry" in configuration:
del configuration["savedWidgetGeometry"]
if "savedWidgetGeometry" in configuration:
del configuration["savedWidgetGeometry"]
if "controlAreaVisible" in configuration:
del configuration["controlAreaVisible"]
self._settings = configuration
[docs]
def addCallback(self, callback):
self._callbacks.append(callback)
[docs]
def update_properties(self, properties):
if properties is None:
return
if isinstance(properties, str):
properties = extract_properties_from_dict(properties)
self._settings.update(properties)