def setUp(self): PlacelessSetup.setUp(self) # Build up a wrapper chain root = C('root') interface.directlyProvides(root, IRoot) folder = C('folder') item = C('item') self.root = root # root is not usually wrapped self.folder = contained(folder, self.root, name='folder') self.item = contained(item, self.folder, name='item') self.unwrapped_item = item self.broken_chain_folder = contained(folder, None) self.broken_chain_item = contained(item, self.broken_chain_folder, name='item') root.folder = folder folder.item = item self.tr = Traverser(root) zope.component.provideAdapter(Traverser, (None, ), ITraverser) zope.component.provideAdapter(DefaultTraversable, (None, ), ITraversable) zope.component.provideAdapter(LocationPhysicallyLocatable, (None, ), ILocationInfo) zope.component.provideAdapter(RootPhysicallyLocatable, (IRoot, ), ILocationInfo)
def setUp(self): PlacelessSetup.setUp(self) # Build up a wrapper chain self.root = C('root') self.folder = contained(C('folder'), self.root, name='folder') self.item = contained(C('item'), self.folder, name='item') self.tr = Traverser(self.item)
def testTraverseOldStyleClass(self): class AnOldStyleClass: x = object() container = {} container['theclass'] = AnOldStyleClass tr = Traverser(container) self.assertTrue(tr.traverse('theclass/x') is AnOldStyleClass.x)
def setUp(self): self.root = root = C('root') directlyProvides(self.root, IRoot) self.folder = folder = C('folder') self.item = item = C('item') root.folder = folder folder.item = item self.tr = Traverser(root)
def testAllAllowed(self): defineChecker( C, Checker({ 'folder': CheckerPublic, 'item': CheckerPublic, })) tr = Traverser(ProxyFactory(self.root)) item = self.item self.assertEqual(tr.traverse(('', 'folder', 'item')), item) self.assertEqual(tr.traverse(('folder', 'item')), item)
def testItemDenied(self): endInteraction() newInteraction(ParticipationStub('no one')) defineChecker(C, Checker({'item': 'Waaaa', 'folder': CheckerPublic})) tr = Traverser(ProxyFactory(self.root)) folder = self.folder self.assertRaises(Unauthorized, tr.traverse, ('', 'folder', 'item')) self.assertRaises(Unauthorized, tr.traverse, ('folder', 'item')) self.assertEqual(tr.traverse(('', 'folder')), folder) self.assertEqual(tr.traverse(('folder', '..', 'folder')), folder) self.assertEqual(tr.traverse(('folder', )), folder)
def testTraversingDictSeesDictAPI(self): adict = { 'foo': 'bar', 'anotherdict': { 'bar': 'foo' }, 'items': '123', } tr = Traverser(adict) self.assertEqual(tr.traverse('items'), adict.items) self.assertEqual(tr.traverse('anotherdict/bar'), 'foo') self.assertEqual(tr.traverse('anotherdict/items'), adict['anotherdict'].items)
def testException(self): # nail the fact that AttributeError raised in a @property # decorated method gets masked by traversal self.root.foobar = ExceptionRaiser('foobar') endInteraction() newInteraction(ParticipationStub('no one')) tr = Traverser(self.root) # AttributeError becomes LocationError if there's no __getitem__ # on the object self.assertRaises(LocationError, tr.traverse, ('foobar', 'attributeerror')) # Other exceptions raised as usual self.assertRaises(ValueError, tr.traverse, ('foobar', 'valueerror'))
def setUp(self): PlacelessSetup.setUp(self) zope.component.provideAdapter(DefaultTraversable, (None, ), ITraversable) zope.component.provideAdapter(LocationPhysicallyLocatable, (None, ), ILocationInfo) zope.component.provideAdapter(RootPhysicallyLocatable, (IRoot, ), ILocationInfo) self.root = root = C('root') directlyProvides(root, IRoot) self.folder = folder = contained(C('folder'), root, 'folder') self.item = item = contained(C('item'), folder, 'item') root.folder = folder folder.item = item self.tr = Traverser(ProxyFactory(root))
def testTraversingDoesntFailOnStrings(self): adict = {'foo': 'bar'} tr = Traverser(adict) # This used to raise type error before self.assertRaises(LocationError, tr.traverse, 'foo/baz')