Implement undo for non-module operators. See #1475.

This commit is contained in:
Dion Moult
2021-07-06 15:06:21 +10:00
parent 32e7083e21
commit b1d731447a
4 changed files with 158 additions and 134 deletions
+10 -2
View File
@@ -51,10 +51,18 @@ class Transaction:
return info
def serialise_value(self, element, value):
return element.walk(lambda v: isinstance(v, entity_instance), lambda v: {"id": v.id()}, value)
return element.walk(
lambda v: isinstance(v, entity_instance),
lambda v: {"id": v.id()} if v.id() else {"type": v.is_a(), "value": v.wrappedValue},
value,
)
def unserialise_value(self, element, value):
return element.walk(lambda v: isinstance(v, dict), lambda v: self.file.by_id(v["id"]), value)
return element.walk(
lambda v: isinstance(v, dict),
lambda v: self.file.by_id(v["id"]) if v.get("id") else self.file.create_entity(v["type"], v["value"]),
value,
)
def batch(self):
self.is_batched = True