from .updater import Updater
[docs]class HeartbeatObject(object):
"""Object with systole, update, and diastole
systoler, updater, and diastoler are properties that can be
set with a function or an Updater object.
systole, update, diastole are calling the respective
updater.
"""
_systoler = None
_updater = None
_diastoler = None
[docs] def systole(self):
"call the Systole updater"
if self._systoler is not None:
self._systoler.update(self)
[docs] def update(self):
"call the Updater to do the update"
if self._updater is not None:
self.updater.update(self)
[docs] def diastole(self):
"call the Diastole updater"
if self._diastoler is not None:
self._diastoler.update(self)
def _constructupdater(self, value):
"""create an Updater object from `value`.
`value` can be:
- `None`, then `None` is returned
- an `Updater`, then `value` is just returned
- a function, then a new Updater is created and returned
"""
if isinstance(value, Updater):
return value
elif hasattr(value, "__call__"):
return Updater(func=value)
elif value is None:
return None
else:
raise TypeError(
"<value> must be None, a function, or an Updater instance")
@property
def updater(self):
return self._updater
@property
def systoler(self):
return self._systoler
@property
def diastoler(self):
return self._diastoler
@updater.setter
def updater(self, value):
updtr = self._constructupdater(value)
self._updater = updtr
@systoler.setter
def systoler(self, value):
updtr = self._constructupdater(value)
self._systoler = updtr
@diastoler.setter
def diastoler(self, value):
updtr = self._constructupdater(value)
self._diastoler = updtr