[kupfer: 11/31] objects: Serialize Actions and ComposedLeaf



commit 7253d60c041da639fa2d38eaaee71a5b2d418710
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Wed Dec 30 18:22:33 2009 +0100

    objects: Serialize Actions and ComposedLeaf
    
    Mark *all* actions as serilizable; this way we can serialize
    ComposedLeaf (that all contain one action instance).

 kupfer/objects.py |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)
---
diff --git a/kupfer/objects.py b/kupfer/objects.py
index f5cca89..6e9c53e 100644
--- a/kupfer/objects.py
+++ b/kupfer/objects.py
@@ -451,6 +451,7 @@ class Action (KupferObject):
 		"""
 		return True
 	'''
+	serilizable = True
 
 	def repr_key(self):
 		"""by default, actions of one type are all the same"""
@@ -1162,6 +1163,7 @@ class TimedDo (Do):
 		return _("Perform command after a specified time interval")
 
 class ComposedLeaf (RunnableLeaf):
+	serilizable = True
 	def __init__(self, obj, action, iobj=None):
 		object_ = (obj, action, iobj)
 		# A slight hack: We remove trailing ellipsis and whitespace
@@ -1169,6 +1171,20 @@ class ComposedLeaf (RunnableLeaf):
 		name = u" â?? ".join([format(o) for o in object_ if o is not None])
 		RunnableLeaf.__init__(self, object_, name)
 
+	def __getstate__(self):
+		from kupfer import puid
+		state = dict(vars(self))
+		state["object"] = [puid.get_unique_id(o) for o in self.object]
+		return state
+
+	def __setstate__(self, state):
+		from kupfer import puid
+		vars(self).update(state)
+		self.object[:] = [puid.resolve_unique_id(I) for I in state["object"]]
+		if (not self.object[0] or not self.object[1] or
+				(I is None) != (self.object[2] is None)):
+			raise InvalidDataError
+
 	def get_actions(self):
 		action = self.object[1]
 		yield ProxyDo(action)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]