benedict.core.traverse._traverse_collection()   A
last analyzed

Complexity

Conditions 3

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 3
nop 2
1
from benedict.utils import type_util
2
3
4
def _traverse_collection(d, callback):
5
    if type_util.is_dict(d):
6
        _traverse_dict(d, callback)
7
    elif type_util.is_list_or_tuple(d):
8
        _traverse_list(d, callback)
9
10
11
def _traverse_dict(d, callback):
12
    keys = list(d.keys())
13
    for key in keys:
14
        value = d.get(key, None)
15
        callback(d, key, value)
16
        _traverse_collection(value, callback)
17
18
19
def _traverse_list(ls, callback):
20
    items = list(enumerate(ls))
21
    for index, value in items:
22
        callback(ls, index, value)
23
        _traverse_collection(value, callback)
24
25
26
def traverse(d, callback):
27
    if not callable(callback):
28
        raise ValueError("callback argument must be a callable.")
29
    _traverse_collection(d, callback)
30