-
Notifications
You must be signed in to change notification settings - Fork 38
/
value.py
53 lines (40 loc) · 1.45 KB
/
value.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""An observable, settable value interface."""
from pyee import EventEmitter
class Value(EventEmitter):
"""
A property value.
This is used for communicating between the Thing representation and the
actual physical thing implementation.
Notifies all observers when the underlying value changes through an
external update (command to turn the light off) or if the underlying sensor
reports a new value.
"""
def __init__(self, initial_value, value_forwarder=None):
"""
Initialize the object.
initial_value -- the initial value
value_forwarder -- the method that updates the actual value on the
thing
"""
EventEmitter.__init__(self)
self.last_value = initial_value
self.value_forwarder = value_forwarder
def set(self, value):
"""
Set a new value for this thing.
value -- value to set
"""
if self.value_forwarder is not None:
self.value_forwarder(value)
self.notify_of_external_update(value)
def get(self):
"""Return the last known value from the underlying thing."""
return self.last_value
def notify_of_external_update(self, value):
"""
Notify observers of a new value.
value -- new value
"""
if value is not None and value != self.last_value:
self.last_value = value
self.emit('update', value)