Mercurial > code > home > repos > light9
changeset 2208:091909b4b727
seems kind of important that effecteval return DeviceSettings, not more EffectSettings
author | drewp@bigasterisk.com |
---|---|
date | Mon, 22 May 2023 01:08:31 -0700 |
parents | 0ff5adb554ba |
children | 449dfd8a0f40 |
files | light9/collector/collector.py light9/collector/service.py light9/effect/effecteval.py light9/effect/effecteval_test.py |
diffstat | 4 files changed, 48 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/light9/collector/collector.py Mon May 22 01:06:51 2023 -0700 +++ b/light9/collector/collector.py Mon May 22 01:08:31 2023 -0700 @@ -157,9 +157,9 @@ del self.lastRequest[clientSession] # todo: move to settings.py - def resolvedSettingsDict(self, settingsList: List[DeviceSetting]) -> Dict[Tuple[DeviceUri, DeviceAttr], VTUnion]: + def _resolvedSettingsDict(self, settingsList: DeviceSettings) -> Dict[Tuple[DeviceUri, DeviceAttr], VTUnion]: out: Dict[Tuple[DeviceUri, DeviceAttr], VTUnion] = {} - for devUri, devAttr, val in settingsList: + for devUri, devAttr, val in settingsList.asList(): if (devUri, devAttr) in out: existingVal = out[(devUri, devAttr)] out[(devUri, devAttr)] = resolve(self._deviceType[devUri], devAttr, [existingVal, val])
--- a/light9/collector/service.py Mon May 22 01:06:51 2023 -0700 +++ b/light9/collector/service.py Mon May 22 01:08:31 2023 -0700 @@ -57,7 +57,7 @@ async def PutAttrs(collector: Collector, request): with STAT_SETATTR.time(): - client, clientSession, settings, sendTime = parseJsonMessage(await request.body()) + client, clientSession, settings, sendTime = parseJsonMessage(collector.graph, await request.body()) collector.setAttrs(client, clientSession, settings, sendTime) return Response('', status_code=202)
--- a/light9/effect/effecteval.py Mon May 22 01:06:51 2023 -0700 +++ b/light9/effect/effecteval.py Mon May 22 01:08:31 2023 -0700 @@ -12,7 +12,7 @@ from webcolors import hex_to_rgb, rgb_to_hex from light9.effect.scale import scale -from light9.effect.settings import BareEffectSettings, EffectSettings +from light9.effect.settings import BareEffectSettings, DeviceSettings, EffectSettings from light9.effect.simple_outputs import SimpleOutputs from light9.namespaces import DEV, L9 from light9.newtypes import (DeviceAttr, DeviceUri, EffectAttr, EffectClass, VTUnion) @@ -80,19 +80,21 @@ effect: EffectClass simpleOutputs: SimpleOutputs - def outputFromEffect(self, effectSettings: BareEffectSettings, songTime: float, noteTime: float) -> Tuple[EffectSettings, Dict]: + def outputFromEffect(self, effectSettings: BareEffectSettings, songTime: float, noteTime: float) -> Tuple[DeviceSettings, Dict]: """ From effect attr settings, like strength=0.75, to output device settings like light1/bright=0.72;light2/bright=0.78. This runs the effect code. """ + # todo: what does the next comment line mean? # both callers need to apply note overrides + strength = float(effectSettings.s[EffectAttr(L9['strength'])]) if strength <= 0: - return EffectSettings(self.graph, []), {'zero': True} + return DeviceSettings(self.graph, []), {'zero': True} report = {} - out: Dict[Tuple[DeviceUri, DeviceAttr], VTUnion] = {} # (dev, attr): value + out: Dict[Tuple[DeviceUri, DeviceAttr], VTUnion] = {} out.update(self.simpleOutputs.values(self.effect, strength, effectSettings.s.get(EffectAttr(L9['colorScale']), None))) @@ -106,7 +108,7 @@ out.update(func(effectSettings, strength, songTime, noteTime)) outList = [(d, a, v) for (d, a), v in out.items()] - return EffectSettings(self.graph, outList), report + return DeviceSettings(self.graph, outList), report def effect_Curtain(effectSettings, strength, songTime, noteTime):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/light9/effect/effecteval_test.py Mon May 22 01:08:31 2023 -0700 @@ -0,0 +1,38 @@ +import time +import unittest + +from freezegun import freeze_time +from light9.effect.effecteval import EffectEval +from light9.effect.settings import BareEffectSettings, DeviceSettings, EffectSettings +from light9.effect.simple_outputs import SimpleOutputs +from rdflib import Namespace + +from light9.collector.collector import Collector +from light9.collector.output import Output +from light9.collector.weblisteners import WebListeners +from light9.mock_syncedgraph import MockSyncedGraph +from light9.namespaces import DEV, L9 +from light9.newtypes import (ClientSessionType, ClientType, DeviceAttr, DeviceUri, EffectAttr, EffectClass, HexColor, UnixTime) + +PREFIX = ''' + @prefix : <http://light9.bigasterisk.com/> . + @prefix dev: <http://light9.bigasterisk.com/device/> . +''' + +THEATER = ''' + + :effectClass1 a :EffectClass . +#add light to here +''' +effectClass1 = EffectClass(L9['effectClass1']) + + +class TestEffectEval: + + def test_scalesColors(self): + g = MockSyncedGraph(THEATER) + so = SimpleOutputs(g) + ee = EffectEval(g, effectClass1, so) + s = BareEffectSettings(s={EffectAttr(L9['strength']): 0.5}) + ds,report = ee.outputFromEffect(s, songTime=0, noteTime=0) + assert ds == DeviceSettings(g, [(DeviceUri(L9['light1']), DeviceAttr(L9['color']), HexColor('#888888'))])