def test_populate_changes_status_removed(): """Regression test for https://github.com/Lightning-AI/lightning/issues/342.""" last_state = { "vars": {}, "calls": {}, "flows": {}, "works": { "work": { "vars": {}, "calls": { "latest_call_hash": "run:fe3f", "run:fe3f": { "statuses": [ {"stage": "requesting", "message": None, "reason": None, "timestamp": 1}, {"stage": "starting", "message": None, "reason": None, "timestamp": 2}, {"stage": "requesting", "message": None, "reason": None, "timestamp": 3}, ], }, }, "changes": {}, }, }, "changes": {}, } new_state = deepcopy(last_state) call = new_state["works"]["work"]["calls"]["run:fe3f"] call["statuses"] = call["statuses"][:-1] # pretend that a status was removed from the list new_state_before = deepcopy(new_state) new_state = LightningApp.populate_changes(last_state, new_state) assert new_state == new_state_before
def test_populate_changes(): class WorkA(LightningWork): def __init__(self): super().__init__() self.counter = 0 def run(self): pass class A(LightningFlow): def __init__(self): super().__init__() self.work = WorkA() def run(self): pass flow_a = A() flow_state = flow_a.state work_state = flow_a.work.state flow_a.work.counter = 1 work_state_2 = flow_a.work.state delta = Delta(DeepDiff(work_state, work_state_2)) delta = _delta_to_appstate_delta(flow_a, flow_a.work, delta) new_flow_state = LightningApp.populate_changes(flow_state, flow_state + delta) flow_a.set_state(new_flow_state) assert flow_a.work.counter == 1 assert new_flow_state["works"]["work"]["changes"] == {"counter": {"from": 0, "to": 1}} assert flow_a.work._changes == {"counter": {"from": 0, "to": 1}}