def process_event()

in aliyun/log/etl_core/etl_util.py [0:0]


def process_event(event, fn_list, cp=True):
    if not len(fn_list):
        return event

    new_event = event
    if cp:
        new_event = copy.copy(event)

    if isinstance(new_event, dict):
        new_event = fn_list[0](new_event)
        return process_event(new_event, fn_list[1:], cp=False)
    elif isinstance(new_event, (tuple, list)):
        result = []
        for e in new_event:
            new_e = fn_list[0](e)
            ret = process_event(new_e, fn_list[1:], cp=False)
            if ret is None:
                continue

            if isinstance(ret, (tuple, list)):
                result.extend(ret)
            else:
                result.append(ret)

        if result:
            if len(result) == 1:
                return result[0]
            return result
        return None  # return None for empty list

    return new_event