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)
Beispiel #5
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()
Beispiel #9
0
 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
Beispiel #11
0
 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
Beispiel #12
0
 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 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 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
Beispiel #18
0
    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)
Beispiel #24
0
 def testDefaultAdapter(self):
     folder = OrderedBTreeFolderBase()
     self.failUnless(isinstance(folder.getOrdering(), DefaultOrdering))
Beispiel #25
0
 def testUnknownOrdering(self):
     folder = OrderedBTreeFolderBase()
     folder._ordering = 'foo'
     self.failUnless(isinstance(folder.getOrdering(), DefaultOrdering))
Beispiel #26
0
 def _checkId(self, id, allow_dup=0):
     OrderedBTreeFolderBase._checkId(self, id, allow_dup)
     BaseFolder._checkId(self, id, allow_dup)
Beispiel #27
0
 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))
Beispiel #29
0
 def _checkId(self, id, allow_dup=0):
     OrderedBTreeFolderBase._checkId(self, id, allow_dup)
     BaseFolder._checkId(self, id, allow_dup)
Beispiel #30
0
 def __init__(self, oid, **kwargs):
     OrderedBTreeFolderBase.__init__(self, oid)
     BaseFolder.__init__(self, oid, **kwargs)
Beispiel #31
0
 def testSetUnknownOrdering(self):
     folder = OrderedBTreeFolderBase()
     self.assertRaises(ComponentLookupError, folder.setOrdering, 'foo')
Beispiel #32
0
 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)
Beispiel #34
0
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)
Beispiel #35
0
 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')
Beispiel #36
0
 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)