from .errorhandler import ErrorHandler
import abc
[docs]
class Component:
'''Base class for components.
Provides basic functionality that components inherit.
* Components are guaranteed to have an errorhandler, via the
:attr:`errorhandler` property
* Components usually have :class:`facets <endless.facet.facet>`
and :class:`receptacles <endless.facet.facet>`
'''
[docs]
def __init__(self):
self.errorhandler = None
self._facets = {}
self._receptacles = {}
def errors_to(self, errorhandler):
assert self.errorhandler is None
assert isinstance(errorhandler, ErrorHandler), errorhandler
self.errorhandler = errorhandler
[docs]
class LifetimeComponent(Component):
'''Base class for components whose lifetime needs to be managed.'''
[docs]
def __init__(self, func):
super().__init__()
self.func = func
self.task = None
[docs]
def start(self, taskgroup):
'''Create task'''
assert self.task is None
self.task = taskgroup.create_task(self.func())
[docs]
def stop(self):
'''Cancel task'''
assert self.task is not None
self.task.cancel()
self.task = None