crowemi / target-s3

singer.io target for S3 built with @meltano SDK
https://hub.meltano.com/loaders/target-s3
9 stars 24 forks source link

bug: `TypeError: Object of type datetime is not JSON serializable` #1

Closed pnadolny13 closed 1 year ago

pnadolny13 commented 1 year ago

I'm getting an error with format_type: json when theres a datetime value in my records.

2023-04-03 13:40:43,236 Target 'target-s3' is listening for input from tap.
2023-04-03 13:40:43,236 Initializing 'target-s3' target sink...
2023-04-03 13:40:43,236 Initializing target sink for stream 'Account'...
2023-04-03 13:40:43,237 Target 'target-s3' completed reading 4 lines of input (2 records, (0 batch manifests, 1 state messages).
2023-04-03 13:40:43,249 key: <my-bucket>/s3_loader/Account/2023/04/03/20230403
Traceback (most recent call last):
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/bin/target-s3", line 8, in <module>
    sys.exit(Targets3.cli())
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 564, in cli
    target.listen(file_input)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/singer_sdk/io_base.py", line 35, in listen
    self._process_endofpipe()
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 280, in _process_endofpipe
    self.drain_all(is_endofpipe=True)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 441, in drain_all
    self._drain_all(list(self._sinks_active.values()), self.max_parallelism)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 474, in _drain_all
    Parallel()(delayed(_drain_sink)(sink=sink) for sink in sink_list)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/joblib/parallel.py", line 1098, in __call__
    self.retrieve()
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/joblib/parallel.py", line 975, in retrieve
    self._output.extend(job.get(timeout=self.timeout))
  File "/Users/pnadolny/.pyenv/versions/3.9.7/lib/python3.9/multiprocessing/pool.py", line 771, in get
    raise self._value
  File "/Users/pnadolny/.pyenv/versions/3.9.7/lib/python3.9/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/joblib/_parallel_backends.py", line 620, in __call__
    return self.func(*args, **kwargs)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/joblib/parallel.py", line 288, in __call__
    return [func(*args, **kwargs)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/joblib/parallel.py", line 288, in <listcomp>
    return [func(*args, **kwargs)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 471, in _drain_sink
    self.drain_one(sink)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 461, in drain_one
    sink.process_batch(draining_status)
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/target_s3/sinks.py", line 48, in process_batch
    format_type_client.run()
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/target_s3/formats/format_json.py", line 20, in run
    return super().run(self.context['records'])
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/target_s3/formats/format_base.py", line 62, in run
    self._write()
  File "/Users/pnadolny/Documents/Git/meltano_project/quickbooks_postgres/qb_pg/.meltano/loaders/target-s3/venv/lib/python3.9/site-packages/target_s3/formats/format_json.py", line 16, in _write
    return super()._write(json.dumps(self.records))
  File "/Users/pnadolny/.pyenv/versions/3.9.7/lib/python3.9/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/Users/pnadolny/.pyenv/versions/3.9.7/lib/python3.9/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/Users/pnadolny/.pyenv/versions/3.9.7/lib/python3.9/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/Users/pnadolny/.pyenv/versions/3.9.7/lib/python3.9/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type datetime is not JSON serializable
crowemi commented 1 year ago

This should be resolved in 0.5.4 here.