Esempio n. 1
0
    def test_filter_tree(self):
        tree = {
            'title':
            'A',
            'remove':
            False,
            'children': [
                {
                    'title': 'B',
                    'remove': True,
                    'children': []
                },
                {
                    'title': 'C',
                    'remove': False,
                    'children': []
                },
            ]
        }

        expected_tree = {
            'title': 'A',
            'remove': False,
            'children': [{
                'title': 'C',
                'remove': False,
                'children': []
            }]
        }

        filtered_tree = filter_tree(lambda item: not item.get('remove'), tree)

        self.assertEqual(expected_tree, filtered_tree)
        self.assertNotEqual(filtered_tree, tree)
Esempio n. 2
0
    def test_filter_tree_without_copy(self):
        tree = {
            'title': 'A',
            'remove': False,
            'children': [

                {'title': 'B',
                 'remove': True,
                 'children': []},

                {'title': 'C',
                 'remove': False,
                 'children': []},

                ]}

        expected_tree = {
            'title': 'A',
            'remove': False,
            'children': [

                {'title': 'C',
                 'remove': False,
                 'children': []}]}

        filtered_tree = filter_tree(lambda item: not item.get('remove'),
                                    tree,
                                    copy=False)

        self.assertEqual(expected_tree, filtered_tree)
        self.assertEqual(filtered_tree, tree)
Esempio n. 3
0
    def __call__(self, tree):

        def filterer(item):
            brain = item.get('item')
            if brain.portal_type in ('Book', 'Chapter'):
                return True

            else:
                return getattr(brain, 'showTitle', None)

        tree = filter_tree(filterer, tree, copy=True)

        def toc_number_prefix_adder(node, parent):
            num = node.get('toc_number', None)

            if num is None:
                # We are on the root node, which is the book - it has
                # no table of content number.
                node['toc_number'] = ''
                num = ''

            else:
                num = '%s.' % num

            for i, child in enumerate(node.get('children', []), 1):
                child['toc_number'] = num + str(i)

        return modify_tree(toc_number_prefix_adder, tree)
Esempio n. 4
0
    def __call__(self, tree):

        def filterer(item):
            brain = item.get('item')
            if brain.portal_type in ('Book', 'Chapter'):
                return True

            elif not getattr(brain, 'showTitle', None):
                return False

            elif getattr(brain, 'hideFromTOC', None):
                return False

            else:
                return True

        tree = filter_tree(filterer, tree, copy=True)

        def toc_number_prefix_adder(node, parent):
            num = node.get('toc_number', None)

            if num is None:
                # We are on the root node, which is the book - it has
                # no table of content number.
                node['toc_number'] = ''
                num = ''

            else:
                num = '%s.' % num

            for i, child in enumerate(node.get('children', []), 1):
                child['toc_number'] = num + str(i)

        return modify_tree(toc_number_prefix_adder, tree)
Esempio n. 5
0
    def test_object_not_copied(self):
        myobj = object()

        tree = {'item': myobj, 'children': []}

        filtered_tree = filter_tree(lambda item: True, tree, copy=True)

        # Only structure (dicts, lists) should be copied, but the values
        # of the dicts.
        self.assertEqual(tree.get('item'), filtered_tree.get('item'))
Esempio n. 6
0
    def test_object_not_copied(self):
        myobj = object()

        tree = {
            'item': myobj,
            'children': []}

        filtered_tree = filter_tree(lambda item: True, tree, copy=True)

        # Only structure (dicts, lists) should be copied, but the values
        # of the dicts.
        self.assertEqual(tree.get('item'), filtered_tree.get('item'))
Esempio n. 7
0
    def test_filter_tree_filter_root(self):
        tree = {
            'title': 'A',
            'remove': True,
            'children': [{
                'title': 'B',
                'remove': False,
                'children': []
            }]
        }

        expected_tree = None

        self.assertEqual(
            filter_tree(lambda item: not item.get('remove'), tree),
            expected_tree)
Esempio n. 8
0
    def test_filter_tree_filter_root(self):
        tree = {
            'title': 'A',
            'remove': True,
            'children': [

                {'title': 'B',
                 'remove': False,
                 'children': []}
                ]
            }

        expected_tree = None

        self.assertEqual(filter_tree(lambda item: not item.get('remove'),
                                     tree),
                         expected_tree)