Mercurial > louis > mq > lightsd
annotate add_monolight.patch @ 501:c38b0b9612cd
broken wip
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Sun, 23 Oct 2016 14:53:11 -0700 |
parents | d250169c1a69 |
children | a78f7f19d40f |
rev | line source |
---|---|
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1 # HG changeset patch |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
2 # Parent 7e908ae2e0c7088791fb4a442d86d7687a52b956 |
493 | 3 Start an experimental GUI for a Monome 128 Varibright |
4 | |
5 Written in Python >= 3.5. | |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
6 |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
7 diff --git a/.hgignore b/.hgignore |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
8 --- a/.hgignore |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
9 +++ b/.hgignore |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
10 @@ -2,3 +2,4 @@ |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
11 .*\.py[co]$ |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
12 ^build |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
13 ^pcaps |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
14 +.*\.egg-info$ |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
15 diff --git a/apps/monolight/monolight/__init__.py b/apps/monolight/monolight/__init__.py |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
16 new file mode 100644 |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
17 diff --git a/apps/monolight/monolight/cli.py b/apps/monolight/monolight/cli.py |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
18 new file mode 100644 |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
19 --- /dev/null |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
20 +++ b/apps/monolight/monolight/cli.py |
501 | 21 @@ -0,0 +1,69 @@ |
493 | 22 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
23 +# | |
24 +# This file is part of lightsd. | |
25 +# | |
26 +# lightsd is free software: you can redistribute it and/or modify | |
27 +# it under the terms of the GNU General Public License as published by | |
28 +# the Free Software Foundation, either version 3 of the License, or | |
29 +# (at your option) any later version. | |
30 +# | |
31 +# lightsd is distributed in the hope that it will be useful, | |
32 +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
33 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
34 +# GNU General Public License for more details. | |
35 +# | |
36 +# You should have received a copy of the GNU General Public License | |
37 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. | |
38 + | |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
39 +import asyncio |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
40 +import click |
494
8f70d5539e5c
Organize the code a bit better
Louis Opter <kalessin@kalessin.fr>
parents:
493
diff
changeset
|
41 +import functools |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
42 +import lightsc |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
43 +import locale |
493 | 44 +import logging |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
45 +import monome |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
46 +import signal |
493 | 47 + |
48 +from . import osc | |
49 +from . import ui | |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
50 + |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
51 +ENCODING = locale.getpreferredencoding() |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
52 + |
493 | 53 +logging.basicConfig(level=logging.INFO) |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
54 + |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
55 + |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
56 +@click.command() |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
57 +@click.option("--serialoscd-host", default="127.0.0.1") |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
58 +@click.option("--serialoscd-port", type=click.IntRange(0, 2**16 - 1)) |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
59 +@click.option("--lightsd-url") |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
60 +def main(serialoscd_host: str, serialoscd_port: int, lightsd_url: str): |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
61 + loop = asyncio.get_event_loop() |
493 | 62 + |
501 | 63 + monome_future = asyncio.Future() |
64 + grid = ui.MonomeGrid() | |
65 + | |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
66 + tasks = asyncio.gather( |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
67 + loop.create_task(lightsc.create_async_lightsd_connection(lightsd_url)), |
501 | 68 + loop.create_task(monome.create_serialosc_connection(functools.partial( |
69 + osc.MonomeApplication, monome_future, grid.submit_input | |
70 + ))), | |
71 + asyncio.ensure_future(monome_future) | |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
72 + ) |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
73 + loop.run_until_complete(tasks) |
501 | 74 + lightsd, serialosc, monome_app = tasks.result() |
75 + | |
76 + grid.set_monome(monome_app) | |
493 | 77 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
78 + if hasattr(loop, "add_signal_handler"): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
79 + for signum in (signal.SIGINT, signal.SIGTERM, signal.SIGQUIT): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
80 + loop.add_signal_handler(signum, ui.stop) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
81 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
82 + # TODO: make which monome instance to use something configurable |
501 | 83 + ui_task = loop.create_task(ui.start(loop, lightsd, grid)) |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
84 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
85 + loop.run_until_complete(ui_task) |
493 | 86 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
87 + serialosc.disconnect() |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
88 + loop.run_until_complete(lightsd.close()) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
89 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
90 + loop.close() |
501 | 91 diff --git a/apps/monolight/monolight/osc.py b/apps/monolight/monolight/osc.py |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
92 new file mode 100644 |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
93 --- /dev/null |
501 | 94 +++ b/apps/monolight/monolight/osc.py |
95 @@ -0,0 +1,66 @@ | |
96 +# Copyright (c) 2016, Louis Opter <louis@opter.org> | |
97 +# | |
98 +# This file is part of lightsd. | |
99 +# | |
100 +# lightsd is free software: you can redistribute it and/or modify | |
101 +# it under the terms of the GNU General Public License as published by | |
102 +# the Free Software Foundation, either version 3 of the License, or | |
103 +# (at your option) any later version. | |
104 +# | |
105 +# lightsd is distributed in the hope that it will be useful, | |
106 +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
107 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
108 +# GNU General Public License for more details. | |
109 +# | |
110 +# You should have received a copy of the GNU General Public License | |
111 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. | |
112 + | |
113 +import asyncio | |
114 +import monome | |
115 + | |
116 +from enum import IntEnum | |
117 +from typing import Callable | |
118 + | |
119 + | |
120 +class MonomeKeyState(IntEnum): | |
121 + | |
122 + DOWN = 1 | |
123 + UP = 0 | |
124 + | |
125 + | |
126 +class MonomeLedLevel(IntEnum): | |
127 + | |
128 + OFF = 0 | |
129 + VERY_LOW_1 = 1 | |
130 + VERY_LOW_2 = 2 | |
131 + VERY_LOW_3 = 3 | |
132 + LOW = LOW_1 = 4 | |
133 + LOW_2 = 5 | |
134 + LOW_3 = 6 | |
135 + LOW_4 = 7 | |
136 + MEDIUM = MEDIUM_1 = 8 | |
137 + MEDIUM_2 = 9 | |
138 + MEDIUM_3 = 10 | |
139 + MEDIUM_4 = 11 | |
140 + HIGH = HIGH_1 = 12 | |
141 + HIGH_2 = 13 | |
142 + HIGH_3 = 14 | |
143 + HIGH_4 = ON = 15 | |
144 + | |
145 + | |
146 +class MonomeApplication(monome.Monome): | |
147 + | |
148 + def __init__( | |
149 + self, | |
150 + future: asyncio.Future, | |
151 + keypress_callback: Callable[[int, int, int], None] | |
152 + ) -> None: | |
153 + monome.Monome.__init__(self, "/monolight") | |
154 + future.set_result(self) | |
155 + self._keypress_callback = keypress_callback | |
156 + | |
157 + def ready(self) -> None: | |
158 + self.led_all(MonomeLedLevel.OFF) | |
159 + | |
160 + def grid_key(self, x: int, y: int, s: int): | |
161 + self._keypress_callback(x, y, s) | |
162 diff --git a/apps/monolight/monolight/types.py b/apps/monolight/monolight/types.py | |
163 new file mode 100644 | |
164 --- /dev/null | |
165 +++ b/apps/monolight/monolight/types.py | |
166 @@ -0,0 +1,18 @@ | |
167 +# Copyright (c) 2016, Louis Opter <louis@opter.org> | |
168 +# | |
169 +# This file is part of lightsd. | |
170 +# | |
171 +# lightsd is free software: you can redistribute it and/or modify | |
172 +# it under the terms of the GNU General Public License as published by | |
173 +# the Free Software Foundation, either version 3 of the License, or | |
174 +# (at your option) any later version. | |
175 +# | |
176 +# lightsd is distributed in the hope that it will be useful, | |
177 +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
178 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
179 +# GNU General Public License for more details. | |
180 +# | |
181 +# You should have received a copy of the GNU General Public License | |
182 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. | |
183 + | |
184 +TimeMonotonic = float | |
185 diff --git a/apps/monolight/monolight/ui/__init__.py b/apps/monolight/monolight/ui/__init__.py | |
186 new file mode 100644 | |
187 --- /dev/null | |
188 +++ b/apps/monolight/monolight/ui/__init__.py | |
189 @@ -0,0 +1,19 @@ | |
190 +# Copyright (c) 2016, Louis Opter <louis@opter.org> | |
191 +# | |
192 +# This file is part of lightsd. | |
193 +# | |
194 +# lightsd is free software: you can redistribute it and/or modify | |
195 +# it under the terms of the GNU General Public License as published by | |
196 +# the Free Software Foundation, either version 3 of the License, or | |
197 +# (at your option) any later version. | |
198 +# | |
199 +# lightsd is distributed in the hope that it will be useful, | |
200 +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
201 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
202 +# GNU General Public License for more details. | |
203 +# | |
204 +# You should have received a copy of the GNU General Public License | |
205 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. | |
206 + | |
207 +from .grid import MonomeGrid # noqa | |
208 +from .ui import start, stop, submit_keypress # noqa | |
209 diff --git a/apps/monolight/monolight/ui/components/__init__.py b/apps/monolight/monolight/ui/components/__init__.py | |
210 new file mode 100644 | |
211 --- /dev/null | |
212 +++ b/apps/monolight/monolight/ui/components/__init__.py | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
213 @@ -0,0 +1,20 @@ |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
214 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
215 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
216 +# This file is part of lightsd. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
217 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
218 +# lightsd is free software: you can redistribute it and/or modify |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
219 +# it under the terms of the GNU General Public License as published by |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
220 +# the Free Software Foundation, either version 3 of the License, or |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
221 +# (at your option) any later version. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
222 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
223 +# lightsd is distributed in the hope that it will be useful, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
224 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
225 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
226 +# GNU General Public License for more details. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
227 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
228 +# You should have received a copy of the GNU General Public License |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
229 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
230 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
231 +from .base import MonomeGrid # noqa |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
232 +from .layers import Layer # noqa |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
233 +from .button import button # noqa |
501 | 234 diff --git a/apps/monolight/monolight/ui/components/base.py b/apps/monolight/monolight/ui/components/base.py |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
235 new file mode 100644 |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
236 --- /dev/null |
501 | 237 +++ b/apps/monolight/monolight/ui/components/base.py |
238 @@ -0,0 +1,110 @@ | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
239 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
240 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
241 +# This file is part of lightsd. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
242 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
243 +# lightsd is free software: you can redistribute it and/or modify |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
244 +# it under the terms of the GNU General Public License as published by |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
245 +# the Free Software Foundation, either version 3 of the License, or |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
246 +# (at your option) any later version. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
247 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
248 +# lightsd is distributed in the hope that it will be useful, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
249 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
250 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
251 +# GNU General Public License for more details. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
252 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
253 +# You should have received a copy of the GNU General Public License |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
254 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
255 + |
501 | 256 +from ...osc import MonomeLedLevel |
257 +from ..types import Dimensions, Position | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
258 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
259 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
260 +class LedSprite: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
261 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
262 + def __init__( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
263 + self, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
264 + size: Dimensions, |
501 | 265 + level: MonomeLedLevel = MonomeLedLevel.OFF |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
266 + ) -> None: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
267 + self.size = size |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
268 + self._levels = [level] * size.width * size.height |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
269 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
270 + def _index(self, offset: Position): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
271 + return self.size.height * offset.y + self.size.width * offset.x |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
272 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
273 + def set(self, offset: Position, level: MonomeLedLevel): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
274 + self._levels[self._index(offset)] = level |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
275 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
276 + def get(self, offset: Position): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
277 + return self._levels[self._index(offset)] |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
278 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
279 + def __iter__(self): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
280 + for off_x in range(self.size.width): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
281 + for off_y in range(self.size.height): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
282 + yield off_x, off_y, self.get(Position(x=off_x, y=off_y)) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
283 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
284 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
285 +class UIComponentInsertionError(Exception): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
286 + pass |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
287 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
288 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
289 +class UIComponentBase: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
290 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
291 + def __init__(self, name: str, size: Dimensions, offset: Position) -> None: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
292 + self.name = name |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
293 + self.size = size |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
294 + self.offset = offset |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
295 + self._nw_corner = offset |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
296 + self._se_corner = Position( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
297 + x=self.offset.x + self.size.width, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
298 + y=self.offset.y + self.size.height |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
299 + ) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
300 + self.children = set() |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
301 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
302 + def __repr__(self): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
303 + return "<{}({}, size=({!r}), offset=({!r})>".format( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
304 + self.__class__.__name__, self.name, self.size, self.offset |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
305 + ) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
306 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
307 + def insert(self, new: "UIComponentBase") -> None: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
308 + if new in self.children: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
309 + raise UIComponentInsertionError( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
310 + "{!r} is already part of {!r}".format(new, self) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
311 + ) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
312 + if not new.within(self): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
313 + raise UIComponentInsertionError( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
314 + "{!r} doesn't fit into {!r}".format(new, self) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
315 + ) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
316 + for child in self.children: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
317 + if child.collides(new): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
318 + raise UIComponentInsertionError( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
319 + "{!r} conflicts with {!r}".format(new, child) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
320 + ) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
321 + self.children.add(new) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
322 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
323 + def collides(self, other: "UIComponentBase") -> bool: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
324 + """Return True if ``self`` and ``other`` overlap in any way.""" |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
325 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
326 + return all( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
327 + self._nw_corner.x <= other._se_corner.x, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
328 + self._se_corner.x >= other._nw_corner.x, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
329 + self._nw_corner.y <= other._se_corner.y, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
330 + self._se_corner.y >= other._nw_corner.y, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
331 + ) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
332 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
333 + def within(self, other: "UIComponentBase") -> bool: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
334 + """Return True if ``self`` fits within ``other``.""" |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
335 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
336 + return all( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
337 + other._nw_corner.x >= self._nw_corner.x, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
338 + other._nw_corner.y >= self._nw_corner.y, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
339 + other._se_corner.x <= self._se_corner.x, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
340 + other._se_corner.y <= self._se_corner.y |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
341 + ) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
342 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
343 + def to_sprite(self) -> LedSprite: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
344 + return LedSprite(self.size) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
345 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
346 + # maybe that bool return type could become an enum or a composite: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
347 + def submit_input(self, offset: Position) -> bool: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
348 + return False |
501 | 349 diff --git a/apps/monolight/monolight/ui/components/button.py b/apps/monolight/monolight/ui/components/button.py |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
350 new file mode 100644 |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
351 --- /dev/null |
501 | 352 +++ b/apps/monolight/monolight/ui/components/button.py |
353 @@ -0,0 +1,49 @@ | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
354 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
355 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
356 +# This file is part of lightsd. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
357 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
358 +# lightsd is free software: you can redistribute it and/or modify |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
359 +# it under the terms of the GNU General Public License as published by |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
360 +# the Free Software Foundation, either version 3 of the License, or |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
361 +# (at your option) any later version. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
362 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
363 +# lightsd is distributed in the hope that it will be useful, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
364 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
365 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
366 +# GNU General Public License for more details. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
367 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
368 +# You should have received a copy of the GNU General Public License |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
369 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
370 + |
501 | 371 +from .base import LedSprite, UIComponentBase |
372 +from ...osc import MONOME_LED_OFF, MONOME_LED_ON | |
373 +from ..types import Dimensions, Position | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
374 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
375 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
376 +class Button(UIComponentBase): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
377 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
378 + OFF = 0 |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
379 + ON = 1 |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
380 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
381 + # make the size configurable too? |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
382 + def __init__(self, offset: Position, state: int) -> None: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
383 + self.offset = offset |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
384 + self.state = Button.ON |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
385 + self.children = None |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
386 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
387 + def toggle(self) -> bool: # previous state |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
388 + rv = self.state |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
389 + self.state = not self.state |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
390 + return bool(rv) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
391 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
392 + def to_sprite(self): |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
393 + return LedSprite( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
394 + Dimensions(1, 1), |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
395 + MONOME_LED_ON if self.state is Button.ON else MONOME_LED_OFF, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
396 + ) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
397 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
398 + def submit_input(self, offset: Position) -> bool: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
399 + if self.offset == offset: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
400 + self.toggle() |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
401 + return True |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
402 + return False |
501 | 403 diff --git a/apps/monolight/monolight/ui/components/layer.py b/apps/monolight/monolight/ui/components/layer.py |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
404 new file mode 100644 |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
405 --- /dev/null |
501 | 406 +++ b/apps/monolight/monolight/ui/components/layer.py |
407 @@ -0,0 +1,41 @@ | |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
408 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
409 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
410 +# This file is part of lightsd. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
411 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
412 +# lightsd is free software: you can redistribute it and/or modify |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
413 +# it under the terms of the GNU General Public License as published by |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
414 +# the Free Software Foundation, either version 3 of the License, or |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
415 +# (at your option) any later version. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
416 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
417 +# lightsd is distributed in the hope that it will be useful, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
418 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
419 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
420 +# GNU General Public License for more details. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
421 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
422 +# You should have received a copy of the GNU General Public License |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
423 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
424 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
425 +import monome |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
426 + |
501 | 427 +from .base import UIComponentBase |
428 +from ...osc import MONOME_LED_OFF | |
429 +from ..types import Dimensions | |
430 +from ...types import TimeMonotonic | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
431 + |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
432 + |
501 | 433 +class Layer(UIComponentBase): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
434 + |
501 | 435 + def __init_(self, size: Dimensions): |
436 + self.size = size | |
437 + self.led_buffer = monome.LedBuffer(width=size.width, height=size.height) | |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
438 + |
501 | 439 + def _blit(self, component: UIComponentBase): |
440 + for off_x, off_y, level in component.to_sprite(): | |
441 + self.led_buffer.led_set( | |
442 + component.offset.x + off_x, component.offset.y + off_y, level | |
443 + ) | |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
444 + |
501 | 445 + def render(self, frame_ts: TimeMonotonic) -> None: |
446 + self.led_buffer.led_level_all(MONOME_LED_OFF) | |
447 + for component in self.children: | |
448 + self._blit(component) | |
449 diff --git a/apps/monolight/monolight/ui/grid.py b/apps/monolight/monolight/ui/grid.py | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
450 new file mode 100644 |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
451 --- /dev/null |
501 | 452 +++ b/apps/monolight/monolight/ui/grid.py |
453 @@ -0,0 +1,37 @@ | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
454 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
455 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
456 +# This file is part of lightsd. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
457 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
458 +# lightsd is free software: you can redistribute it and/or modify |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
459 +# it under the terms of the GNU General Public License as published by |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
460 +# the Free Software Foundation, either version 3 of the License, or |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
461 +# (at your option) any later version. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
462 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
463 +# lightsd is distributed in the hope that it will be useful, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
464 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
465 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
466 +# GNU General Public License for more details. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
467 +# |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
468 +# You should have received a copy of the GNU General Public License |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
469 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
470 + |
501 | 471 +from .. import osc |
472 +from .components.layer import Layer | |
473 +from .types import Dimensions, Keypress, Position | |
474 + | |
475 + | |
476 +class MonomeGrid: | |
477 + | |
478 + def __init__(self) -> None: | |
479 + self.size = None # type: Dimensions | |
480 + self.layers = None # z-order, type: List[Layer] | |
481 + self.monome = None # type: osc.MonomeApplication | |
482 + | |
483 + def set_monome(self, grid: osc.MonomeApplication) -> None: | |
484 + self.size = Dimensions(height=grid.height, width=grid.width) | |
485 + self.layers = [Layer(self.size)] | |
486 + self.grid = grid | |
487 + | |
488 + def submit_input(self, x: int, y: int, s: int) -> None: | |
489 + if self.layers: | |
490 + self.layers[-1].submit_input(Keypress(Position(x, y), s)) | |
491 diff --git a/apps/monolight/monolight/ui/types.py b/apps/monolight/monolight/ui/types.py | |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
492 new file mode 100644 |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
493 --- /dev/null |
501 | 494 +++ b/apps/monolight/monolight/ui/types.py |
495 @@ -0,0 +1,57 @@ | |
496 +# Copyright (c) 2016, Louis Opter <louis@opter.org> | |
497 +# | |
498 +# This file is part of lightsd. | |
499 +# | |
500 +# lightsd is free software: you can redistribute it and/or modify | |
501 +# it under the terms of the GNU General Public License as published by | |
502 +# the Free Software Foundation, either version 3 of the License, or | |
503 +# (at your option) any later version. | |
504 +# | |
505 +# lightsd is distributed in the hope that it will be useful, | |
506 +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
507 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
508 +# GNU General Public License for more details. | |
509 +# | |
510 +# You should have received a copy of the GNU General Public License | |
511 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. | |
512 + | |
513 +from typing import NamedTuple | |
514 + | |
515 +from .. import osc | |
516 + | |
517 +_Dimensions = NamedTuple("Dimensions", [("height", int), ("width", int)]) | |
518 +_Position = NamedTuple("Position", [("x", int), ("y", int)]) | |
519 + | |
520 + | |
521 +class Dimensions(_Dimensions): | |
522 + | |
523 + def __repr__(self) -> str: | |
524 + return "height={}, width={}".format(*self) | |
525 + | |
526 + | |
527 +class Position(_Position): | |
528 + | |
529 + def __repr__(self) -> str: | |
530 + return "{}, {}".format(*self) | |
531 + | |
532 +_Keypress = NamedTuple("KeyPress", [ | |
533 + ("position", Position), ("state", osc.MonomeKeyState) | |
534 +]) | |
535 + | |
536 + | |
537 +class Keypress(_Keypress): | |
538 + | |
539 + @property | |
540 + def x(self): | |
541 + return self.position.x | |
542 + | |
543 + @property | |
544 + def y(self): | |
545 + return self.position.y | |
546 + | |
547 + @property | |
548 + def s(self): | |
549 + return self.state.value | |
550 + | |
551 + def __repr__(self) -> str: | |
552 + return "{!r}, {}".format(self.position, self.state.name) | |
553 diff --git a/apps/monolight/monolight/ui/ui.py b/apps/monolight/monolight/ui/ui.py | |
554 new file mode 100644 | |
555 --- /dev/null | |
556 +++ b/apps/monolight/monolight/ui/ui.py | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
557 @@ -0,0 +1,124 @@ |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
558 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
559 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
560 +# This file is part of lightsd. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
561 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
562 +# lightsd is free software: you can redistribute it and/or modify |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
563 +# it under the terms of the GNU General Public License as published by |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
564 +# the Free Software Foundation, either version 3 of the License, or |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
565 +# (at your option) any later version. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
566 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
567 +# lightsd is distributed in the hope that it will be useful, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
568 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
569 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
570 +# GNU General Public License for more details. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
571 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
572 +# You should have received a copy of the GNU General Public License |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
573 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
574 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
575 +import asyncio |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
576 +import monome |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
577 +import logging |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
578 + |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
579 +from typing import ( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
580 + NamedTuple, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
581 +) |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
582 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
583 +from lightsc import LightsClient |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
584 +from lightsc.requests import ( |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
585 + SetLightFromHSBK, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
586 + PowerOff, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
587 + PowerOn, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
588 + PowerToggle, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
589 +) |
501 | 590 +from ..osc import ( |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
591 + MONOME_KEYPRESS_DOWN, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
592 + monome_apply, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
593 +) |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
594 + |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
595 +logger = logging.getLogger("monolight.ui") |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
596 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
597 +_event_queue = None |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
598 + |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
599 +_KeyPress = NamedTuple("_KeyPress", [("x", int), ("y", int), ("state", int)]) |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
600 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
601 +_STOP_SENTINEL = object() |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
602 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
603 + |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
604 +def draw(serialosc: monome.SerialOsc): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
605 + buf = monome.LedBuffer(8, 8) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
606 + buf.led_set(0, 0, 1) |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
607 + for x in range(0, 6): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
608 + buf.led_set(x, 7, 1) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
609 + monome_apply(serialosc, buf.render) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
610 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
611 + |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
612 +def hide(serialosc: monome.SerialOsc): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
613 + monome_apply(serialosc, monome.Monome.led_all, 0) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
614 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
615 + |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
616 +async def start( |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
617 + loop: asyncio.AbstractEventLoop, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
618 + lightsd: LightsClient, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
619 + serialosc: monome.SerialOsc, |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
620 +): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
621 + global _event_queue |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
622 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
623 + _event_queue = asyncio.Queue() |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
624 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
625 + hidden = True |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
626 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
627 + while True: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
628 + keypress = await _event_queue.get() |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
629 + if keypress is _STOP_SENTINEL: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
630 + hide(serialosc) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
631 + _event_queue = None |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
632 + return |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
633 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
634 + if not hidden: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
635 + draw(serialosc) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
636 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
637 + logger.info("keypress: x={}, y={}, state={}".format(*keypress)) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
638 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
639 + if keypress.state != MONOME_KEYPRESS_DOWN: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
640 + continue |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
641 + if keypress.y != 7 and keypress.y != 0: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
642 + continue |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
643 + if keypress.x == 0: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
644 + if keypress.y == 0: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
645 + hidden = not hidden |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
646 + if hidden: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
647 + hide(serialosc) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
648 + continue |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
649 + await lightsd.apply(PowerOff(["*"])) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
650 + if keypress.y != 7: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
651 + continue |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
652 + if keypress.x == 1: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
653 + await lightsd.apply(PowerOn(["*"])) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
654 + elif keypress.x == 2: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
655 + await lightsd.apply(PowerToggle(["neko"])) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
656 + elif keypress.x == 3: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
657 + await lightsd.apply(PowerToggle(["fugu"])) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
658 + elif keypress.x == 4: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
659 + async with lightsd.batch() as batch: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
660 + batch.apply(SetLightFromHSBK( |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
661 + ["#tower"], 37.469443, 1.0, 0.25, 3500, 600 |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
662 + )) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
663 + batch.apply(SetLightFromHSBK( |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
664 + ["fugu", "buzz"], 47.469443, 0.2, 0.2, 3500, 600 |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
665 + )) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
666 + batch.apply(SetLightFromHSBK( |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
667 + ["candle"], 47.469443, 0.2, 0.15, 3500, 600 |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
668 + )) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
669 + batch.apply(PowerOn(["#br"])) |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
670 + elif keypress.x == 5: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
671 + pass |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
672 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
673 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
674 +def stop(): |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
675 + if _event_queue is not None: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
676 + _event_queue.put_nowait(_STOP_SENTINEL) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
677 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
678 + |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
679 +def submit_keypress(x: int, y: int, state: int): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
680 + if _event_queue is not None: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
681 + _event_queue.put_nowait(_KeyPress(x, y, state)) |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
682 diff --git a/apps/monolight/setup.py b/apps/monolight/setup.py |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
683 new file mode 100644 |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
684 --- /dev/null |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
685 +++ b/apps/monolight/setup.py |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
686 @@ -0,0 +1,52 @@ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
687 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
688 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
689 +# This file is part of lighstd. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
690 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
691 +# lighstd is free software: you can redistribute it and/or modify |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
692 +# it under the terms of the GNU General Public License as published by |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
693 +# the Free Software Foundation, either version 3 of the License, or |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
694 +# (at your option) any later version. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
695 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
696 +# lighstd is distributed in the hope that it will be useful, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
697 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
698 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
699 +# GNU General Public License for more details. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
700 +# |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
701 +# You should have received a copy of the GNU General Public License |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
702 +# along with lighstd. If not, see <http://www.gnu.org/licenses/>. |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
703 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
704 +import setuptools |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
705 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
706 +version = "0.0.1.dev0" |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
707 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
708 +setuptools.setup( |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
709 + name="monolight", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
710 + version=version, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
711 + description="A Monome UI to control smart bulbs using lightsd", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
712 + author="Louis Opter", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
713 + author_email="louis@opter.org", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
714 + packages=setuptools.find_packages(exclude=['tests', 'tests.*']), |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
715 + include_package_data=True, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
716 + entry_points={ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
717 + "console_scripts": [ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
718 + "monolight = monolight.cli:main", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
719 + ], |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
720 + }, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
721 + install_requires=[ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
722 + "click~=6.6", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
723 + "pymonome~=0.8.2", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
724 + ], |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
725 + tests_require=[ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
726 + "doubles~=1.1.3", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
727 + "freezegun~=0.3.5", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
728 + "pytest~=3.0", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
729 + ], |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
730 + extras_require={ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
731 + "dev": [ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
732 + "flake8", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
733 + "ipython", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
734 + "pdbpp", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
735 + "pep8", |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
736 + ], |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
737 + }, |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
738 +) |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
739 diff --git a/clients/python/lightsc/README.rst b/clients/python/lightsc/README.rst |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
740 new file mode 100644 |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
741 --- /dev/null |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
742 +++ b/clients/python/lightsc/README.rst |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
743 @@ -0,0 +1,63 @@ |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
744 +A Python client to control your smart bulbs through lightsd |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
745 +=========================================================== |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
746 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
747 +lightsd_ is a daemon (background service) to control your LIFX_ WiFi "smart" |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
748 +bulbs. This package allows you to make RPC calls to lightsd to control your |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
749 +light bulbs from Python. It is built on top of the ``asyncio`` module and |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
750 +requires Python ≥ 3.5: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
751 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
752 +.. code-block:: python |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
753 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
754 + import asyncio |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
755 + import click |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
756 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
757 + from lightsc import LightsView, create_async_lightsd_connection |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
758 + from lightsc.requests import ( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
759 + GetLightState, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
760 + PowerOff, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
761 + PowerOn, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
762 + SetLightFromHSBK, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
763 + ) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
764 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
765 + async def example(url, targets): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
766 + async with create_async_lightsd_connection(url) as client: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
767 + click.echo("Connected to lightsd running at {}".format(client.url)) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
768 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
769 + view = LightsView() |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
770 + view.update(await client.apply(GetLightState(targets)) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
771 + click.echo("Discovered bulbs: {}".format(view)) |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
772 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
773 + transition_ms = 600 |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
774 + red_hsbk = (0., 1., 1., 3500) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
775 + click.echo("Turning all bulbs to red in {}ms...".format(transition_ms)) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
776 + async with client.batch() as batch: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
777 + batch.apply(PowerOn(targets)) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
778 + batch.apply(SetLightFromHSBK(targets, *red_hsbk, transition_ms=transition_ms)) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
779 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
780 + click.echo("Restoring original state") |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
781 + async with client.batch() as batch: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
782 + for b in view.bulbs: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
783 + PowerState = PowerOn if b.power else PowerOff |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
784 + hsbk = (b.h, b.s, b.b, b.k) |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
785 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
786 + batch.apply(PowerState([b.label])) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
787 + batch.apply(SetLightFromHSBK([b.label], *hsbk, transition_ms=transition_ms)) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
788 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
789 + @click.command() |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
790 + @click.option("--lightsd-url", help="supported schemes: tcp+jsonrpc://, unix+jsonrpc://") |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
791 + @click.argument("bulb_targets", nargs=-1, required=True) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
792 + def main(lightsd_url, bulb_targets) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
793 + """This example will turn all your bulbs to red before restoring their |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
794 + original state. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
795 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
796 + If an URL is not provided this script will attempt to connect to |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
797 + lightsd's UNIX socket. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
798 + """ |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
799 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
800 + evl = asyncio.get_event_loop() |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
801 + evl.run_until_complete(evl.create_task(example(lightsd_url, bulb_targets))) |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
802 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
803 +.. _lightsd: https://www.lightsd.io/ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
804 +.. _LIFX: http://lifx.co/ |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
805 + |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
806 +.. vim: set tw=80 spelllang=en spell: |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
807 diff --git a/clients/python/lightsc/lightsc/__init__.py b/clients/python/lightsc/lightsc/__init__.py |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
808 new file mode 100644 |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
809 --- /dev/null |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
810 +++ b/clients/python/lightsc/lightsc/__init__.py |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
811 @@ -0,0 +1,25 @@ |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
812 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
813 +# |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
814 +# This file is part of lightsd. |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
815 +# |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
816 +# lightsd is free software: you can redistribute it and/or modify |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
817 +# it under the terms of the GNU General Public License as published by |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
818 +# the Free Software Foundation, either version 3 of the License, or |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
819 +# (at your option) any later version. |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
820 +# |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
821 +# lightsd is distributed in the hope that it will be useful, |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
822 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
823 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
824 +# GNU General Public License for more details. |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
825 +# |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
826 +# You should have received a copy of the GNU General Public License |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
827 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
493 | 828 + |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
829 +from .client import ( # noqa |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
830 + LightsClient, |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
831 + create_lightsd_connection, |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
832 + create_async_lightsd_connection, |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
833 +) |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
834 +from .view import ( # noqa |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
835 + LightsView, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
836 +) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
837 diff --git a/clients/python/lightsc/lightsc/client.py b/clients/python/lightsc/lightsc/client.py |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
838 new file mode 100644 |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
839 --- /dev/null |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
840 +++ b/clients/python/lightsc/lightsc/client.py |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
841 @@ -0,0 +1,326 @@ |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
842 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
843 +# |
493 | 844 +# This file is part of lightsd. |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
845 +# |
493 | 846 +# lightsd is free software: you can redistribute it and/or modify |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
847 +# it under the terms of the GNU General Public License as published by |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
848 +# the Free Software Foundation, either version 3 of the License, or |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
849 +# (at your option) any later version. |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
850 +# |
493 | 851 +# lightsd is distributed in the hope that it will be useful, |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
852 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
853 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
854 +# GNU General Public License for more details. |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
855 +# |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
856 +# You should have received a copy of the GNU General Public License |
493 | 857 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
858 + | |
859 +import asyncio | |
860 +import functools | |
861 +import json | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
862 +import locale |
493 | 863 +import logging |
864 +import os | |
865 +import urllib | |
866 +import uuid | |
867 + | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
868 +from typing import ( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
869 + Any, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
870 + Callable, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
871 + Dict, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
872 + List, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
873 + NamedTuple, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
874 + Sequence, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
875 +) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
876 +from typing import ( # noqa |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
877 + Tuple, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
878 + Type, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
879 +) |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
880 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
881 +from . import ( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
882 + exceptions, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
883 + requests, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
884 + responses, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
885 + structs, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
886 +) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
887 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
888 +logger = logging.getLogger("lightsd.client") |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
889 + |
493 | 890 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
891 +_JSONRPCMethod = NamedTuple("_JSONRPCMethod", [ |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
892 + ("name", str), |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
893 + ("map_result", Callable[[Any], responses.Response]), |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
894 +]) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
895 +_JSONRPC_API = { |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
896 + requests.GetLightState: _JSONRPCMethod( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
897 + name="get_light_state", |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
898 + map_result=lambda result: responses.LightsState([ |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
899 + structs.LightBulb( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
900 + b["label"], b["power"], *b["hsbk"], tags=b["tags"] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
901 + ) for b in result |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
902 + ]) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
903 + ), |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
904 + requests.SetLightFromHSBK: _JSONRPCMethod( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
905 + name="set_light_from_hsbk", |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
906 + map_result=lambda result: responses.Bool(result) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
907 + ), |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
908 + requests.PowerOn: _JSONRPCMethod( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
909 + name="power_on", |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
910 + map_result=lambda result: responses.Bool(result) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
911 + ), |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
912 + requests.PowerOff: _JSONRPCMethod( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
913 + name="power_off", |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
914 + map_result=lambda result: responses.Bool(result) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
915 + ), |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
916 + requests.PowerToggle: _JSONRPCMethod( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
917 + name="power_toggle", |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
918 + map_result=lambda result: responses.Bool(result) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
919 + ), |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
920 +} # type: Dict[Type[requests.RequestClass], _JSONRPCMethod] |
493 | 921 + |
922 + | |
495
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
923 +class _JSONRPCCall: |
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
924 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
925 + def __init__( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
926 + self, method: str, params: Sequence[Any], timeout: int = None |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
927 + ) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
928 + self.id = str(uuid.uuid4()) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
929 + self.method = method |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
930 + self.params = params |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
931 + self.timeout = timeout |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
932 + self.timeout_handle = None # type: asyncio.Handle |
495
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
933 + self.request = { |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
934 + "id": self.id, |
495
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
935 + "jsonrpc": "2.0", |
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
936 + "method": method, |
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
937 + "params": params, |
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
938 + } |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
939 + self.response = asyncio.Future() # type: asyncio.futures.Future |
495
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
940 + |
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
941 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
942 +class AsyncJSONRPCLightsClient: |
493 | 943 + |
944 + READ_SIZE = 8192 | |
945 + TIMEOUT = 2 # seconds | |
946 + ENCODING = "utf-8" | |
947 + | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
948 + def __init__( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
949 + self, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
950 + url: str, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
951 + encoding: str = ENCODING, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
952 + timeout: int = TIMEOUT, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
953 + read_size: int = READ_SIZE, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
954 + loop: asyncio.AbstractEventLoop = None |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
955 + ) -> None: |
493 | 956 + self.url = url |
957 + self.encoding = encoding | |
958 + self.timeout = timeout | |
959 + self.read_size = read_size | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
960 + self._listen_task = None # type: asyncio.Task |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
961 + self._pending_calls = {} # type: Dict[str, _JSONRPCCall] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
962 + self._reader = None # type: asyncio.StreamReader |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
963 + self._writer = None # type: asyncio.StreamWriter |
493 | 964 + self._loop = loop or asyncio.get_event_loop() |
965 + | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
966 + def _handle_response( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
967 + self, id: str, response: Any, timeout: bool = False |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
968 + ) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
969 + call = self._pending_calls.pop(id) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
970 + if timeout is True: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
971 + call.response.set_exception(exceptions.LightsClientTimeoutError()) |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
972 + return |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
973 + call.timeout_handle.cancel() |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
974 + call.response.set_result(response) |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
975 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
976 + async def _jsonrpc_execute( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
977 + self, pipeline: List[_JSONRPCCall] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
978 + ) -> Dict[str, Any]: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
979 + if not pipeline: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
980 + return {} |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
981 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
982 + requests = [call.request for call in pipeline] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
983 + for req in requests: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
984 + logger.info("Request {id}: {method}({params})".format(**req)) |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
985 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
986 + payload = json.dumps(requests[0] if len(requests) == 1 else requests) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
987 + self._writer.write(payload.encode(self.encoding, "surrogateescape")) |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
988 + |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
989 + await self._writer.drain() |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
990 + |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
991 + for call in pipeline: |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
992 + call.timeout_handle = self._loop.call_later( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
993 + call.timeout, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
994 + functools.partial( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
995 + self._handle_response, call.id, response=None, timeout=True |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
996 + ) |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
997 + ) |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
998 + self._pending_calls[call.id] = call |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
999 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1000 + futures = [call.response for call in pipeline] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1001 + await asyncio.wait(futures, loop=self._loop) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1002 + return {call.id: call.response.result() for call in pipeline} |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1003 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1004 + async def close(self) -> None: |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1005 + if self._listen_task is not None: |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1006 + self._listen_task.cancel() |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1007 + self._listen_task = None |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1008 + |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1009 + if self._writer is not None: |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1010 + if self._writer.can_write_eof(): |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1011 + self._writer.write_eof() |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1012 + self._writer.close() |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1013 + if self._reader is not None: |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1014 + self._reader.feed_eof() |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1015 + if not self._reader.at_eof(): |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1016 + await self._reader.read() |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1017 + self._reader = self._writer = None |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1018 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1019 + self._pending_calls = {} |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1020 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1021 + async def _reconnect(self) -> None: |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1022 + await self.close() |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1023 + await self.connect() |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1024 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1025 + async def apply(self, req: requests.Request, timeout: int = TIMEOUT): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1026 + method = _JSONRPC_API[req.__class__] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1027 + call = _JSONRPCCall(method.name, req.params, timeout=timeout) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1028 + reps_by_id = await self._jsonrpc_execute([call]) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1029 + return method.map_result(reps_by_id[call.id]) |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1030 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1031 + async def connect(self) -> None: |
493 | 1032 + parts = urllib.parse.urlparse(self.url) |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1033 + if parts.scheme == "unix+jsonrpc": |
493 | 1034 + path = os.path.join(parts.netloc, parts.path).rstrip(os.path.sep) |
1035 + open_connection = functools.partial( | |
1036 + asyncio.open_unix_connection, path | |
1037 + ) | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1038 + elif parts.scheme == "tcp+jsonrpc": |
493 | 1039 + open_connection = functools.partial( |
1040 + asyncio.open_connection, parts.hostname, parts.port | |
1041 + ) | |
1042 + else: | |
1043 + raise ValueError("Unsupported url {}".format(self.url)) | |
1044 + | |
1045 + try: | |
1046 + self._reader, self._writer = await asyncio.wait_for( | |
1047 + open_connection(limit=self.read_size, loop=self._loop), | |
1048 + self.timeout, | |
1049 + loop=self._loop, | |
1050 + ) | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1051 + self._listen_task = self._loop.create_task(self._listen()) |
493 | 1052 + except Exception: |
1053 + logger.error("Couldn't open {}".format(self.url)) | |
1054 + raise | |
1055 + | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1056 + async def _listen(self) -> None: |
493 | 1057 + buf = bytearray() |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1058 + |
493 | 1059 + while True: |
1060 + chunk = await self._reader.read(self.READ_SIZE) | |
1061 + if not len(chunk): # EOF, reconnect | |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1062 + logger.info("EOF, reconnecting...") |
493 | 1063 + await self._reconnect() |
1064 + return | |
1065 + | |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1066 + buf += chunk |
493 | 1067 + try: |
1068 + json.loads(buf.decode(self.encoding, "ignore")) | |
1069 + except Exception: | |
1070 + continue | |
1071 + response = json.loads(buf.decode(self.encoding, "surrogateescape")) | |
1072 + buf = bytearray() | |
1073 + | |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1074 + batch = response if isinstance(response, list) else [response] |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1075 + for response in batch: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1076 + id = response["id"] |
495
e3a86bd3a01a
i don't think this works
Louis Opter <kalessin@kalessin.fr>
parents:
494
diff
changeset
|
1077 + |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1078 + error = response.get("error") |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1079 + if error is not None: |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1080 + code = error.get("code") |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1081 + msg = error.get("msg") |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1082 + logger.warning("Error {}: {} - {}".format(id, code, msg)) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1083 + call = self._pending_calls.pop(id) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1084 + ex = exceptions.LightsClientError(msg) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1085 + call.response.set_exception(ex) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1086 + call.timeout_handle.cancel() |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1087 + continue |
493 | 1088 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1089 + logger.info("Response {}: {}".format(id, response["result"])) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1090 + self._handle_response(id, response["result"]) |
493 | 1091 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1092 + def batch(self) -> "_AsyncJSONRPCBatch": |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1093 + return _AsyncJSONRPCBatch(self) |
493 | 1094 + |
1095 + | |
500
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
1096 +# LightsClient could eventually point to a different but api-compatible class |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
1097 +# someday: |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
1098 +LightsClient = AsyncJSONRPCLightsClient |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
1099 + |
d250169c1a69
wip, completely break monolight again
Louis Opter <kalessin@kalessin.fr>
parents:
499
diff
changeset
|
1100 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1101 +class _AsyncJSONRPCBatch: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1102 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1103 + def __init__(self, client: AsyncJSONRPCLightsClient) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1104 + self.responses = None # type: Tuple[responses.Response, ...] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1105 + self._client = client |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1106 + self._batch = [] # type: List[_JSONRPCCall] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1107 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1108 + async def __aenter__(self) -> "_AsyncJSONRPCBatch": |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1109 + return self |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1110 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1111 + async def __aexit__(self, exc_type, exc_val, exc_tb): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1112 + if exc_type is None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1113 + reps_by_id = await self._client._jsonrpc_execute(self._batch) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1114 + self.responses = ( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1115 + _JSONRPC_API[req.__class__].map_result(reps_by_id[req.id]) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1116 + for req in self._batch |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1117 + ) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1118 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1119 + def apply( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1120 + self, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1121 + req: requests.Request, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1122 + timeout: int = AsyncJSONRPCLightsClient.TIMEOUT |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1123 + ) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1124 + method = _JSONRPC_API[req.__class__] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1125 + call = _JSONRPCCall(method.name, req.params, timeout=timeout) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1126 + self._batch.append(call) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1127 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1128 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1129 +async def get_lightsd_unix_socket_async( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1130 + loop: asyncio.AbstractEventLoop = None, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1131 +) -> str: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1132 + process = await asyncio.create_subprocess_exec( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1133 + "lightsd", "--rundir", |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1134 + stdout=asyncio.subprocess.PIPE, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1135 + stderr=asyncio.subprocess.DEVNULL, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1136 + loop=loop, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1137 + ) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1138 + stdout, stderr = await process.communicate() |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1139 + stdout = stdout.decode(locale.getpreferredencoding()).strip() |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1140 + if process.returncode == 0 and stdout: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1141 + lightsdrundir = stdout |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1142 + else: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1143 + lightsdrundir = "build" |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1144 + logger.warning( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1145 + "Couldn't infer lightsd's runtime directory, is " |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1146 + "lightsd installed? Trying {}…".format(lightsdrundir) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1147 + ) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1148 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1149 + return "unix+jsonrpc://" + os.path.join(lightsdrundir, "socket") |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1150 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1151 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1152 +async def create_async_lightsd_connection( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1153 + url: str = None, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1154 + loop: asyncio.AbstractEventLoop = None |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1155 +) -> AsyncJSONRPCLightsClient: |
493 | 1156 + if loop is None: |
1157 + loop = asyncio.get_event_loop() | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1158 + if url is None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1159 + url = await get_lightsd_unix_socket_async(loop) |
493 | 1160 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1161 + c = AsyncJSONRPCLightsClient(url, loop=loop) |
494
8f70d5539e5c
Organize the code a bit better
Louis Opter <kalessin@kalessin.fr>
parents:
493
diff
changeset
|
1162 + await c.connect() |
8f70d5539e5c
Organize the code a bit better
Louis Opter <kalessin@kalessin.fr>
parents:
493
diff
changeset
|
1163 + return c |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1164 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1165 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1166 +def create_lightsd_connection(url: str = None) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1167 + raise NotImplementedError("Sorry, no synchronous client available yet") |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1168 diff --git a/clients/python/lightsc/lightsc/exceptions.py b/clients/python/lightsc/lightsc/exceptions.py |
493 | 1169 new file mode 100644 |
1170 --- /dev/null | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1171 +++ b/clients/python/lightsc/lightsc/exceptions.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1172 @@ -0,0 +1,28 @@ |
493 | 1173 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1174 +# |
493 | 1175 +# This file is part of lightsd. |
1176 +# | |
1177 +# lightsd is free software: you can redistribute it and/or modify | |
1178 +# it under the terms of the GNU General Public License as published by | |
1179 +# the Free Software Foundation, either version 3 of the License, or | |
1180 +# (at your option) any later version. | |
1181 +# | |
1182 +# lightsd is distributed in the hope that it will be useful, | |
1183 +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
1184 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
1185 +# GNU General Public License for more details. | |
1186 +# | |
1187 +# You should have received a copy of the GNU General Public License | |
1188 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. | |
1189 + | |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1190 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1191 +class LightsError(Exception): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1192 + pass |
493 | 1193 + |
1194 + | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1195 +class LightsClientError(LightsError): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1196 + pass |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1197 + |
493 | 1198 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1199 +class LightsClientTimeoutError(LightsClientError): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1200 + pass |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1201 diff --git a/clients/python/lightsc/lightsc/requests.py b/clients/python/lightsc/lightsc/requests.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1202 new file mode 100644 |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1203 --- /dev/null |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1204 +++ b/clients/python/lightsc/lightsc/requests.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1205 @@ -0,0 +1,65 @@ |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1206 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1207 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1208 +# This file is part of lightsd. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1209 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1210 +# lightsd is free software: you can redistribute it and/or modify |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1211 +# it under the terms of the GNU General Public License as published by |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1212 +# the Free Software Foundation, either version 3 of the License, or |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1213 +# (at your option) any later version. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1214 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1215 +# lightsd is distributed in the hope that it will be useful, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1216 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1217 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1218 +# GNU General Public License for more details. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1219 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1220 +# You should have received a copy of the GNU General Public License |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1221 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1222 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1223 +from typing import ( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1224 + Any, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1225 + List, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1226 + TypeVar, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1227 +) |
493 | 1228 + |
1229 + | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1230 +class Request: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1231 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1232 + def __init__(self, *args: Any) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1233 + self.params = args |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1234 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1235 +RequestClass = TypeVar("RequestClass", bound=Request) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1236 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1237 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1238 +class SetLightFromHSBK(Request): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1239 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1240 + def __init__( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1241 + self, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1242 + targets: List[str], |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1243 + h: float, s: float, b: float, k: int, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1244 + transition_ms: int |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1245 + ) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1246 + Request.__init__(self, targets, h, s, b, k, transition_ms) |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1247 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1248 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1249 +class GetLightState(Request): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1250 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1251 + def __init__(self, targets: List[str]) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1252 + Request.__init__(self, targets) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1253 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1254 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1255 +class PowerOff(Request): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1256 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1257 + def __init__(self, targets: List[str]) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1258 + Request.__init__(self, targets) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1259 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1260 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1261 +class PowerOn(Request): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1262 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1263 + def __init__(self, targets: List[str]) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1264 + Request.__init__(self, targets) |
493 | 1265 + |
1266 + | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1267 +class PowerToggle(Request): |
493 | 1268 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1269 + def __init__(self, targets: List[str]) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1270 + Request.__init__(self, targets) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1271 diff --git a/clients/python/lightsc/lightsc/responses.py b/clients/python/lightsc/lightsc/responses.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1272 new file mode 100644 |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1273 --- /dev/null |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1274 +++ b/clients/python/lightsc/lightsc/responses.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1275 @@ -0,0 +1,41 @@ |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1276 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1277 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1278 +# This file is part of lightsd. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1279 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1280 +# lightsd is free software: you can redistribute it and/or modify |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1281 +# it under the terms of the GNU General Public License as published by |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1282 +# the Free Software Foundation, either version 3 of the License, or |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1283 +# (at your option) any later version. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1284 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1285 +# lightsd is distributed in the hope that it will be useful, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1286 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1287 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1288 +# GNU General Public License for more details. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1289 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1290 +# You should have received a copy of the GNU General Public License |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1291 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1292 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1293 +from typing import ( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1294 + List, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1295 + TypeVar, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1296 +) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1297 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1298 +from . import structs |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1299 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1300 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1301 +class Response: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1302 + pass |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1303 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1304 +ResponseClass = TypeVar("ResponseClass", bound=Response) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1305 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1306 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1307 +class Bool(Response): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1308 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1309 + def __init__(self, bool: bool) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1310 + self.value = bool |
496
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1311 + |
08ad69e0a7a7
get things working in a good shape
Louis Opter <kalessin@kalessin.fr>
parents:
495
diff
changeset
|
1312 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1313 +class LightsState(Response): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1314 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1315 + def __init__(self, bulbs: List[structs.LightBulb]) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1316 + self.bulbs = bulbs |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1317 diff --git a/clients/python/lightsc/lightsc/structs.py b/clients/python/lightsc/lightsc/structs.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1318 new file mode 100644 |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1319 --- /dev/null |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1320 +++ b/clients/python/lightsc/lightsc/structs.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1321 @@ -0,0 +1,42 @@ |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1322 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1323 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1324 +# This file is part of lightsd. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1325 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1326 +# lightsd is free software: you can redistribute it and/or modify |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1327 +# it under the terms of the GNU General Public License as published by |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1328 +# the Free Software Foundation, either version 3 of the License, or |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1329 +# (at your option) any later version. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1330 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1331 +# lightsd is distributed in the hope that it will be useful, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1332 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1333 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1334 +# GNU General Public License for more details. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1335 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1336 +# You should have received a copy of the GNU General Public License |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1337 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1338 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1339 +from typing import ( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1340 + List, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1341 +) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1342 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1343 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1344 +class Struct: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1345 + pass |
493 | 1346 + |
1347 + | |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1348 +class LightBulb(Struct): |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1349 + |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1350 + def __init__( |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1351 + self, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1352 + label: str, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1353 + power: bool, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1354 + h: float, s: float, b: float, k: int, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1355 + tags: List[str] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1356 + ) -> None: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1357 + self.label = label |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1358 + self.power = power |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1359 + self.h = h |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1360 + self.s = s |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1361 + self.b = b |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1362 + self.k = k |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1363 + self.tags = tags |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1364 diff --git a/clients/python/lightsc/lightsc/view.py b/clients/python/lightsc/lightsc/view.py |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1365 new file mode 100644 |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1366 --- /dev/null |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1367 +++ b/clients/python/lightsc/lightsc/view.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1368 @@ -0,0 +1,32 @@ |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1369 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1370 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1371 +# This file is part of lightsd. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1372 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1373 +# lightsd is free software: you can redistribute it and/or modify |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1374 +# it under the terms of the GNU General Public License as published by |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1375 +# the Free Software Foundation, either version 3 of the License, or |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1376 +# (at your option) any later version. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1377 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1378 +# lightsd is distributed in the hope that it will be useful, |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1379 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1380 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1381 +# GNU General Public License for more details. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1382 +# |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1383 +# You should have received a copy of the GNU General Public License |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1384 +# along with lightsd. If not, see <http://www.gnu.org/licenses/>. |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1385 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1386 +import pprint |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1387 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1388 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1389 +class LightsView: |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1390 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1391 + def __init__(self): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1392 + self.bulbs = [] |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1393 + self.bulbs_by_label = {} |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1394 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1395 + def __str__(self): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1396 + return pprint.pformat(self.bulbs_by_label) |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1397 + |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1398 + def update(self, lights_state): |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1399 + self.bulbs = lights_state.bulbs |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1400 + self.bulbs_by_label = {b.label for b in lights_state.bulbs.items()} |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1401 diff --git a/clients/python/lightsc/setup.py b/clients/python/lightsc/setup.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1402 new file mode 100644 |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1403 --- /dev/null |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1404 +++ b/clients/python/lightsc/setup.py |
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1405 @@ -0,0 +1,53 @@ |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1406 +# Copyright (c) 2016, Louis Opter <louis@opter.org> |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1407 +# |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1408 +# This file is part of lighstd. |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1409 +# |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1410 +# lighstd is free software: you can redistribute it and/or modify |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1411 +# it under the terms of the GNU General Public License as published by |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1412 +# the Free Software Foundation, either version 3 of the License, or |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1413 +# (at your option) any later version. |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1414 +# |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1415 +# lighstd is distributed in the hope that it will be useful, |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1416 +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1417 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1418 +# GNU General Public License for more details. |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1419 +# |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1420 +# You should have received a copy of the GNU General Public License |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1421 +# along with lighstd. If not, see <http://www.gnu.org/licenses/>. |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1422 + |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1423 +import setuptools |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1424 + |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1425 +version = "0.0.1.dev0" |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1426 + |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1427 +with open("README.rst", "r") as fp: |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1428 + long_description = fp.read() |
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1429 + |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1430 +setuptools.setup( |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1431 + name="lightsc", |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1432 + version=version, |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1433 + description="A client to interact with lightsd", |
498
ada36e135d0d
Wip, break things appart
Louis Opter <kalessin@kalessin.fr>
parents:
496
diff
changeset
|
1434 + long_description=long_description, |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1435 + author="Louis Opter", |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1436 + author_email="louis@opter.org", |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1437 + packages=setuptools.find_packages(exclude=['tests', 'tests.*']), |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1438 + include_package_data=True, |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1439 + entry_points={ |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1440 + "console_scripts": [], |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1441 + }, |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1442 + install_requires=[], |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1443 + tests_require=[ |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1444 + "doubles~=1.1.3", |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1445 + "freezegun~=0.3.5", |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1446 + "pytest~=3.0", |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1447 + ], |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1448 + extras_require={ |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1449 + "dev": [ |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1450 + "flake8", |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1451 + "mypy-lang", |
493 | 1452 + "ipython", |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1453 + "pdbpp", |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1454 + "pep8", |
499
2da15caf4d44
Get monolight to work again with the refactored client
Louis Opter <kalessin@kalessin.fr>
parents:
498
diff
changeset
|
1455 + "typed-ast", |
491
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1456 + ], |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1457 + }, |
6b153374b871
start this python bridge between a monome and lightsd
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1458 +) |