Merge pull request #68 from FlipsideCrypto/addnew/decompress-zlib-udf

addnew/decompress-zlib-udf
This commit is contained in:
drethereum 2025-11-04 13:45:28 -07:00 committed by GitHub
commit 3697967c46
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 43 additions and 0 deletions

View File

@ -254,6 +254,18 @@
sql: |
{{ fsc_utils.create_udtf_flatten_overflowed_responses() | indent(4) }}
- name: {{ schema }}.udf_decompress_zlib
signature:
- [compressed_string, STRING]
return_type: STRING
options: |
LANGUAGE PYTHON
RUNTIME_VERSION = '3.10'
COMMENT = 'Decompresses zlib/deflate-compressed data from Python bytes literal string format'
HANDLER = 'decompress_zlib'
sql: |
{{ fsc_utils.create_udf_decompress_zlib() | indent(4) }}
- name: {{ schema }}.udf_stablecoin_data_parse
signature:
- [peggeddata_content, STRING]

View File

@ -542,6 +542,37 @@ class FlattenRows:
return list(cleansed[np.roll(cleansed.columns.values, 1).tolist()].itertuples(index=False, name=None))
{% endmacro %}
{% macro create_udf_decompress_zlib() %}
import zlib
import codecs
def decompress_zlib(compressed_string):
try:
if not compressed_string:
return None
# Remove b prefix and suffix if present
if compressed_string.startswith("b'") and compressed_string.endswith("'"):
compressed_string = compressed_string[2:-1]
elif compressed_string.startswith('b"') and compressed_string.endswith('"'):
compressed_string = compressed_string[2:-1]
# Decode the escaped string to bytes
compressed_bytes = codecs.decode(compressed_string, 'unicode_escape')
# Convert to bytes if string
if isinstance(compressed_bytes, str):
compressed_bytes = compressed_bytes.encode('latin-1')
# Decompress the zlib data
decompressed = zlib.decompress(compressed_bytes)
# Return as UTF-8 string
return decompressed.decode('utf-8')
except Exception as e:
return f"Error decompressing: {str(e)}"
{% endmacro %}
{% macro create_udf_stablecoin_data_parse() %}
import re