improve state merger, always override lists

This commit is contained in:
2021-04-06 01:05:59 +02:00
parent f4c66d5b92
commit 9b3815739e
2 changed files with 24 additions and 6 deletions

View File

@@ -135,8 +135,10 @@ def set_immidiate(framecount, channels, update, params):
async def handle_state_change(old, new):
global effect_chain
global framecount
effect_chain = deserialize_chain(new["chain"])
await state.mutate(serialize_internal_state())
deserialized = deserialize_chain(new["chain"])
effect_chain = deserialized
serialized = serialize_internal_state()
await state.mutate(serialized)
async def main(target_ips):
global effect_chain

View File

@@ -1,8 +1,10 @@
import asyncio
import copy
from deepmerge import always_merger
import time
from random import random
from deepmerge import always_merger, Merger
STATE = {"initialized": 0}
STATE = {"initialized": 0, "generation": "invalid"}
ON_INPUT_CALLBACKS = []
ON_CHANGE_CALLBACKS = []
@@ -21,12 +23,23 @@ def register_on_input_callback(callback):
def unregister_on_input_callback(callback):
ON_INPUT_CALLBACK = [ x for x in ON_INPUT_CALLBACKS if x != callback ]
# TODO: FIX ENTRIES HERE BY UNIQUE EFFECT ID OR SOMETHING
async def mutate(delta):
global STATE
my_merger = Merger(
[
(list, ["override"]),
(dict, ["merge"])
],
["override"],
["override"]
)
old_state = copy.deepcopy(STATE)
STATE = always_merger.merge(STATE, delta)
STATE = my_merger.merge(STATE, delta)
STATE["generation"] = calculate_checksum()
for callback in ON_CHANGE_CALLBACKS:
await callback(old_state, delta)
await callback(old_state, STATE)
async def propagate(delta):
global STATE
@@ -38,6 +51,9 @@ def get_data():
global STATE
return STATE
def calculate_checksum():
return f"{time.time()}-${random()}"
async def inc_initialized():
global STATE
await mutate({"initialized": STATE["initialized"]+1 })