annotate light.py @ 6:fc8ed0efcd72

move init to Lights
author drewp@bigasterisk.com
date Sun, 28 Jan 2024 16:02:31 -0800
parents 7eeda7f4f9cd
children 9f427d8073c3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
1 import asyncio
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
2 import logging
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
3 from dataclasses import dataclass
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
4
5
7eeda7f4f9cd spell it to_dict, for compat with DataClassJsonMixin
drewp@bigasterisk.com
parents: 4
diff changeset
5 from color import Color
7eeda7f4f9cd spell it to_dict, for compat with DataClassJsonMixin
drewp@bigasterisk.com
parents: 4
diff changeset
6
2
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
7 log = logging.getLogger('light')
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
8
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
9
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
10 @dataclass
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
11 class Light:
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
12 name: str
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
13 address: str
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
14 online: bool
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
15 colorRequest: Color
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
16 colorMessage: dict
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
17 colorCurrent: Color
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
18 latencyMs: float
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
19
5
7eeda7f4f9cd spell it to_dict, for compat with DataClassJsonMixin
drewp@bigasterisk.com
parents: 4
diff changeset
20 def to_dict(self):
2
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
21 return {
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
22 'light': {
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
23 'name': self.name,
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
24 'address': self.address,
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
25 'online': self.online,
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
26 'colorRequest': self.colorRequest.to_js(),
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
27 'colorMessage': self.colorMessage,
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
28 'colorCurrent': self.colorCurrent.to_js(),
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
29 'latencyMs': self.latencyMs,
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
30 }
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
31 }
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
32
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
33
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
34 class Lights:
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
35 _d: dict[str, Light] = {}
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
36
6
fc8ed0efcd72 move init to Lights
drewp@bigasterisk.com
parents: 5
diff changeset
37 def __init__(self):
fc8ed0efcd72 move init to Lights
drewp@bigasterisk.com
parents: 5
diff changeset
38 self.add(Light('do-desk', 'topic1', True, Color('#ff0000'), {'r': 255}, Color('#000000'), 100))
fc8ed0efcd72 move init to Lights
drewp@bigasterisk.com
parents: 5
diff changeset
39 self.add(Light('do-desk2', 'topic2', True, Color('#ff00ff'), {'r': 255}, Color('#000000'), 200))
fc8ed0efcd72 move init to Lights
drewp@bigasterisk.com
parents: 5
diff changeset
40
2
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
41 def add(self, d: Light):
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
42 self._d[d.name] = d
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
43
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
44 def byName(self, name: str) -> Light:
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
45 return self._d[name]
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
46
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
47 async def changes(self): # yields None on any data change
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
48 while True:
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
49 yield None
5
7eeda7f4f9cd spell it to_dict, for compat with DataClassJsonMixin
drewp@bigasterisk.com
parents: 4
diff changeset
50 await asyncio.sleep(1) # todo
2
c6fd04e07db0 refactor light.py
drewp@bigasterisk.com
parents:
diff changeset
51
5
7eeda7f4f9cd spell it to_dict, for compat with DataClassJsonMixin
drewp@bigasterisk.com
parents: 4
diff changeset
52 def to_dict(self):
7eeda7f4f9cd spell it to_dict, for compat with DataClassJsonMixin
drewp@bigasterisk.com
parents: 4
diff changeset
53 return {'lights': [d.to_dict() for d in sorted(self._d.values(), key=lambda r: r.name)]}