def format_add_kv()

in aliyun/log/etl_core/trans_comp/trans_json.py [0:0]


    def format_add_kv(self, event, fmt, current, value, parent_list, parent_rlist, sep, prefix, suffix):
        if self._skip_keys(current, parent_list):
            logger.info(u"json_transformer: 'key' {0} is not in include keys '{1}' or in exclude keys '{2}', skip it."
                        .format(current, self.include_node, self.exclude_node))
            return

        ret = None
        if isinstance(fmt, (six.text_type, six.binary_type)):
            fmt = json_transformer.FMT_MAP.get(fmt.strip().lower(), fmt)
            try:
                if isinstance(fmt, (six.text_type, six.binary_type)):
                    ret = fmt.format(parent_list=parent_list, parent_rlist=parent_rlist, current=current, sep=sep,
                                     prefix=prefix, suffix=suffix), \
                          json_transformer._n(value)
                else:
                    # callable formatting function
                    ret = fmt(parent_list=parent_list, parent_rlist=parent_rlist, current=current, sep=sep,
                              prefix=prefix, suffix=suffix), \
                          json_transformer._n(value)
            except Exception as ex:
                logger.info(u"json_transformer: fail to format with settings: '{0}'".format((fmt, current, value,
                                                                                            parent_list, sep, prefix,
                                                                                            suffix)))
        elif inspect.isfunction(fmt):
            try:
                ret = fmt(parent_list, current, value)
            except Exception as ex:
                logger.info(u"json_transformer: fail to call formatting string: {0} wuth parameters: {1}"
                            .format(fmt, (parent_list, current, value)))

        if ret and len(ret) == 2:
            k, v = ret
            event[json_transformer._n(k)] = json_transformer._n(v)
        else:
            logger.info(u"json_transformer: unexpected format result: {0}, fmt: '{1}', k: '{2}', v: '{3}', skip it"
                        .format(ret, fmt, current, value))