[Checkins] SVN: zope.lifecycleevent/trunk/ Merged movedaddedremoved branch:

Chris McDonough chrism at plope.com
Sun May 17 12:21:46 EDT 2009


Log message for revision 100032:
  Merged movedaddedremoved branch:
  
  - ``IObjectMovedEvent``, ``IObjectAddedEvent``,
    ``IObjectRemovedEvent`` interfaces and ``ObjectMovedEvent``,
    ``ObjectAddedEvent`` and ``ObjectRemovedEvent`` classes copied here
    from zope.container (plus tests).  The intent is to allow packages
    that rely on these interfaces or the event classes to rely on
    zope.lifecycleevent (which has few dependencies) instead of
    zope.container (which has many).
  
  

Changed:
  U   zope.lifecycleevent/trunk/CHANGES.txt
  U   zope.lifecycleevent/trunk/src/zope/lifecycleevent/__init__.py
  U   zope.lifecycleevent/trunk/src/zope/lifecycleevent/interfaces.py
  U   zope.lifecycleevent/trunk/src/zope/lifecycleevent/tests.py

-=-
Modified: zope.lifecycleevent/trunk/CHANGES.txt
===================================================================
--- zope.lifecycleevent/trunk/CHANGES.txt	2009-05-17 15:57:27 UTC (rev 100031)
+++ zope.lifecycleevent/trunk/CHANGES.txt	2009-05-17 16:21:45 UTC (rev 100032)
@@ -5,7 +5,13 @@
 3.5.2 (unreleased)
 ------------------
 
-- ...
+- ``IObjectMovedEvent``, ``IObjectAddedEvent``,
+  ``IObjectRemovedEvent`` interfaces and ``ObjectMovedEvent``,
+  ``ObjectAddedEvent`` and ``ObjectRemovedEvent`` classes copied here
+  from zope.container (plus tests).  The intent is to allow packages
+  that rely on these interfaces or the event classes to rely on
+  zope.lifecycleevent (which has few dependencies) instead of
+  zope.container (which has many).
 
 3.5.1 (2009-03-09)
 ------------------

Modified: zope.lifecycleevent/trunk/src/zope/lifecycleevent/__init__.py
===================================================================
--- zope.lifecycleevent/trunk/src/zope/lifecycleevent/__init__.py	2009-05-17 15:57:27 UTC (rev 100031)
+++ zope.lifecycleevent/trunk/src/zope/lifecycleevent/__init__.py	2009-05-17 16:21:45 UTC (rev 100032)
@@ -17,17 +17,21 @@
 """
 __docformat__ = 'restructuredtext'
 
-import zope.component.interfaces
+from zope.component.interfaces import ObjectEvent
 from zope.interface import implements
 from zope.event import notify
 
 from zope.lifecycleevent.interfaces import IObjectCreatedEvent
 from zope.lifecycleevent.interfaces import IObjectModifiedEvent
 from zope.lifecycleevent.interfaces import IObjectCopiedEvent
-from zope.lifecycleevent.interfaces import IAttributes, ISequence
+from zope.lifecycleevent.interfaces import IObjectMovedEvent
+from zope.lifecycleevent.interfaces import IObjectAddedEvent
+from zope.lifecycleevent.interfaces import IObjectRemovedEvent
+from zope.lifecycleevent.interfaces import IAttributes
+from zope.lifecycleevent.interfaces import ISequence
 
 
-class ObjectCreatedEvent(zope.component.interfaces.ObjectEvent):
+class ObjectCreatedEvent(ObjectEvent):
     """An object has been created"""
 
     implements(IObjectCreatedEvent)
@@ -72,7 +76,7 @@
         self.interface = interface
         self.keys = keys
 
-class ObjectModifiedEvent(zope.component.interfaces.ObjectEvent):
+class ObjectModifiedEvent(ObjectEvent):
     """An object has been modified"""
 
     implements(IObjectModifiedEvent)
@@ -108,3 +112,40 @@
     def __init__(self, object, original):
         super(ObjectCopiedEvent, self).__init__(object)
         self.original = original
+
+class ObjectMovedEvent(ObjectEvent):
+    """An object has been moved"""
+
+    implements(IObjectMovedEvent)
+
+    def __init__(self, object, oldParent, oldName, newParent, newName):
+        ObjectEvent.__init__(self, object)
+        self.oldParent = oldParent
+        self.oldName = oldName
+        self.newParent = newParent
+        self.newName = newName
+
+class ObjectAddedEvent(ObjectMovedEvent):
+    """An object has been added to a container"""
+
+    implements(IObjectAddedEvent)
+
+    def __init__(self, object, newParent=None, newName=None):
+        if newParent is None:
+            newParent = object.__parent__
+        if newName is None:
+            newName = object.__name__
+        ObjectMovedEvent.__init__(self, object, None, None, newParent, newName)
+
+class ObjectRemovedEvent(ObjectMovedEvent):
+    """An object has been removed from a container"""
+
+    implements(IObjectRemovedEvent)
+
+    def __init__(self, object, oldParent=None, oldName=None):
+        if oldParent is None:
+            oldParent = object.__parent__
+        if oldName is None:
+            oldName = object.__name__
+        ObjectMovedEvent.__init__(self, object, oldParent, oldName, None, None)
+

Modified: zope.lifecycleevent/trunk/src/zope/lifecycleevent/interfaces.py
===================================================================
--- zope.lifecycleevent/trunk/src/zope/lifecycleevent/interfaces.py	2009-05-17 15:57:27 UTC (rev 100031)
+++ zope.lifecycleevent/trunk/src/zope/lifecycleevent/interfaces.py	2009-05-17 16:21:45 UTC (rev 100032)
@@ -58,3 +58,33 @@
 
     interface = Attribute("The involved interface.")
     keys = Attribute("A sequence of modified keys.")
+
+
+##############################################################################
+# Moving Objects
+
+class IObjectMovedEvent(zope.component.interfaces.IObjectEvent):
+    """An object has been moved."""
+
+    oldParent = Attribute("The old location parent for the object.")
+    oldName = Attribute("The old location name for the object.")
+    newParent = Attribute("The new location parent for the object.")
+    newName = Attribute("The new location name for the object.")
+
+
+##############################################################################
+# Adding objects
+
+class IObjectAddedEvent(IObjectMovedEvent):
+    """An object has been added to a container."""
+
+
+##############################################################################
+# Removing objects
+
+
+class IObjectRemovedEvent(IObjectMovedEvent):
+    """An object has been removed from a container."""
+
+
+

Modified: zope.lifecycleevent/trunk/src/zope/lifecycleevent/tests.py
===================================================================
--- zope.lifecycleevent/trunk/src/zope/lifecycleevent/tests.py	2009-05-17 15:57:27 UTC (rev 100031)
+++ zope.lifecycleevent/trunk/src/zope/lifecycleevent/tests.py	2009-05-17 16:21:45 UTC (rev 100032)
@@ -31,6 +31,128 @@
     def testGetObject(self):
         self.assertEqual(self.event.object, self.object)
 
+class TestObjectMovedEvent(unittest.TestCase):
+
+    def _getTargetClass(self):
+        from zope.lifecycleevent import ObjectMovedEvent
+        return ObjectMovedEvent
+
+    def _makeOne(self, *arg):
+        return self._getTargetClass()(*arg)
+
+    def test_it(self):
+        ob = Context()
+        old_parent = Context()
+        new_parent = Context()
+        event = self._makeOne(ob, old_parent, 'old_name', new_parent,
+                              'new_name')
+        self.assertEqual(event.object, ob)
+        self.assertEqual(event.oldParent, old_parent)
+        self.assertEqual(event.newParent, new_parent)
+        self.assertEqual(event.newName, 'new_name')
+        self.assertEqual(event.oldName, 'old_name')
+
+    def test_verifyClass(self):
+        from zope.interface.verify import verifyClass
+        from zope.lifecycleevent.interfaces import IObjectMovedEvent
+        verifyClass(IObjectMovedEvent, self._getTargetClass())
+        
+    def test_verifyObject(self):
+        from zope.interface.verify import verifyObject
+        from zope.lifecycleevent.interfaces import IObjectMovedEvent
+        verifyObject(IObjectMovedEvent,
+                     self._makeOne(None, None, None, None, None)
+                    )
+
+class TestObjectAddedEvent(unittest.TestCase):
+
+    def _getTargetClass(self):
+        from zope.lifecycleevent import ObjectAddedEvent
+        return ObjectAddedEvent
+
+    def _makeOne(self, *arg):
+        return self._getTargetClass()(*arg)
+
+    def test_it(self):
+        ob = Context()
+        new_parent = Context()
+        event = self._makeOne(ob, new_parent, 'new_name')
+        self.assertEqual(event.object, ob)
+        self.assertEqual(event.newParent, new_parent)
+        self.assertEqual(event.newName, 'new_name')
+        self.assertEqual(event.oldParent, None)
+        self.assertEqual(event.oldName, None)
+
+    def test_it_Nones(self):
+        ob = Context()
+        new_parent = Context()
+        ob.__parent__ = new_parent
+        ob.__name__ = 'new_name'
+        event = self._makeOne(ob, None, None)
+        self.assertEqual(event.object, ob)
+        self.assertEqual(event.newParent, new_parent)
+        self.assertEqual(event.newName, 'new_name')
+        self.assertEqual(event.oldParent, None)
+        self.assertEqual(event.oldName, None)
+
+    def test_verifyClass(self):
+        from zope.interface.verify import verifyClass
+        from zope.lifecycleevent.interfaces import IObjectAddedEvent
+        verifyClass(IObjectAddedEvent, self._getTargetClass())
+        
+    def test_verifyObject(self):
+        from zope.interface.verify import verifyObject
+        from zope.lifecycleevent.interfaces import IObjectAddedEvent
+        parent = Context()
+        ob = Context()
+        verifyObject(IObjectAddedEvent, self._makeOne(ob, parent, 'new_name'))
+
+class TestObjectRemovedEvent(unittest.TestCase):
+
+    def _getTargetClass(self):
+        from zope.lifecycleevent import ObjectRemovedEvent
+        return ObjectRemovedEvent
+
+    def _makeOne(self, *arg):
+        return self._getTargetClass()(*arg)
+
+    def test_it(self):
+        ob = Context()
+        parent = Context()
+        event = self._makeOne(ob, parent, 'name')
+        self.assertEqual(event.object, ob)
+        self.assertEqual(event.newParent, None)
+        self.assertEqual(event.newName, None)
+        self.assertEqual(event.oldParent, parent)
+        self.assertEqual(event.oldName, 'name')
+
+    def test_it_Nones(self):
+        ob = Context()
+        parent = Context()
+        ob.__parent__ = parent
+        ob.__name__ = 'name'
+        event = self._makeOne(ob, None, None)
+        self.assertEqual(event.object, ob)
+        self.assertEqual(event.newParent, None)
+        self.assertEqual(event.newName,  None)
+        self.assertEqual(event.oldParent, parent)
+        self.assertEqual(event.oldName, 'name')
+
+    def test_verifyClass(self):
+        from zope.interface.verify import verifyClass
+        from zope.lifecycleevent.interfaces import IObjectRemovedEvent
+        verifyClass(IObjectRemovedEvent, self._getTargetClass())
+        
+    def test_verifyObject(self):
+        from zope.interface.verify import verifyObject
+        from zope.lifecycleevent.interfaces import IObjectRemovedEvent
+        parent = object()
+        ob = object()
+        verifyObject(IObjectRemovedEvent, self._makeOne(ob, parent, 'new_name'))
+
+class Context:
+    pass
+
 def setUpDoctest(test):
     from zope.annotation.attribute import AttributeAnnotations
     from zope.dublincore.interfaces import IWriteZopeDublinCore
@@ -42,6 +164,9 @@
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(TestObjectModifiedEvent),
+        unittest.makeSuite(TestObjectMovedEvent),
+        unittest.makeSuite(TestObjectAddedEvent),
+        unittest.makeSuite(TestObjectRemovedEvent),
         doctest.DocFileSuite('README.txt', setUp=setUpDoctest,
                              tearDown=zope.component.testing.tearDown),
         ))



More information about the Checkins mailing list