[z3-checkins] r40532 - in z3/deliverance/zdeliverance: . tests

chrism at codespeak.net chrism at codespeak.net
Thu Mar 15 15:04:13 CET 2007


Author: chrism
Date: Thu Mar 15 15:04:11 2007
New Revision: 40532

Added:
   z3/deliverance/zdeliverance/
   z3/deliverance/zdeliverance/__init__.py   (contents, props changed)
   z3/deliverance/zdeliverance/tests/
   z3/deliverance/zdeliverance/tests/__init__.py   (contents, props changed)
   z3/deliverance/zdeliverance/tests/test_traversal.py   (contents, props changed)
   z3/deliverance/zdeliverance/traversal.py   (contents, props changed)
Log:
Import nascent "zdeliverance" package.


Added: z3/deliverance/zdeliverance/__init__.py
==============================================================================
--- (empty file)
+++ z3/deliverance/zdeliverance/__init__.py	Thu Mar 15 15:04:11 2007
@@ -0,0 +1 @@
+# this is a package

Added: z3/deliverance/zdeliverance/tests/__init__.py
==============================================================================
--- (empty file)
+++ z3/deliverance/zdeliverance/tests/__init__.py	Thu Mar 15 15:04:11 2007
@@ -0,0 +1 @@
+# this is a package

Added: z3/deliverance/zdeliverance/tests/test_traversal.py
==============================================================================
--- (empty file)
+++ z3/deliverance/zdeliverance/tests/test_traversal.py	Thu Mar 15 15:04:11 2007
@@ -0,0 +1,72 @@
+import unittest
+import time
+
+from zope.app.testing import ztapi
+from zope.app.testing.placelesssetup import PlacelessSetup
+from zope.interface.verify import verifyClass
+
+class DeliveranceRuleTests(unittest.TestCase):
+    def _getTargetClass(self):
+        from Products.zdeliverance.traversal import DeliveranceRule
+        return DeliveranceRule
+
+    def _makeOne(self, id='therule'):
+        return self._getTargetClass()(id)
+
+    def test_manage_afterAdd(self):
+        rule = self._makeOne()
+        item = Dummy()
+        container = Dummy()
+        rule.manage_afterAdd(item, container)
+        from ZPublisher.BeforeTraverse import queryBeforeTraverse
+        self.assertEqual(queryBeforeTraverse(container, 'Deliverance'),
+                         [(1, rule)])
+
+    def test_manage_beforeDelete(self):
+        rule = self._makeOne()
+        item = Dummy()
+        container = Dummy()
+        from ZPublisher.BeforeTraverse import registerBeforeTraverse
+        registerBeforeTraverse(container, None, 'Deliverance', 1)
+        rule.manage_beforeDelete(item, container)
+        from ZPublisher.BeforeTraverse import queryBeforeTraverse
+        self.assertEqual(queryBeforeTraverse(container, 'Deliverance'), [])
+
+    def test___call__(self):
+        rule = self._makeOne()
+        container = Dummy()
+        request = DummyRequest()
+        rule.theme_url = 'the theme url'
+        rule.rule = 'the rule'
+        rule.__call__(container, request)
+        response = request.RESPONSE
+        response.setBody('hello')
+        self.assertEqual(response.body, 'hello')
+        self.assertEqual(request.data['DELIVERANCE_THEME'],
+                         {'theme_url':'the theme url',
+                          'rule':'the rule'})
+
+# puru1pip
+
+class Dummy:
+    pass
+
+class DummyResponse:
+    def setBody(self, body, title):
+        self.body = body
+
+class DummyRequest:
+    def __init__(self):
+        self.data = {}
+        self.RESPONSE = DummyResponse()
+        
+    def set(self, key, value):
+        self.data[key] = value
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(DeliveranceRuleTests))
+    return suite
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')

Added: z3/deliverance/zdeliverance/traversal.py
==============================================================================
--- (empty file)
+++ z3/deliverance/zdeliverance/traversal.py	Thu Mar 15 15:04:11 2007
@@ -0,0 +1,53 @@
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+from ZPublisher.BeforeTraverse import unregisterBeforeTraverse
+from ZPublisher.BeforeTraverse import queryBeforeTraverse
+
+from OFS.SimpleItem import SimpleItem
+from OFS.PropertyManager import PropertyManager
+
+class DeliveranceRule(SimpleItem, PropertyManager):
+    """ An object which invokes a deliverance rule when its container
+    is traversed """
+
+    meta_type = 'Deliverance Rule'
+    theme_url = ''
+    rule = ''
+
+    _properties = (
+        {'id':'title', 'type':'string', 'mode':'w'},
+        {'id':'theme_url', 'type':'string', 'mode':'w', 'label':'Theme URL'},
+        {'id':'rule', 'type':'text', 'mode':'w', 'label':'Rule'},
+        )
+    
+    def __init__(self, id):
+        self.id = id
+
+    def manage_afterAdd(self, item, container):
+        existing = queryBeforeTraverse(container, 'Deliverance')
+        if existing:
+            raise ValueError('A Deliverance Rule named %r is already in '
+                             'this container' % existing[0][0])
+        registerBeforeTraverse(container, self, 'Deliverance', 1)
+
+    def manage_beforeDelete(self, item, container):
+        unregisterBeforeTraverse(container, 'Deliverance')
+
+    def __call__(self, container, request):
+        response = request.RESPONSE
+        orig_setBody = response.setBody
+        def setBody(body, title=''):
+            orig_setBody(body, title)
+            # XXX do work
+            orig_setBody(body, title)
+        response.setBody = setBody
+        request.set('DELIVERANCE_THEME', {'theme_url':self.theme_url,
+                                          'rule':self.rule})
+    
+def manage_addDeliveranceRule(self, id, REQUEST=None):
+    """ Add a deliverance rule """
+    rule = DeliveranceRule(id)
+    self._setObject(id, rule)
+    rule_url = rule.absolute_url() + '/manage_main'
+    if REQUEST is not None:
+        REQUEST.RESPONSE.redirect(rule_url)
+


More information about the z3-checkins mailing list