Total Complexity | 5 |
Total Lines | 23 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | # -*- coding: utf-8 -*- |
||
2 | |||
3 | from benedict.core.groupby import groupby |
||
4 | |||
5 | |||
6 | def _nest_items(nested_items, item, id_key, children_key): |
||
7 | children_items = nested_items.pop(item[id_key], []) |
||
8 | item[children_key] = children_items |
||
9 | for child_item in children_items: |
||
10 | _nest_items(nested_items, child_item, id_key, children_key) |
||
11 | |||
12 | |||
13 | def nest(items, id_key, parent_id_key, children_key): |
||
14 | if any([id_key == parent_id_key, |
||
15 | id_key == children_key, |
||
16 | parent_id_key == children_key]): |
||
17 | raise ValueError('keys should be different.') |
||
18 | nested_items = groupby(items, parent_id_key) |
||
19 | root_items = nested_items.get(None, []) |
||
20 | for item in root_items: |
||
21 | _nest_items(nested_items, item, id_key, children_key) |
||
22 | return nested_items.get(None) |
||
23 |