Releases: databento/dbn
Releases · databento/dbn
0.16.0
Release notes
Enhancements
- Updated
StatusMsg
and made it public in preparation for releasing a status schema - Added
StatusAction
,StatusReason
,TradingEvent
, andTriState
enums for use in
the status schema - Added
-t
and--tsv
flags to DBN CLI to encode tab-separated values (TSV) - Added
delimiter
method to builders forDynEncoder
andCsvEncoder
to customize the
field delimiter character, allowing DBN to be encoded as tab-separated values (TSV) - Document cancellation safety for
AsyncRecordDecoder::decode_ref
(credit: @yongqli) - Added new publisher values for consolidated DBEQ.MAX
- Added C FFI conversion functions from
ErrorMsgV1
toErrorMsg
andSystemMsgV1
toSystemMsg
- Improved documentation for
side
field andSide
enum - Upgraded
async-compression
to 0.4.6 - Upgraded
strum
to 0.26
Breaking changes
- Changed default for
VersionUpgradePolicy
toUpgrade
- Changed default
upgrade_policy
forDbnDecoder
,AsyncDbnDecoder
, and Python
DBNDecoder
toUpgrade
so by default the primary record types can always be used - Changed fields of previously-hidden
StatusMsg
record type - Updated text serialization order of status schema to match other schemas
- Changed text serialization
unit_of_measure_qty
to be affected bypretty_px
. While
it's not a price, it uses the same fixed-price decimal format as other prices - Made
StatType
andVersionUpgradePolicy
non-exhaustive to allow future additions
without breaking changes - Renamed
_dummy
field inImbalanceMsg
andStatMsg
to_reserved
- Added
ts_out
parameter toRecordDecoder
andAsyncRecordDecoder
with_upgrade_policy
methods
Bug fixes
- Fixed handling of
ts_out
when upgrading DBNv1 records to version 2 - Added missing
StatType::Vwap
variant used in the ICE datasets - Fixed an issue with Python stub file distribution
- Fixed missing handling of
ErrorMsgV1
andSystemMsgV1
inrtype
dispatch macros
0.15.1
Release notes
Bug fixes
- Fixed an import error in the Python type stub file
0.15.0
Release notes
Enhancements
- Improved
Debug
implementation for all record types- Prices are formatted as decimals
- Fixed-length strings are formatted as strings
- Bit flag fields are formatted as binary
- Several fields are formatted as enums instead of their raw representations
- Improved
Debug
implementation forRecordRef
to showRecordHeader
- Added
--schema
option todbn
CLI tool to filter a DBN to a particular schema. This
allows outputting saved live data to CSV - Allowed passing
--limit
option todbn
CLI tool with--metadata
flag - Improved performance of decoding uncompressed DBN fragments with the
dbn
CLI tool - Added builders to
CsvEncoder
,DynEncoder
, andJsonEncoder
to assist with the
growing number of customizations- Added option to write CSV header as part of creating
CsvEncoder
to make it harder
to forget
- Added option to write CSV header as part of creating
- Added
-s
/--map-symbols
flag to CLI to create asymbol
field in the output with
the text symbol mapped from the instrument ID - Added
version
param to PythonMetadata
contructor choose between DBNv1 and DBNv2 - Implemented
EncodeRecordTextExt
forDynEncoder
- Implemented
Deserialize
andSerialize
for all records and enums (withserde
feature enabled). This allows serializing records with additional encodings not
supported by the DBN crate - Implemented
Hash
for all record types - Added new publisher value for OPRA MIAX Sapphire
- Added Python type definition for
Metadata.__init__
- Added
metadata_mut
method to decoders to get a mutable reference to the decoded
metadata - Improved panic message on
RecordRef::get
when length doesn't match expected to be
actionable - Added
encode::ZSTD_COMPRESSION_LEVEL
constant
Breaking changes
- Increased size of
SystemMsg
andErrorMsg
to provide better messages from Live
gateway- Increased length of
err
andmsg
fields for more detailed messages - Added
is_last
field toErrorMsg
to indicate the last error in a chain - Added
code
field toSystemMsg
andErrorMsg
, although currently unused - Added new
is_last
parameter toErrorMsg::new
- Decoding these is backwards-compatible and records with longer messages won't be
sent during the DBN version 2 migration period - Renamed previous records to
compat::ErrorMsgV1
andcompat::SystemMsgV1
- Increased length of
- Split
DecodeDbn
trait intoDecodeRecord
andDbnMetadata
traits for more
flexibility.DecodeDbn
continues to exist as a trait alias - Moved
decode_stream
out ofDecodeDbn
to its own separate traitDecodeStream
- Changed trait bounds of
EncodeDbn::encode_decoded
andencode_decoded_with_limit
to
DecodeRecordRef + DbnMetadata
Bug fixes
- Fixed panic in
TsSymbolMap
whenstart_date
==end_date
- Added missing Python
__eq__
and__ne__
implementations forBidAskPair
- Fixed Python
size_hint
return value forInstrumentDefMsgV1
and
SymbolMappingMsgV1
- Fixed cases where
dbn
CLI tool would write a broken pipe error to standard error
such as when piping tohead
- Fixed bug in sync and async
MetadataEncoder
s whereversion
was used to determine
the encoded length of fixed-length symbols instead of thesymbol_cstr_len
field
0.14.2
Release notes
Enhancements
- Added
set_upgrade_policy
setters toDbnDecoder
,DbnRecordDecoder
,
AsyncDbnDecoder
, andAsyncDbnRecordDecoder
- Added
from_schema
classmethod for PythonRType
enum
Breaking changes
- Renamed parameter for Python Enum classmethod constructors to
value
fromdata
.
0.14.1
Release notes
Enhancements
- Added new trait
compat::SymbolMappingRec
for code reuse when working with
both versions ofSymbolMappingMsg
- Changed
PitSymbolMap::on_symbol_mapping
to accept either version of
SymbolMappingMsg
Bug fixes
- Fixed missing DBNv1 compatibility in
PitSymbolMap::on_record
- Fixed missing Python export for
VersionUpgradePolicy
- Fixed missing Python export and methods for
InstrumentDefMsgV1
and
SymbolMappingMsgV1
- Fixed bug where Python
DbnDecoder
andTranscoder
would throw exceptions
when attempting to decode partial metadata
0.14.0
Release notes
Enhancements
- This version begins the transition to DBN version 2 (DBNv2). In this version, the
decoders support decoding both versions of DBN and the DBN encoders default to
keeping version of the input. However, in a future version, decoders will by default
convert DBNv1 to DBNv2 and support will be dropped for encoding DBNv1.- Affects
SymbolMappingMsg
,InstrumentDefMsg
, andMetadata
. All other record
types and market data schemas are unchanged - Version 1 structs can be converted to version 2 structs with the
From
trait
- Affects
- Added
symbol_cstr_len
field toMetadata
to indicate the length of fixed symbol
strings - Added
stype_in
andstype_out
fields toSymbolMappingMsg
to provide more context
with live symbology updates - Added smart wrapping to
dbn
CLI help output - Updated
rtype_dispatch
family of macros to check record length to handle both
versions of records. This is temporary during the transition period - Added
VersionUpgradePolicy
enum and associated methods to the decoders to
allow specifying how to handle decoding records from prior DBN versions - Added
Metadata::upgrade()
method to updateMetadata
from a prior DBN version to
the latest version - Added
-u
/--upgrade
flags todbn
CLI that when passed upgrades DBN data from
previous versions. By default data is decoded as-is - Made
AsyncDbnDecoder::decode_record
,AsyncDbnDecoder::decode_record_ref
,
dbn::AsyncRecordDecoder::decode
, anddbn::AsyncRecordDecoder::decode_ref
cancellation safe. This makes them safe to use within a
tokio::select!
(https://docs.rs/tokio/latest/tokio/macro.select.html) statement - Added documention around cancellation safety for async APIs
- Improved error messages for conversion errors
- Added
TOB
flag to denote top-of-book messages - Added new publisher values in preparation for IFEU.IMPACT and NDEX.IMPACT datasets
- Added new publisher values for consolidated DBEQ.BASIC and DBEQ.PLUS
- Added
MAX_RECORD_LEN
constant for the length of the largest record type - Exposed record flag constants in
databento_dbn
withF_
prefix - Added export to Python for
RType
Breaking changes
- The old
InstrumentDefMsg
is nowcompat::InstrumentDefMsgV1
compat::InstrumentDefMsgV2
is now an alias forInstrumentDefMsg
- The old
SymbolMappingMsg
is nowcompat::SymbolMappingMsgV1
compat::SymbolMappingMsgV2
is now an alias forSymbolMappingMsg
- Changed
SYMBOL_CSTR_LEN
constant to 71. Previous value is now in
compat::SYMBOL_CSTR_V1
- Changed
DBN_VERSION
constant to 2 security_update_action
was converted to a rawc_char
to safely support adding
variants in the future- Renamed
_dummy
inInstrumentDefMsg
to_reserved
- Removed
_reserved2
,_reserved3
, and_reserved5
fromInstrumentDefMsg
- Removed
_dummy
fromSymbolMappingMsg
- Moved position of
strike_price
withinInstrumentDefMsg
but left text serialization
order unchanged - Made
Error
non-exhaustive, meaning it can no longer be exhaustively matched against.
This allows adding additional error variants in the future without a breaking change - Added
upgrade_policy
parameter toRecordDecoder::with_version
constructor to
control whether records of previous versions will be upgraded - Added
upgrade_policy
parameter toDynDecoder
constructors to control whether
records of previous versions will be upgraded - Renamed
symbol_map
parameter for Python Transcoder tosymbol_interval_map
to
better reflect the date intervals it contains
Deprecations
- Deprecated unused
write_dbn_file
function from Python interface. Please use
Transcoder
instead
Bug fixes
- Fixed typo in Python type definition for
InstrumentDefMsg.pretty_high_limit_price
- Fixed type signature for
Metadata.stype_in
andMetadata.stype_out
Python methods - Fixed incorrect version in
pyproject.toml
0.13.0
Release notes
Enhancements
- Added
SymbolMappingMsgV2::new
method - Added
Record
trait for all types beginning with aRecordHeader
- Added new
index_ts
andraw_index_ts
methods toRecord
trait, which returns the
primary timestamp for a record
- Added new
- Added
RecordMut
trait for accessing a mutable reference to aRecordHeader
- Implemented
PartialOrd
for all record types, based onraw_index_ts
- Loosened
DbnEncodable
from requiringHasRType
to only requiringRecord
. This means
RecordRef
s and concrete records can be encoded with the same methods
Breaking changes
- Split part of
HasRType
into newRecord
andRecordMut
traits, which are object-
safe: they can be used inBox<dyn>
.RecordRef
also implementsRecord
, so it's
easier to write code that works for both concrete records as well asRecordRef
- Removed
RecordRef
methods made redundant by it implementingRecord
- Removed
input_compression
parameter from PythonTranscoder
Deprecations
- Deprecated
SymbolIndex::get_for_rec_ref
, which was made redundant by loosening the
trait bound onSymbolIndex::get_for_rec
to acceptRecordRef
s
Bug fixes
- Fixed
TsSymbolMap
not always using the correct timestamp for getting the mapped
symbol
0.12.0
Release notes
Enhancements
- Added
map_symbols
support to PythonTranscoder
- Added new publisher variants in preparation for DBEQ.PLUS dataset
- Added
from_dataset_venue
function toPublisher
to facilitate destructuring - Implemented
Default
for most records to make testing easier - Added
from_zstd
function toAsyncDbnEncoder
to match synchronous encoder - Added re-exports for
enums::flags
,enums::rtype
,record::BidAskPair
,
record::RecordHeader
, andrecord::WithTsOut
to simplify imports - Added
--fragment
CLI flag for writing DBN without the metadata header - Added
--input-dbn-version
CLI option for specifying the DBN version of a DBN
fragment - Added
serde::Deserialize
implementations forDataset
,Venue
, andPublisher
- Added support for Python 3.12 to
databento_dbn
- Added
RecordDecoder::with_version
for future use when dealing with compatibility
between different DBN versions - Added new dispatch macros:
rtype_ts_out_method_dispatch
,
rtype_ts_out_async_method_dispatch
,rtype_method_dispatch
, and
schema_ts_out_method_dispatch
- Added
InstrumentDefMsgV2
andSymbolMappingMsgV2
for forward compatibility with a
version of DBN - Added
TsSymbolMap
andPitSymbolMap
to aid with both historical and live symbology- Added support for inverse symbology, i.e. with
stype_in=InstrumentId
- Added support for inverse symbology, i.e. with
Breaking changes
- Changed
Metadata::symbol_map
to returnTsSymbolMap
- Changed
Metadata::symbol_map_for_date
to returnPitSymbolMap
- Changed
Default
implementation forBidAskPair
by setting prices toUNDEF_PRICE
- Added new publisher values in preparation for DBEQ.PLUS
- Added
ts_out
parameter toencode_header_for_schema
inCsvEncoder
and
DynEncoder
to allow controlling whether "ts_out" is in the header - Added
from_dataset_venue
function toPublisher
to facilitate
destructuring.
0.11.1
Release notes
Enhancements
- Upgraded
async-compression
to 0.4.3 - Upgraded
csv
to 1.3 - Upgraded
num_enum
to 0.7
Bug fixes
- Changed DBN stream detection to ignore the DBN version
0.11.0
Release notes
Enhancements
- Added new
EncodeRecordTextExt
trait which is implemented for the CSV and JSON
encoders. It adds two methods for encoding asymbol
field along side the rest of the
record fields, matching the behavior ofmap_symbols
in the historical API - Added
encode_header
andencode_header_for_schema
methods toCsvEncoder
and
DynEncoder
to give more flexibility for encoding CSV headers - Added
from_file
andfrom_zstd_file
functions toAsyncDbnDecoder
to match
synchronous decoder - Implemented
Copy
forRecordRef
to make it behave more like a reference - Added
AsyncDbnEncoder
for simpler DBN encoding and to match sync API - Added
RecordEnum
andRecordRefEnum
to more easily be able to pattern match on
records of different types - Added
ARCX.PILLAR.ARCX
publisher - Added
From
DBN records forRecordRef
- Added re-exports to the top level of the crate for all enums and records for simpler
imports - Added
ClosePrice
andNetChange
StatType
s used in theOPRA.PILLAR
dataset
Breaking changes
- Split
encode_record_ref
into a safe method with no arguments and an unsafe method
with ats_out
parameter to reduceunsafe
usage when not working with live data
that may containts_out
Bug fixes
- Fixed
dbn
CLI not writing CSV header when using--fragment
and--zstd-fragment
flags - Fixed lifetime on return value from
RecordRef::get_unchecked
- Fixed missing check for
stype_out
before buildingMetadata
symbology maps