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)
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)
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)
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)
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'))
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'))
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)
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)