(func, value, apply_to_keys, value_path)
| 16 | |
| 17 | |
| 18 | def _do_apply(func, value, apply_to_keys, value_path): |
| 19 | if value_path is None: |
| 20 | value_path = [] |
| 21 | |
| 22 | if isinstance(value, list) or isinstance(value, tuple): |
| 23 | res = [] |
| 24 | for ind, item in enumerate(value): |
| 25 | path = copy.copy(value_path) |
| 26 | path.append(ind) |
| 27 | res.append(_do_apply(func, item, apply_to_keys, path)) |
| 28 | elif isinstance(value, dict): |
| 29 | if is_external(value): |
| 30 | # this is a special serialized object pointing to some external place |
| 31 | res = func(value, value_path) |
| 32 | else: |
| 33 | res = {} |
| 34 | for key, val in sorted(value.items(), key=lambda dict_item: dict_item[0]): |
| 35 | path = copy.copy(value_path) |
| 36 | path.append(key) |
| 37 | res[_do_apply(func, key, apply_to_keys, path) if apply_to_keys else key] = _do_apply(func, val, apply_to_keys, path) |
| 38 | else: |
| 39 | res = func(value, value_path) |
| 40 | return res |
| 41 | |
| 42 | |
| 43 | def apply(func, value, apply_to_keys=False): |
no test coverage detected