Source code for bspump.common.flatten

from ..abc.processor import Processor


[docs] class FlattenDictProcessor(Processor): """ Description: .... Inspired by https://github.com/amirziai/flatten Example: "person": { "details": { "first_name": "John", "last_name": "Doe" }, "address": { "country": "GB", "city": "London", "postal_code": "WC2N 5DU" } } Gets converted to: { "person.details.first_name": "John", "person.details.last_name": "Doe", "person.address.country": "GB", "person.address.city": "London", "person.address.postal_code": "WC2N 5DU" } """ ConfigDefaults = {"separator": "."}
[docs] def __init__(self, app, pipeline, id=None, config=None): """ Description: | """ super().__init__(app, pipeline, id, config) self.Separator = self.Config["separator"]
def _construct_key(self, previous_key, new_key): """ Description: :return: new_key | """ if previous_key: return "{}{}{}".format(previous_key, self.Separator, new_key) else: return new_key
[docs] def flatten(self, nested_dict): """ Description: :return: flattened_dict | """ flattened_dict = dict() def _flatten(object_, key): if not object_: flattened_dict[key] = object_ # Dictionary elif isinstance(object_, dict): for object_key in object_: _flatten(object_[object_key], self._construct_key(key, object_key)) # Anything else else: flattened_dict[key] = object_ _flatten(nested_dict, None) return flattened_dict
[docs] def process(self, context, event): """ Description: :return: event | """ event = self.flatten(event) return event