Mercurial > code > home > repos > light9
changeset 2201:03d2f8c50a34
type fixes
author | drewp@bigasterisk.com |
---|---|
date | Mon, 22 May 2023 01:00:47 -0700 |
parents | e5fceabc6909 |
children | 54f4f5158ddf |
files | light9/effect/simple_outputs.py |
diffstat | 1 files changed, 13 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/light9/effect/simple_outputs.py Mon May 22 00:59:44 2023 -0700 +++ b/light9/effect/simple_outputs.py Mon May 22 01:00:47 2023 -0700 @@ -1,6 +1,7 @@ import logging import traceback -from typing import Any, Dict, List, Tuple +from typing import Any, Dict, List, Tuple, cast +from light9.newtypes import DeviceAttr, DeviceUri, EffectUri, VTUnion from light9.typedgraph import typedValue from rdflib import URIRef @@ -15,28 +16,29 @@ """ Watches graph for effects that are just fading output attrs. Call `values` to get (dev,attr):value settings. + + The alternative to 'simple' is 'custom code' (see effecteval.py) """ def __init__(self, graph): self.graph = graph # effect : [(dev, attr, value, isScaled)] - self.effectOutputs: Dict[URIRef, List[Tuple[URIRef, URIRef, Any, bool]]] = {} + self.effectOutputs: Dict[EffectUri, List[Tuple[DeviceUri, DeviceAttr, VTUnion, bool]]] = {} self.graph.addHandler(self.updateEffectsFromGraph) def updateEffectsFromGraph(self): - self.effectOutputs = {} + self.effectOutputs.clear() for effect in self.graph.subjects(RDF.type, L9['Effect']): log.debug(f' {effect=}') - settings = [] + settings:List[Tuple[DeviceUri, DeviceAttr, VTUnion, bool]] = [] for setting in self.graph.objects(effect, L9['setting']): - settingValues = dict(self.graph.predicate_objects(setting)) try: - d = settingValues.get(L9['device'], None) - a = settingValues.get(L9['deviceAttr'], None) - v = settingValues.get(L9['value'], None) - sv = settingValues.get(L9['scaledValue'], None) + d = typedValue(DeviceUri, self.graph, setting, L9['device']) + a = typedValue(DeviceAttr, self.graph, setting, L9['deviceAttr']) + v = typedValue(VTUnion | None, self.graph, setting, L9['value']) + sv = typedValue(VTUnion|None, self.graph, setting, L9['scaledValue']) if not (bool(v) ^ bool(sv)): raise NotImplementedError('no value for %s' % setting) if d is None: @@ -47,7 +49,8 @@ traceback.print_exc() continue - settings.append((d, a, v if v is not None else sv, bool(sv))) + settingValue = cast(VTUnion, v if v is not None else sv) + settings.append((d, a, settingValue, bool(sv))) log.debug(f' effect {effect} has {settings=}') if settings: self.effectOutputs[effect] = settings