Skip to content

Releases: databento/dbn

0.56.0

28 Apr 19:42
c932836

Choose a tag to compare

Release notes

Enhancements

  • Added DecodeRecordRef::decode_buf_iter() for lazily iterating owned RecordBufs
    via a standard Iterator
  • Added AsyncDecodeRecordRef::decode_stream() for lazily decoding owned RecordBufs
    via a futures::Stream
    • Added async-stream and futures-core dependencies (gated on async feature)
  • Improved DbnFsm decode throughput by making AlignedBuffer shifts lazy,
    deferring the internal move to buffer refill boundaries (credit: @wtn)
  • Added new publisher values for Cboe Titanium Cboe Global Indices Feed
  • Added support for splitting files by year to TimeSplitter
  • Improved Python DBNDecoder.decode() performance with pre-allocated output buffers
  • Added DBNDecoder.write_and_decode() to combine write and decode in a single call
  • Upgraded pyo3 to 0.28.3
    • Declared free-threaded Python support on the databento_dbn extension module. Not
      yet building free-threaded wheels in CI

0.55.0

21 Apr 19:53
3fec70d

Choose a tag to compare

Release notes

Enhancements

  • Added new publisher values for OPRA MEMX MX2 Options and IEX Options
  • Improved DbnFsm decode throughput on current-version data and AsIs workloads by
    caching whether the upgrade policy-version combination requires upgrading, skipping
    the per-record upgrade_record dispatch on the fast path (credit: @wtn)

Bug fixes

  • Removed unsound Copy and Clone implementations for RecordRefMut

0.54.0

14 Apr 17:37
772a1d2

Choose a tag to compare

Release notes

Enhancements

  • Added RecordBuf, an owned stack-allocated buffer for holding a DBN record of
    dynamic type. Complements RecordRef (borrowed, dynamic) and concrete types
    (owned, static). Supports get(), try_get(), set(), upgrade(), and
    cross-capacity PartialEq
  • Added RecordRefMut for mutable non-owning references to DBN records
  • Added RecordRef::to_owned() and RecordRefMut::to_owned() for converting
    borrowed records to an owned RecordBuf
  • Added Hash, PartialEq, and Eq for RecordRef, including cross-type equality
    between RecordBuf and RecordRef
  • Changed RecordHeader to be Copy

Release notes

Enhancements

  • Added RecordBuf, an owned stack-allocated buffer for holding a DBN record of
    dynamic type. Complements RecordRef (borrowed, dynamic) and concrete types
    (owned, static). Supports get(), try_get(), set(), upgrade(), and
    cross-capacity PartialEq
  • Added RecordRefMut for mutable non-owning references to DBN records
  • Added RecordRef::to_owned() and RecordRefMut::to_owned() for converting
    borrowed records to an owned RecordBuf
  • Added Hash, PartialEq, and Eq for RecordRef, including cross-type equality
    between RecordBuf and RecordRef
  • Changed RecordHeader to be Copy

0.53.0

07 Apr 17:44
3ba305b

Choose a tag to compare

Release notes

Enhancements

  • Made ts_out a permanent field on all Python record types, replacing the
    dynamic __dict__ attribute. ts_out returns an int (UNDEF_TIMESTAMP when
    not set)
  • Removed __dict__ from all Python record classes, eliminating a separate
    per-instance allocation
  • FlagSet setter methods are now const, making it easier to define constants, e.g.
    const FLAGS: FlagSet = FlagSet::empty().set_snapshot().set_last()

Breaking changes

  • record.ts_out now returns UNDEF_TIMESTAMP instead of raising AttributeError
    when ts_out is not set. Code using hasattr(record, "ts_out") should check
    record.ts_out != UNDEF_TIMESTAMP instead
  • bytes(record) now includes the 8-byte ts_out suffix when the record was
    created with ts_out. Code that separately appends ts_out bytes after
    bytes(record) should be updated to avoid double-writing
  • Arbitrary attribute assignment on record instances is no longer supported

Bug fixes

  • Fixed memory leak around ts_out assignment

Release notes

Enhancements

  • Made ts_out a permanent field on all Python record types, replacing the
    dynamic __dict__ attribute. ts_out returns an int (UNDEF_TIMESTAMP when
    not set)
  • Removed __dict__ from all Python record classes, eliminating a separate
    per-instance allocation
  • FlagSet setter methods are now const, making it easier to define constants, e.g.
    const FLAGS: FlagSet = FlagSet::empty().set_snapshot().set_last()

Breaking changes

  • record.ts_out now returns UNDEF_TIMESTAMP instead of raising AttributeError
    when ts_out is not set. Code using hasattr(record, "ts_out") should check
    record.ts_out != UNDEF_TIMESTAMP instead
  • bytes(record) now includes the 8-byte ts_out suffix when the record was
    created with ts_out. Code that separately appends ts_out bytes after
    bytes(record) should be updated to avoid double-writing
  • Arbitrary attribute assignment on record instances is no longer supported

Bug fixes

  • Fixed memory leak around ts_out assignment

0.52.1

31 Mar 20:23
3c9465c

Choose a tag to compare

Release notes

Enhancements

  • Added __index__ to all int-representable and char-backed Python enums, enabling
    use with int(), hex(), and as sequence indices

Bug fixes

  • Fixed memory leak in Python bindings where every record object leaked ~64 bytes
    due to a pyo3 0.28 regression in #[pyclass(dict)] deallocation. Downgraded
    pyo3 to 0.27.2
  • Removed unnecessary dict from BidAskPair and ConsolidatedBidAskPair Python
    classes
  • Fixed Python type stubs to reflect that record_size() is a method, not a property
  • Fixed Python type stubs for record fields to indicate which fields are writable
    (e.g. publisher_id, instrument_id, price, size) and added @setter stubs
    for enum fields (e.g. action, side)

0.52.0

17 Mar 19:52
2e99e61

Choose a tag to compare

Release notes

Enhancements

  • Added SYMBOL_CSTR_LEN constant and versioned variants (SYMBOL_CSTR_LEN_V1,
    SYMBOL_CSTR_LEN_V2, SYMBOL_CSTR_LEN_V3) to Python, including in each versioned
    module (v1, v2, v3) as SYMBOL_CSTR_LEN
  • Added v1, v2, and v3 submodule imports to databento_dbn.__init__ so they are
    accessible as attributes (e.g. databento_dbn.v1)
  • Upgraded pyo3 version to 0.28.2

0.51.0

03 Mar 23:42
e82fdff

Choose a tag to compare

Release notes

Enhancements

  • Added logic to set code when upgrading version 1 ErrorMsg to newer versions
  • Upgraded async-compression dependency version to 0.4.41
  • Upgraded time version to 0.3.47

Bug fixes

  • Fixed miri issue with potential for unaligned data when decoding DBN through DbnFsm

0.50.0

24 Feb 22:17
e454317

Choose a tag to compare

Release notes

Enhancements

  • Added SkippedRecordsAfterSlowReading to the ErrorCode enum for gateway errors
    originating from slow client catch-up

0.49.0

17 Feb 20:54
ceae0dc

Choose a tag to compare

Release notes

Enhancements

  • Added encode_records to EncodeRecord and AsyncEncodeRecord traits for more
    efficient batch encoding
  • Added encode_record_refs to EncodeRecordRef and AsyncEncodeRecordRef traits with
    more efficient vectored I/O implementation for DBN
  • Added support for decompressing Zstd in the Python DBNDecoder and new optional
    compression parameter

Breaking changes

  • Moved encode_records method from the EncodeDbn trait to EncodeRecord

0.48.0

27 Jan 17:12
4b776ae

Choose a tag to compare

Release notes

Enhancements

  • Added initial support for splitting DBN files:
    • Added new SplitEncoder that supports synchronous and asynchronous encoding
    • Added new Splitter trait that allows for extensible splitting of files while
      reusing the SplitEncoder boilerplate.
    • Added SchemaSplitter, SymbolSplitter, and TimeSplitter which allow for
      different methods of splitting DBN files
    • Added split support to the CLI. For example:
      dbn mbo.dbn --split-by week --output-pattern '{date}.json' --json
  • Added new publisher for Blue Ocean ATS (OCEA_MEMOIR_OCEA)

Bug fixes

  • Fixed issue where AsyncDynReader instances created from with_buffer() would only
    decode the first frame of multi-frame Zstandard files