Several sude/*.json schedules can exist on disk; only one runs at a time, chosen by a client Load. Sud no longer takes a path at all - it starts empty (EMPTY_SUD) and the server config no longer names a specific schedule file, removing the implicit link to sud_0010.json in particular. Reading/writing sude/*.json is now entirely the client's job (e.g. the GUI's Load/Save file dialogs); the server's Sud only ever holds whatever was last Load()ed, in memory, until replaced or the server restarts. Updates demo_sud.py/demo_sud_save_load.py to construct an empty Sud() and load() a schedule explicitly, matching the new constructor.
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
import json
|
|
|
|
from components.sud import Sud, SudState
|
|
|
|
# Console-only walkthrough of Sud.save()/load() (no plot - there's no
|
|
# numeric data here, just JSON plumbing). load()/save() are purely
|
|
# in-memory - Sud itself never reads or writes anything under sude/.
|
|
|
|
if __name__ == '__main__':
|
|
sud = Sud()
|
|
print(f"Starts out empty: '{sud.name}', {len(sud.schedule)} steps")
|
|
|
|
with open("sude/sud_0010.json") as f:
|
|
doc = json.load(f)
|
|
assert sud.load(doc) is True
|
|
print(f"Loaded '{sud.name}', {len(sud.schedule)} steps")
|
|
|
|
saved = sud.save()
|
|
assert saved['Name'] == sud.name
|
|
print("save() returned the running document")
|
|
|
|
sud.state = SudState.RAMPING
|
|
assert sud.load(saved) is False
|
|
print("load() refused while RAMPING")
|
|
|
|
sud.state = SudState.IDLE
|
|
saved['Name'] = 'Sud-Renamed'
|
|
saved['steps'][0]['descr'] = 'Edited step'
|
|
assert sud.load(saved) is True
|
|
assert sud.name == 'Sud-Renamed'
|
|
assert sud.schedule[0]['descr'] == 'Edited step'
|
|
assert sud.state == SudState.IDLE
|
|
print("load() applied the edit, purely in memory")
|
|
|
|
with open("sude/sud_0010.json") as f:
|
|
on_disk = json.load(f)
|
|
assert on_disk['Name'] != 'Sud-Renamed'
|
|
print("sude/sud_0010.json on disk is untouched")
|
|
|
|
assert sud.load({'Name': 'broken'}) is False
|
|
assert sud.name == 'Sud-Renamed'
|
|
print("load() rejected malformed data, left schedule untouched")
|
|
|
|
print("All sud save/load checks passed")
|