Source code for eotransform.collection_transformation
from typing import Dict, Sequence
from eotransform.protocol.transformer import PredicatedTransformer
[docs]def transform_all_dict_elems(d: Dict, pred_trans: PredicatedTransformer):
return {k: _transform_element_in_collection(d, k, pred_trans) for k in d}
[docs]def transform_all_sequence_elems(s: Sequence, pred_trans: PredicatedTransformer):
if isinstance(s, list):
return [_transform_element_in_collection(s, i, pred_trans) for i, _ in enumerate(s)]
elif isinstance(s, tuple):
return tuple(_transform_element_in_collection(s, i, pred_trans) for i, _ in enumerate(s))
def _transform_element_in_collection(collection, index, pred_trans):
v = collection[index]
if pred_trans.is_applicable(index):
return pred_trans.apply(index, v)
if isinstance(v, dict):
return transform_all_dict_elems(v, pred_trans)
if isinstance(v, (list, tuple)):
return transform_all_sequence_elems(v, pred_trans)
return v