ethereum-models/macros/python/transform_logs.sql
Austin 57c1e166e6
An 2605/decoded data (#327)
* decoded data

* rename

* - update udf to check if value is a list

* - add try/except in udf_transform_logs

* - add schema paraemter when calling macro for decoding logs

* - fixed transform udf

* - removed extraneous list for transformed events

* - removed unused variables in transform_logs macro

* - fixed dupe transformed events

* - removed nesting of components

* updates

* remove array check

* docs

* docs

Co-authored-by: Julius Remigio <14811322+juls858@users.noreply.github.com>
2022-12-21 16:16:11 -05:00

34 lines
942 B
PL/PgSQL

{% macro create_udf_transform_logs(schema) %}
create or replace function {{ schema }}.udf_transform_logs(decoded variant)
returns variant
language python
runtime_version = '3.8'
handler = 'transform' as $$
from copy import deepcopy
def transform_event(event: dict):
new_event = deepcopy(event)
if new_event.get("components"):
components = new_event.get("components")
for iy, y in enumerate(new_event["value"]):
for i, c in enumerate(components):
y[i] = {"value": y[i], **c}
new_event["value"][iy] = {z["name"]: z["value"] for z in y}
return new_event
else:
return event
def transform(events: list):
try:
results = [
transform_event(event) if event["decoded"] else event
for event in events["data"]
]
events["data"] = results
return events
except:
return events
$$;
{% endmacro %}