def registerTraversalHook(self): parent = aq_parent(aq_inner(self)) if not self.hasTraversalHook(parent): hook = BrowserIdManagerTraverser() name = TRAVERSAL_APPHANDLE priority = 40 # "higher" priority than session data traverser registerBeforeTraverse(parent, hook, name, priority)
def test_w_rule_invalid(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() registerBeforeTraverse(container, DummyObject(), 'AccessRule') self.assertTrue( self._callFUT(container).startswith( 'Invalid BeforeTraverse data: '))
def registerTraversalHook(self): parent = aq_parent(aq_inner(self)) if not self.hasTraversalHook(parent): hook = BrowserIdManagerTraverser() name = TRAVERSAL_APPHANDLE priority = 40 # "higher" priority than session data traverser registerBeforeTraverse(parent, hook, name, priority)
def manage_hook(self, hook=0): """ """ if hook != self.hooked(): if hook: hook = NameCaller(self.id) registerBeforeTraverse(self.aq_parent, hook, self.meta_type) else: unregisterBeforeTraverse(self.aq_parent, self.meta_type)
def test_manage_beforeDelete_item_is_self(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse traverser = self._makeOne() container = DummyContainer() other = container.other = DummyObject(name='other') registerBeforeTraverse(container, other, 'Traverser', 100) traverser.manage_beforeDelete(traverser, container) self.assertFalse(container.__before_traverse__)
def test_manage_beforeDelete_item_is_self(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse traverser = self._makeOne() container = DummyContainer() other = container.other = DummyObject(name='other') registerBeforeTraverse(container, other, 'Traverser', 100) traverser.manage_beforeDelete(traverser, container) self.assertFalse(container.__before_traverse__)
def manage_hook(self, hook=0): """ """ if hook != self.hooked(): if hook: hook = NameCaller(self.id) registerBeforeTraverse(aq_parent(self), hook, self.meta_type) else: unregisterBeforeTraverse(aq_parent(self), self.meta_type)
def test_no_method_id_w_existing_rules_no_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') registerBeforeTraverse(container, old_rule, 'AccessRule') result = self._callFUT(container, None, None) self.assertTrue(result is None) self.assertFalse(container.__before_traverse__) self.assertFalse('icon' in old_rule.__dict__)
def manage_afterAdd(self, item, container): if item is self: id = self.id if callable(id): id = id() # We want the original object, not stuff in between container = container.this() hook = NameCaller(id) registerBeforeTraverse(container, hook, self.meta_type, self.priority)
def test_no_method_id_w_existing_rules_no_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') registerBeforeTraverse(container, old_rule, 'AccessRule') result = self._callFUT(container, None, None) self.assertTrue(result is None) self.assertFalse(container.__before_traverse__) self.assertFalse('icon' in old_rule.__dict__)
def test_manage_beforeDelete_item_is_not_self(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse traverser = self._makeOne() container = DummyContainer() other = container.other = DummyObject(name='other') registerBeforeTraverse(container, other, 'Traverser', 100) item = object() traverser.manage_beforeDelete(item, container) hook = container.__before_traverse__[(100, 'Traverser')] self.assertEqual(hook.name, 'other')
def main(root): sdm = root._getOb('session_data_manager', None) if sdm is not None: sdm.updateTraversalData(requestSessionName=None) registerBeforeTraverse(root, ssc_hook, 'sessioncookie', 50) root.sessioncookie_installed = True print('zope2.sessioncookie hook installed!') transaction.commit()
def test_manage_beforeDelete_item_is_not_self(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse traverser = self._makeOne() container = DummyContainer() other = container.other = DummyObject(name='other') registerBeforeTraverse(container, other, 'Traverser', 100) item = object() traverser.manage_beforeDelete(item, container) hook = container.__before_traverse__[(100, 'Traverser')] self.assertEqual(hook.name, 'other')
def Localizer_moved(object, event): container = event.oldParent if container is not None: unregisterBeforeTraverse(container, object.meta_type) container = event.newParent if container is not None: id = object.id container = container.this() hook = NameCaller(id) registerBeforeTraverse(container, hook, object.meta_type)
def manage_afterAdd(self, item, container): if item is self: id = self.id if callable(id): id = id() # We want the original object, not stuff in between container = container.this() hook = NameCaller(id) registerBeforeTraverse(container, hook, self.meta_type, self.priority)
def Localizer_moved(object, event): container = event.oldParent if container is not None: unregisterBeforeTraverse(container, object.meta_type) container = event.newParent if container is not None: id = object.id container = container.this() hook = NameCaller(id) registerBeforeTraverse(container, hook, object.meta_type)
def test_w_invalid_method_id_w_existing_rules_no_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') registerBeforeTraverse(container, old_rule, 'AccessRule') result = self._callFUT(container, 'nonesuch', None) self.assertTrue(result is None) self.assertTrue((99, 'AccessRule') in container.__before_traverse__) rule = container.__before_traverse__[(99, 'AccessRule')] self.assertEqual(rule.name, 'old_rule') self.assertEqual(old_rule.icon, 'rule_icon.jpg')
def test_w_invalid_method_id_w_existing_rules_no_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') registerBeforeTraverse(container, old_rule, 'AccessRule') result = self._callFUT(container, 'nonesuch', None) self.assertTrue(result is None) self.assertTrue((99, 'AccessRule') in container.__before_traverse__) rule = container.__before_traverse__[(99, 'AccessRule')] self.assertEqual(rule.name, 'old_rule') self.assertEqual(old_rule.icon, 'rule_icon.jpg')
def test_w_method_id_w_existing_rules_w_request_none(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') registerBeforeTraverse(container, old_rule, 'AccessRule') request = DummyRequest(URL1 = 'http://example.com/') request.form = {'none': '1'} result = self._callFUT(container, None, request) self.assertTrue(isinstance(result, str)) self.assertTrue('<TITLE>No Access Rule</TITLE>' in result) self.assertFalse(container.__before_traverse__) self.assertFalse('icon' in old_rule.__dict__)
def manage_afterAdd(self, item, container): if item is self: if queryBeforeTraverse(container, self.meta_type): raise BadRequest, ('This container already has a %s' % self.meta_type) id = self.id if callable(id): id = id() # We want the original object, not stuff in between container = container.this() hook = NameCaller(id) registerBeforeTraverse(container, hook, self.meta_type, self.priority)
def enableAccessEventHook(obj, hook_class, hook_name): """Install __before_traverse__ hook for redirection """ # We want the original object, not stuff in between, and no acquisition obj = aq_base(obj) # disable any existing redirection hooks if hasattr(obj, hook_name): disableAccessEventHook(obj, hook_name) hook = AccessRule(hook_name) registerBeforeTraverse(obj, hook, hook_name, 1) setattr(obj, hook_name, hook_class())
def test_w_method_id_w_existing_rules_w_request_none(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') registerBeforeTraverse(container, old_rule, 'AccessRule') request = DummyRequest(URL1='http://example.com/') request.form = {'none': '1'} result = self._callFUT(container, None, request) self.assertTrue(isinstance(result, str)) self.assertTrue('<TITLE>No Access Rule</TITLE>' in result) self.assertFalse(container.__before_traverse__) self.assertFalse('icon' in old_rule.__dict__)
def manage_afterAdd(self, item, container): if item is self: if queryBeforeTraverse(container, self.meta_type): raise BadRequest('This container already has a %s' % self.meta_type) id = self.id if callable(id): id = id() # We want the original object, not stuff in between container = container.this() hook = NameCaller(id) registerBeforeTraverse( container, hook, self.meta_type, self.priority)
def enableLocalSiteHook(obj): """Install __before_traverse__ hook for Local Site """ # We want the original object, not stuff in between, and no acquisition obj = aq_base(obj) if not IPossibleSite.providedBy(obj): raise TypeError, 'Must provide IPossibleSite' hook = AccessRule(HOOK_NAME) registerBeforeTraverse(obj, hook, HOOK_NAME, 1) if not hasattr(obj, HOOK_NAME): setattr(obj, HOOK_NAME, LocalSiteHook()) directlyProvides(obj, ISite, directlyProvidedBy(obj))
def enableLocalSiteHook(obj): """Install __before_traverse__ hook for Local Site """ # We want the original object, not stuff in between, and no acquisition obj = aq_base(obj) if not IPossibleSite.providedBy(obj): raise TypeError, 'Must provide IPossibleSite' hook = AccessRule(HOOK_NAME) registerBeforeTraverse(obj, hook, HOOK_NAME, 1) if not hasattr(obj, HOOK_NAME): setattr(obj, HOOK_NAME, LocalSiteHook()) directlyProvides(obj, ISite, directlyProvidedBy(obj))
def enableSite(obj, iface=ISite): """Install __before_traverse__ hook for Local Site """ # We want the original object, not stuff in between, and no acquisition obj = aq_base(obj) if not IPossibleSite.providedBy(obj): raise TypeError('Must provide IPossibleSite') hook = NameCaller(HOOK_NAME) registerBeforeTraverse(obj, hook, HOOK_NAME, 1) if not hasattr(obj, HOOK_NAME): setattr(obj, HOOK_NAME, LocalSiteHook()) zope.interface.alsoProvides(obj, iface)
def test_w_invalid_method_id_w_existing_rules_w_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') registerBeforeTraverse(container, old_rule, 'AccessRule') request = DummyRequest(URL1='http://example.com/') request.form = {} result = self._callFUT(container, 'nonesuch', request) self.assertTrue(isinstance(result, str)) self.assertTrue('<TITLE>Invalid Method Id</TITLE>' in result) self.assertTrue((99, 'AccessRule') in container.__before_traverse__) rule = container.__before_traverse__[(99, 'AccessRule')] self.assertEqual(rule.name, 'old_rule') self.assertEqual(old_rule.icon, 'rule_icon.jpg')
def test_w_valid_method_id_w_existing_rules_no_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') new_rule = container.new_rule = DummyObject(name='new_rule') registerBeforeTraverse(container, old_rule, 'AccessRule') result = self._callFUT(container, 'new_rule', None) self.assertTrue(result is None) self.assertFalse((99, 'AccessRule') in container.__before_traverse__) self.assertTrue((1, 'AccessRule') in container.__before_traverse__) rule = container.__before_traverse__[(1, 'AccessRule')] self.assertEqual(rule.name, 'new_rule') self.assertFalse('icon' in old_rule.__dict__) self.assertEqual(new_rule.icon, 'misc_/SiteAccess/AccessRule.gif')
def updateTraversalData(self, requestSessionName=None): # Note this can't be called directly at add -- manage_afterAdd will # work though. parent = self.aq_inner.aq_parent if getattr(self,'_hasTraversalHook', None): unregisterBeforeTraverse(parent, 'BeakerSessionDataManager') del self._hasTraversalHook self._requestSessionName = None if requestSessionName: hook = SessionDataManagerTraverser(requestSessionName, self.id) registerBeforeTraverse(parent, hook, 'BeakerSessionDataManager', 50) self._hasTraversalHook = 1 self._requestSessionName = requestSessionName
def updateTraversalData(self, requestSessionName=None): """.""" parent = aq_parent(aq_inner(self)) if getattr(self, '_hasTraversalHook', None): unregisterBeforeTraverse(parent, 'BeakerSessionDataManager') del self._hasTraversalHook self._requestSessionName = None if requestSessionName: hook = SessionDataManagerTraverser(requestSessionName, self.id) registerBeforeTraverse(parent, hook, 'BeakerSessionDataManager', 50) self._hasTraversalHook = 1 self._requestSessionName = requestSessionName
def test_w_valid_method_id_w_existing_rules_no_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') new_rule = container.new_rule = DummyObject(name='new_rule') registerBeforeTraverse(container, old_rule, 'AccessRule') result = self._callFUT(container, 'new_rule', None) self.assertTrue(result is None) self.assertFalse((99, 'AccessRule') in container.__before_traverse__) self.assertTrue((1, 'AccessRule') in container.__before_traverse__) rule = container.__before_traverse__[(1, 'AccessRule')] self.assertEqual(rule.name, 'new_rule') self.assertFalse('icon' in old_rule.__dict__) self.assertEqual(new_rule.icon, 'misc_/SiteAccess/AccessRule.gif')
def test_w_invalid_method_id_w_existing_rules_w_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') registerBeforeTraverse(container, old_rule, 'AccessRule') request = DummyRequest(URL1 = 'http://example.com/') request.form = {} result = self._callFUT(container, 'nonesuch', request) self.assertTrue(isinstance(result, str)) self.assertTrue('<TITLE>Invalid Method Id</TITLE>' in result) self.assertTrue((99, 'AccessRule') in container.__before_traverse__) rule = container.__before_traverse__[(99, 'AccessRule')] self.assertEqual(rule.name, 'old_rule') self.assertEqual(old_rule.icon, 'rule_icon.jpg')
def updateTraversalData(self, requestSessionName=None): # Note this cant be called directly at add -- manage_afterAdd will # work though. parent = self.aq_inner.aq_parent if getattr(self, '_hasTraversalHook', None): unregisterBeforeTraverse(parent, 'SessionDataManager') del self._hasTraversalHook self._requestSessionName = None if requestSessionName: hook = SessionDataManagerTraverser(requestSessionName, self.id) registerBeforeTraverse(parent, hook, 'SessionDataManager', 50) self._hasTraversalHook = 1 self._requestSessionName = requestSessionName
def add_hook(context): """Add local site hook with before traverse event. Check to see if the current object already has a LocalSiteHook from Five registered. If not, then register one ourselves, going around ``enableSite`` since we don't want to make this object a full ``ISite``, but just get the ``BeforeTraverseEvent`` fired. """ base_object = aq_base(context) if hasattr(base_object, HOOK_NAME): return logger.info("Adding local site hook with before traverse hook at %s", context.absolute_url()) hook = AccessRule(HOOK_NAME) registerBeforeTraverse(base_object, hook, HOOK_NAME, 1) setattr(base_object, HOOK_NAME, LocalSiteHook())
def test_w_valid_method_id_w_existing_rules_w_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') new_rule = container.new_rule = DummyObject(name='new_rule') registerBeforeTraverse(container, old_rule, 'AccessRule') request = DummyRequest(URL1='http://example.com/') request.form = {} result = self._callFUT(container, 'new_rule', request) self.assertTrue(isinstance(result, str)) self.assertTrue('<TITLE>Access Rule Set</TITLE>' in result) self.assertFalse((99, 'AccessRule') in container.__before_traverse__) self.assertTrue((1, 'AccessRule') in container.__before_traverse__) rule = container.__before_traverse__[(1, 'AccessRule')] self.assertEqual(rule.name, 'new_rule') self.assertFalse('icon' in old_rule.__dict__) self.assertEqual(new_rule.icon, 'misc_/SiteAccess/AccessRule.gif')
def test_w_valid_method_id_w_existing_rules_w_request(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() old_rule = container.old_rule = DummyObject(name='old_rule', icon='rule_icon.jpg') new_rule = container.new_rule = DummyObject(name='new_rule') registerBeforeTraverse(container, old_rule, 'AccessRule') request = DummyRequest(URL1 = 'http://example.com/') request.form = {} result = self._callFUT(container, 'new_rule', request) self.assertTrue(isinstance(result, str)) self.assertTrue('<TITLE>Access Rule Set</TITLE>' in result) self.assertFalse((99, 'AccessRule') in container.__before_traverse__) self.assertTrue((1, 'AccessRule') in container.__before_traverse__) rule = container.__before_traverse__[(1, 'AccessRule')] self.assertEqual(rule.name, 'new_rule') self.assertFalse('icon' in old_rule.__dict__) self.assertEqual(new_rule.icon, 'misc_/SiteAccess/AccessRule.gif')
def manage_addAccessRule(self, method_id=None, REQUEST=None, **ignored): """Point a __before_traverse__ entry at the specified method""" # We want the original object, not stuff in between, and no acquisition self = self.this() self = getattr(self, 'aq_base', self) priority = (1, 'AccessRule') if method_id is None or (REQUEST and REQUEST.form.has_key('none')): rules = unregisterBeforeTraverse(self, 'AccessRule') if rules: try: del getattr(self, rules[0].name).icon except: pass if REQUEST: return MessageDialog(title='No Access Rule', message='This object now has no Access Rule', action='%s/manage_main' % REQUEST['URL1']) elif method_id and hasattr(self, method_id): rules = unregisterBeforeTraverse(self, 'AccessRule') if rules: try: del getattr(self, rules[0].name).icon except: pass hook = AccessRule(method_id) registerBeforeTraverse(self, hook, 'AccessRule', 1) try: getattr(self, method_id).icon = 'misc_/SiteAccess/AccessRule.gif' except: pass if REQUEST: return MessageDialog( title='Access Rule Set', message='"%s" is now the Access Rule for this object' % escape(method_id), action='%s/manage_main' % REQUEST['URL1']) else: if REQUEST: return MessageDialog( title='Invalid Method Id', message='"%s" is not the Id of a method of this object' % escape(method_id), action='%s/manage_main' % REQUEST['URL1'])
def manage_addAccessRule(self, method_id=None, REQUEST=None, **ignored): """Point a __before_traverse__ entry at the specified method""" # We want the original object, not stuff in between, and no acquisition self = self.this() self = getattr(self, 'aq_base', self) priority = (1, 'AccessRule') if method_id is None or (REQUEST and REQUEST.form.has_key('none')): rules = unregisterBeforeTraverse(self, 'AccessRule') if rules: try: del getattr(self, rules[0].name).icon except: pass if REQUEST: return MessageDialog(title='No Access Rule', message='This object now has no Access Rule', action='%s/manage_main' % REQUEST['URL1']) elif method_id and hasattr(self, method_id): rules = unregisterBeforeTraverse(self, 'AccessRule') if rules: try: del getattr(self, rules[0].name).icon except: pass hook = AccessRule(method_id) registerBeforeTraverse(self, hook, 'AccessRule', 1) try: getattr(self, method_id).icon = 'misc_/SiteAccess/AccessRule.gif' except: pass if REQUEST: return MessageDialog(title='Access Rule Set', message='"%s" is now the Access Rule for this object' % escape(method_id), action='%s/manage_main' % REQUEST['URL1']) else: if REQUEST: return MessageDialog(title='Invalid Method Id', message='"%s" is not the Id of a method of this object' % escape(method_id), action='%s/manage_main' % REQUEST['URL1'])
def siteAdded(context, event): """ objectModified event on simple siteModified. this code from collective.editsiteswitcher. """ """Add local site hook with before traverse event. Check to see if the current object already has a LocalSiteHook from Five registered. If not, then register one ourselves, going around ``enableSite`` since we don't want to make this object a full ``ISite``, but just get the ``BeforeTraverseEvent`` fired. """ # import pdb; pdb.set_trace() base_object = aq_base(context) if hasattr(base_object, HOOK_NAME): return hook = AccessRule(HOOK_NAME) registerBeforeTraverse(base_object, hook, HOOK_NAME, 1) setattr(base_object, HOOK_NAME, LocalSiteHook())
def test_w_rule_valid(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() registerBeforeTraverse(container, DummyObject(name='foo'), 'AccessRule') self.assertEqual(self._callFUT(container), 'foo')
def manage_afterAdd(self, item, container): """Register traversal hooks to add SESSION to request """ parent = self.aq_inner.aq_parent hook = DummySDMTraverseHook() registerBeforeTraverse(parent, hook, 'SessionDataManager', 50)
def test_w_rule_invalid(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() registerBeforeTraverse(container, DummyObject(), 'AccessRule') self.assertTrue(self._callFUT(container).startswith( 'Invalid BeforeTraverse data: '))
def test_w_rule_valid(self): from ZPublisher.BeforeTraverse import registerBeforeTraverse container = DummyContainer() registerBeforeTraverse(container, DummyObject(name='foo'), 'AccessRule') self.assertEqual(self._callFUT(container), 'foo')
def register_app_hook(self): """Separate method for easy re-use with mixed inheritance""" registerBeforeTraverse(self, enable_app_layer(), 'enable_app_layer')
def register_app_hook(self): """Separate method for easy re-use with mixed inheritance""" registerBeforeTraverse(self, enable_app_layer(), 'enable_app_layer')
def manage_afterAdd(self, item, container): if item is self: id = self.id container = container.this() hook = NameCaller(id) registerBeforeTraverse(container, hook, self.meta_type)