diff --git a/target_gcs/sinks.py b/target_gcs/sinks.py index f8b2325..fe47c61 100644 --- a/target_gcs/sinks.py +++ b/target_gcs/sinks.py @@ -9,6 +9,8 @@ from io import FileIO from typing import Optional +import decimal + import orjson import smart_open from google.cloud.storage import Client @@ -82,5 +84,16 @@ def process_record(self, record: dict, context: dict) -> None: passed `context` dict from the current batch. """ self.gcs_write_handle.write( - orjson.dumps(record, option=orjson.OPT_APPEND_NEWLINE) + orjson.dumps( + record, + option=orjson.OPT_APPEND_NEWLINE, + default=_default_serializer, + ) ) + + +def _default_serializer(obj): + """Handle types that orjson cannot serialize natively.""" + if isinstance(obj, decimal.Decimal): + return float(obj) + raise TypeError(f"Type is not JSON serializable: {type(obj)}")