-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontroller.py
29 lines (20 loc) · 981 Bytes
/
controller.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from observable import Observable
class Controller(Observable):
""" A controller that notifies when all active critiera are met. """
def __init__(self) -> None:
super().__init__('Controller')
self._criteria = []
self._callback = self.update # Micropython does not implement 3.8+ behavior for equality of member functions
def add_criterion(self, criterion: Criterion, subscribe: bool = True) -> None:
if subscribe:
criterion.subscribe(self._callback)
self._criteria.append(criterion)
def remove_criteriea(self, criterion: Criterion) -> None:
criterion.unsubscribe(self._callback)
try:
self._criteria.remove(criterion)
except ValueError:
pass
def update(self, observable: Observable) -> None:
if all([criterion.is_valid() for criterion in self._criteria if criterion.is_active()]):
self.notify()