def create(self): folder = OrderedBTreeFolderBase("f1") folder._setOb("o1", DummyObject("o1", "mt1")) folder._setOb("o2", DummyObject("o2", "mt2")) folder._setOb("o3", DummyObject("o3", "mt1")) folder._setOb("o4", DummyObject("o4", "mt2")) return folder
def test_getitem(self): folder = OrderedBTreeFolderBase("f1") foo = DummyObject('foo') folder._setOb('foo', foo) self.assertEqual(folder['foo'], foo) self.assertEqual(folder.__getitem__('foo'), foo) self.assertRaises(KeyError, folder.__getitem__, 'bar')
def test_getitem(self): folder = OrderedBTreeFolderBase("f1") foo = DummyObject("foo") folder._setOb("foo", foo) self.assertEqual(folder["foo"], foo) self.assertEqual(folder.__getitem__("foo"), foo) self.assertRaises(KeyError, folder.__getitem__, "bar")
def test_delitem(self): folder = OrderedBTreeFolderBase("f1") folder._setOb("foo", DummyObject("foo")) folder._setOb("bar", DummyObject("bar")) self.assertEquals(len(folder.objectIds()), 2) del folder["foo"] del folder["bar"] self.assertEquals(len(folder.objectIds()), 0)
def init_groupings(self): context = aq_inner(self.context) context._groupings = OOBTree({ 'label': OrderedBTreeFolderBase(), 'author': OrderedBTreeFolderBase(), 'type': OrderedBTreeFolderBase(), 'first_letter': OrderedBTreeFolderBase(), })
def test_to_verify_ticket_9120(self): folder = OrderedBTreeFolderBase("f1") folder['ob1'] = ob1 = DummyObject('ob1') folder['ob2'] = ob2 = DummyObject('ob2') folder['ob3'] = ob3 = DummyObject('ob3') folder['ob4'] = ob4 = DummyObject('ob4') del folder['ob2'] del folder['ob3'] self.assertEquals(folder.keys(), ['ob1', 'ob4']) self.assertEquals(map(aq_base, folder.values()), [ob1, ob4]) self.assertEquals([key in folder for key in folder], [True, True])
def test_to_verify_ticket_9120(self): folder = OrderedBTreeFolderBase("f1") folder["ob1"] = ob1 = DummyObject("ob1") folder["ob2"] = DummyObject("ob2") folder["ob3"] = DummyObject("ob3") folder["ob4"] = ob4 = DummyObject("ob4") del folder["ob2"] del folder["ob3"] self.assertEquals(folder.keys(), ["ob1", "ob4"]) self.assertEquals(map(aq_base, folder.values()), [ob1, ob4]) self.assertEquals([key in folder for key in folder], [True, True])
def testDeleteSpeed(self): folder = OrderedBTreeFolderBase("f1") for idx in xrange(100000): id = 'foo-%s' % idx folder[id] = DummyObject(id, 'bar') last = reversed(folder.keys()[-100:]) @timecall def delete(): for id in last: del folder[id] delete()
def create(self): container = OrderedBTreeFolderBase() container.setOrdering(u'partial') container['o1'] = Orderable('o1', 'mt1') container['o2'] = Orderable('o2', 'mt2') container['c1'] = Chaoticle('c1', 'mt3') container['o3'] = Orderable('o3', 'mt1') container['c2'] = Chaoticle('c2', 'mt2') container['c3'] = Chaoticle('c3', 'mt1') container['o4'] = Orderable('o4', 'mt2') self.unordered = ['c3', 'c2', 'c1'] ordering = container.getOrdering() return container, ordering
def create(self): container = OrderedBTreeFolderBase() container.setOrdering(u"partial") container["o1"] = Orderable("o1", "mt1") container["o2"] = Orderable("o2", "mt2") container["c1"] = Chaoticle("c1", "mt3") container["o3"] = Orderable("o3", "mt1") container["c2"] = Chaoticle("c2", "mt2") container["c3"] = Chaoticle("c3", "mt1") container["o4"] = Orderable("o4", "mt2") self.unordered = ["c3", "c2", "c1"] ordering = container.getOrdering() return container, ordering
def create(self): container = OrderedBTreeFolderBase() container.setOrdering(u'partial') container['o1'] = Orderable('o1', 'mt1') container['o2'] = Orderable('o2', 'mt2') container['c1'] = Chaoticle('c1', 'mt3') container['o3'] = Orderable('o3', 'mt1') container['c2'] = Chaoticle('c2', 'mt2') container['c3'] = Chaoticle('c3', 'mt1') container['o4'] = Orderable('o4', 'mt2') self.unordered = ['c1', 'c2', 'c3'] ordering = container.getOrdering() return container, ordering
def create(self): folder = OrderedBTreeFolderBase('f1') folder['o1'] = DummyObject('o1', 'mt1') folder['o2'] = DummyObject('o2', 'mt2') folder['o3'] = DummyObject('o3', 'mt1') folder['o4'] = DummyObject('o4', 'mt2') return folder
def create(self): container = OrderedBTreeFolderBase() container._ordering = u'unordered' container._setOb('o1', DummyObject('o1', 'mt1')) container._setOb('o2', DummyObject('o2', 'mt2')) container._setOb('o3', DummyObject('o3', 'mt1')) container._setOb('o4', DummyObject('o4', 'mt2')) return container
def create(self): folder = OrderedBTreeFolderBase("f1") folder._setOb('o1', DummyObject('o1', 'mt1')) folder._setOb('o2', DummyObject('o2', 'mt2')) folder._setOb('o3', DummyObject('o3', 'mt1')) folder._setOb('o4', DummyObject('o4', 'mt2')) return folder
def test_delitem(self): folder = OrderedBTreeFolderBase("f1") folder._setOb('foo', DummyObject('foo')) folder._setOb('bar', DummyObject('bar')) self.assertEquals(len(folder.objectIds()), 2) del folder['foo'] del folder['bar'] self.assertEquals(len(folder.objectIds()), 0)
def checkOrderedFolder(folder): """check invariants """ ordering = folder.getOrdering() if not isinstance(ordering, DefaultOrdering): return ids = OrderedBTreeFolderBase.objectIds(folder) order = ordering._order() assert len(ids) == len(order) assert len(set(order)) == len(order) assert len(ordering._pos()) == len(order) for index, value in enumerate(order): assert value in ids assert value in ordering._pos() assert ordering._pos()[value] == index
def _add_grouping_values(self, grouping, values, obj): """ Add $uid to the list of uids stored under the grouping values (provided by $values) in the groupings datastructure. If the list doesn't exist yet, add it. """ uid = IUUID(obj) groupings = self.get_groupings() if grouping not in groupings: logger.info('Adding grouping %s to object %r', grouping, obj) groupings[grouping] = OrderedBTreeFolderBase() for value in values: if value in groupings[grouping]: groupings[grouping][value].add(uid) else: groupings[grouping][value] = GroupingStorageValues([uid])
def fixOrderedFolder(folder): result = list() try: checkOrderedFolder(folder) except AssertionError: path = '/'.join(folder.getPhysicalPath()) logger.warn('Detected damage to %s. Fixing now.' % path, exc_info=sys.exc_info()) try: ids = OrderedBTreeFolderBase.objectIds(folder) ordering = folder.getOrdering() # keep only ids that exist in underlying BTreeFolder # keep first id if there is more than one seen = list() for index, value in enumerate(ordering._order()): if value not in seen and value in ids: seen.append(value) # add ids of objects found in BTreeFolder # but not in ordering if len(seen) < len(ids): for id in ids: if id not in seen: seen.append(id) # build new order list and pos dict order, pos = resetOrdering(ordering) for index, value in enumerate(seen): order.append(value) pos[value] = index checkOrderedFolder(folder) result.append('Fixed folder %s' % path) except: # noqa logger.error('Failed to fix %s.' % path, exc_info=sys.exc_info()) raise else: logger.info('Fixed %s.' % path) return result
def test_len_empty_folder(self): folder = OrderedBTreeFolderBase("f1") self.assertEquals(len(folder), 0)
def testUnorderedOrdering(self): folder = OrderedBTreeFolderBase() folder._ordering = 'unordered' self.assertTrue(isinstance(folder.getOrdering(), UnorderedOrdering))
def test_contains(self): folder = OrderedBTreeFolderBase("f1") folder._setOb('foo', DummyObject('foo')) folder._setOb('bar', DummyObject('bar')) self.failUnless('foo' in folder) self.failUnless('bar' in folder)
def test_setitem(self): folder = OrderedBTreeFolderBase("f1") foo = DummyObject('foo') folder['foo'] = foo self.assertEqual(folder._getOb('foo'), foo)
def testDefaultAdapter(self): folder = OrderedBTreeFolderBase() self.failUnless(isinstance(folder.getOrdering(), DefaultOrdering))
def testUnknownOrdering(self): folder = OrderedBTreeFolderBase() folder._ordering = 'foo' self.failUnless(isinstance(folder.getOrdering(), DefaultOrdering))
def _checkId(self, id, allow_dup=0): OrderedBTreeFolderBase._checkId(self, id, allow_dup) BaseFolder._checkId(self, id, allow_dup)
def __init__(self, oid, **kwargs): OrderedBTreeFolderBase.__init__(self, oid) BaseFolder.__init__(self, oid, **kwargs)
def testDefaultAdapter(self): folder = OrderedBTreeFolderBase() self.assertTrue(isinstance(folder.getOrdering(), DefaultOrdering))
def testSetUnknownOrdering(self): folder = OrderedBTreeFolderBase() self.assertRaises(ComponentLookupError, folder.setOrdering, 'foo')
def testSetOrdering(self): folder = OrderedBTreeFolderBase() folder.setOrdering('unordered') self.failUnless(isinstance(folder.getOrdering(), UnorderedOrdering)) folder.setOrdering() self.failUnless(isinstance(folder.getOrdering(), DefaultOrdering))
def test_len_one_child(self): folder = OrderedBTreeFolderBase("f1") folder['child'] = DummyObject('child') self.assertEquals(len(folder), 1)
class PloneOrderSupportTests(unittest.TestCase): """ tests borrowed from Products.CMFPlone.tests.testOrderSupport """ layer = PLONEFOLDER_INTEGRATION_TESTING def setUp(self): self.folder = OrderedBTreeFolderBase("f1") self.folder['foo'] = DummyObject('foo', 'mt1') self.folder['bar'] = DummyObject('bar', 'mt1') self.folder['baz'] = DummyObject('baz', 'mt1') def testGetObjectPosition(self): self.assertEqual(self.folder.getObjectPosition('foo'), 0) self.assertEqual(self.folder.getObjectPosition('bar'), 1) self.assertEqual(self.folder.getObjectPosition('baz'), 2) def testMoveObject(self): self.folder.moveObjectToPosition('foo', 1) self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('foo'), 1) self.assertEqual(self.folder.getObjectPosition('baz'), 2) def testMoveObjectToSamePos(self): self.folder.moveObjectToPosition('bar', 1) self.assertEqual(self.folder.getObjectPosition('foo'), 0) self.assertEqual(self.folder.getObjectPosition('bar'), 1) self.assertEqual(self.folder.getObjectPosition('baz'), 2) def testMoveObjectToFirstPos(self): self.folder.moveObjectToPosition('bar', 0) self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('foo'), 1) self.assertEqual(self.folder.getObjectPosition('baz'), 2) def testMoveObjectToLastPos(self): self.folder.moveObjectToPosition('bar', 2) self.assertEqual(self.folder.getObjectPosition('foo'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('bar'), 2) def testMoveObjectOutLowerBounds(self): # Pos will be normalized to 0 self.folder.moveObjectToPosition('bar', -1) self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('foo'), 1) self.assertEqual(self.folder.getObjectPosition('baz'), 2) def testMoveObjectOutUpperBounds(self): # Pos will be normalized to 2 self.folder.moveObjectToPosition('bar', 3) self.assertEqual(self.folder.getObjectPosition('foo'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('bar'), 2) def testMoveObjectsUp(self): self.folder.moveObjectsUp(['bar']) self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('foo'), 1) self.assertEqual(self.folder.getObjectPosition('baz'), 2) def testMoveObjectsDown(self): self.folder.moveObjectsDown(['bar']) self.assertEqual(self.folder.getObjectPosition('foo'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('bar'), 2) def testMoveObjectsToTop(self): self.folder.moveObjectsToTop(['bar']) self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('foo'), 1) self.assertEqual(self.folder.getObjectPosition('baz'), 2) def testMoveObjectsToBottom(self): self.folder.moveObjectsToBottom(['bar']) self.assertEqual(self.folder.getObjectPosition('foo'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('bar'), 2) def testMoveTwoObjectsUp(self): self.folder.moveObjectsUp(['bar', 'baz']) self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('foo'), 2) def testMoveTwoObjectsDown(self): self.folder.moveObjectsDown(['foo', 'bar']) self.assertEqual(self.folder.getObjectPosition('baz'), 0) self.assertEqual(self.folder.getObjectPosition('foo'), 1) self.assertEqual(self.folder.getObjectPosition('bar'), 2) def testMoveTwoObjectsToTop(self): self.folder.moveObjectsToTop(['bar', 'baz']) self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('foo'), 2) def testMoveTwoObjectsToBottom(self): self.folder.moveObjectsToBottom(['foo', 'bar']) self.assertEqual(self.folder.getObjectPosition('baz'), 0) self.assertEqual(self.folder.getObjectPosition('foo'), 1) self.assertEqual(self.folder.getObjectPosition('bar'), 2) def testOrderObjects(self): self.folder.orderObjects('id') self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('foo'), 2) def testOrderObjectsReverse(self): self.folder.orderObjects('id', reverse=True) self.assertEqual(self.folder.getObjectPosition('foo'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('bar'), 2) def testOrderObjectsByMethod(self): self.folder.orderObjects('dummy_method') self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('foo'), 2) def testOrderObjectsOnlyReverse(self): self.folder.orderObjects(reverse=True) self.assertEqual(self.folder.getObjectPosition('baz'), 0) self.assertEqual(self.folder.getObjectPosition('bar'), 1) self.assertEqual(self.folder.getObjectPosition('foo'), 2) def testSubsetIds(self): self.folder.moveObjectsByDelta(['baz'], -1, ['foo', 'bar', 'baz']) self.assertEqual(self.folder.getObjectPosition('foo'), 0) self.assertEqual(self.folder.getObjectPosition('baz'), 1) self.assertEqual(self.folder.getObjectPosition('bar'), 2) def testSkipObjectsNotInSubsetIds(self): self.folder.moveObjectsByDelta(['baz'], -1, ['foo', 'baz']) self.assertEqual(self.folder.getObjectPosition('baz'), 0) self.assertEqual(self.folder.getObjectPosition('bar'), 1) # no move self.assertEqual(self.folder.getObjectPosition('foo'), 2) def testIgnoreNonObjects(self): # Fix for (http://dev.plone.org/plone/ticket/3959) non # contentish objects cause errors, we should just ignore them self.folder.moveObjectsByDelta(['bar', 'blah'], -1) self.assertEqual(self.folder.getObjectPosition('bar'), 0) self.assertEqual(self.folder.getObjectPosition('foo'), 1) self.assertEqual(self.folder.getObjectPosition('baz'), 2)
def setUp(self): self.folder = OrderedBTreeFolderBase("f1") self.folder['foo'] = DummyObject('foo', 'mt1') self.folder['bar'] = DummyObject('bar', 'mt1') self.folder['baz'] = DummyObject('baz', 'mt1')
def testUnorderedOrdering(self): folder = OrderedBTreeFolderBase() folder._ordering = 'unordered' self.failUnless(isinstance(folder.getOrdering(), UnorderedOrdering))
def test_contains(self): folder = OrderedBTreeFolderBase("f1") folder._setOb("foo", DummyObject("foo")) folder._setOb("bar", DummyObject("bar")) self.failUnless("foo" in folder) self.failUnless("bar" in folder)