def dict_merge(root, node, combined): # Merge only if node with same name exists already in the list of dicts if node['name'] in [item.get('name') for item in root]: existing_node = get_dict(root, 'name', node['name']) # For combined report of branches, Accounts have subnodes of accounts of each branch. if combined and node.get('type') == 'Account': # Find existing node and make it a subnode (only if it isn't a combined node already) if not existing_node.get('combined'): old_node = copy.deepcopy(existing_node) old_node['name'] = old_node['name'] + ' [' + str( old_node['company']) + ']' existing_node['combined'] = True existing_node['nodes'].append(old_node) existing_node['url'] = None # Create new subnode new_node = copy.deepcopy(node) new_node['name'] = node['name'] + ' [' + str(node['company']) + ']' existing_node['nodes'].append(new_node) # existing_node['name'] += ' [Merged]' existing_node['dr'] += node['dr'] existing_node['cr'] += node['cr'] if len(node['nodes']): for inner_node in node['nodes']: dict_merge(existing_node['nodes'], inner_node, combined) else: root.append(node) return root
def dict_merge(root, node, combined): # Merge only if node with same name exists already in the list of dicts if node['name'] in [item.get('name') for item in root]: existing_node = get_dict(root, 'name', node['name']) # For combined report of branches, Accounts have subnodes of accounts of each branch. if combined and node.get('type') == 'Account': # Find existing node and make it a subnode (only if it isn't a combined node already) if not existing_node.get('combined'): old_node = copy.deepcopy(existing_node) old_node['name'] = old_node['name'] + ' [' + str(old_node['company']) + ']' existing_node['combined'] = True existing_node['nodes'].append(old_node) existing_node['url'] = None # Create new subnode new_node = copy.deepcopy(node) new_node['name'] = node['name'] + ' [' + str(node['company']) + ']' existing_node['nodes'].append(new_node) # existing_node['name'] += ' [Merged]' existing_node['dr'] += node['dr'] existing_node['cr'] += node['cr'] if len(node['nodes']): for inner_node in node['nodes']: dict_merge(existing_node['nodes'], inner_node, combined) else: root.append(node) return root
def get_subnode(node, name): return get_dict(node['nodes'], 'name', name)
def get_subnode(node, name): return get_dict(node['nodes'], 'name', name)