← Back to team overview

zeitgeist team mailing list archive

[Merge] lp:~zeitgeist/zeitgeist/delete-hooks into lp:zeitgeist

 

Seif Lotfy has proposed merging lp:~zeitgeist/zeitgeist/delete-hooks into lp:zeitgeist.

Requested reviews:
  Zeitgeist Framework Team (zeitgeist)
Related bugs:
  #595919 delete_event_hook for extensions
  https://bugs.launchpad.net/bugs/595919

-- 
https://code.launchpad.net/~zeitgeist/zeitgeist/delete-hooks/+merge/28754
Your team Zeitgeist Framework Team is requested to review the proposed merge of lp:~zeitgeist/zeitgeist/delete-hooks into lp:zeitgeist.
=== modified file '_zeitgeist/engine/extension.py'
--- _zeitgeist/engine/extension.py	2010-04-01 20:10:36 +0000
+++ _zeitgeist/engine/extension.py	2010-06-29 13:45:39 +0000
@@ -86,6 +86,10 @@
 			should see it
 		"""
 		return event
+	
+	def delete_event_hook(self, ids):
+		pass
+
 
 def load_class(path):
 	"""
@@ -179,6 +183,14 @@
 				continue
 		return event
 	
+	def apply_delete_hooks(self, ids):
+		# Apply extension filters if we have an event
+	
+		# FIXME: We need a stable iteration order
+		for ext in self.__extensions.itervalues():
+			event = ext.delete_event_hook(ids, None)
+			
+	
 	def apply_insert_hooks(self, event, sender):
 		# FIXME: We need a stable iteration order
 		for ext in self.__extensions.itervalues():

=== modified file '_zeitgeist/engine/main.py'
--- _zeitgeist/engine/main.py	2010-05-14 17:16:49 +0000
+++ _zeitgeist/engine/main.py	2010-06-29 13:45:39 +0000
@@ -609,6 +609,9 @@
 				% ",".join(["?"] * len(ids)), ids)
 			self._cursor.connection.commit()
 			log.debug("Deleted %s" % map(int, ids))
+			
+			self.extensions.apply_delete_hooks(ids)
+			
 			return timestamps
 		else:
 			log.debug("Tried to delete non-existing event(s): %s" % map(int, ids))

=== modified file 'test/engine-extension-test.py'
--- test/engine-extension-test.py	2010-04-04 18:30:48 +0000
+++ test/engine-extension-test.py	2010-06-29 13:45:39 +0000
@@ -65,6 +65,22 @@
 		ids = import_events("test/data/five_events.js", self.engine)
 		# all inserts where blocked, so each id is 0 to indicate this
 		self.assertEquals(filter(None, ids), [])
+	
+	def testDeleteHook(self):
+		
+		class DeleteAllInsertExtension(Extension):
+			PUBLIC_METHODS = []
+			del_ids = []
+			
+			@classmethod
+			def delete_event_hook(self, del_ids, sender):
+				self.del_ids = del_ids
+				
+		self.engine.extensions.load(DeleteAllInsertExtension)
+		ids = import_events("test/data/five_events.js", self.engine)
+		# all inserts where blocked, so each id is 0 to indicate this
+		self.engine.delete_events([ids[1]])
+		self.assertEquals(DeleteAllInsertExtension.del_ids, [ids[1]])
 
 if __name__ == "__main__":
 	unittest.main()