[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