xbbg 1.0.0rc4
Pre-release
Pre-release
·
289 commits
to main
since this release
Changed
- PyPI classifiers: Added
Development Status :: 5 - Production/Stable,Intended Audience :: Financial and Insurance Industry,Intended Audience :: Science/Research,Topic :: Office/Business :: Financial,Programming Language :: Rust, andTyping :: Typed. - README: Fixed all documentation links from defunct ReadTheDocs to Starlight site (
alpha-xone.github.io/xbbg), updated latest-release marker to rc3, removed stale Codecov/Codacy/CodeFactor badges, replaced deadAuto CIbuild badge withci-rust.yml, and removed "beta" language in project description. - Issue templates: Updated documentation links and environment version examples for v1.
- CONTRIBUTING.md: Corrected minimum Rust version from 1.70 to 1.75.
Added
- Bloomberg SDK ABI compatibility check: New
scripts/abi-check.shand CI job that verifies every C symbol xbbg-core depends on exists across SDK versions (oldest supported through latest). Minimum supported SDK version defined indefs/bloomberg.toml(min_sdk_version). - SECURITY.md: Restored security policy with vulnerability reporting instructions and hardening notes.
- GitHub Pages deploy workflow: Added
deploy-docs.ymlfor automated Starlight docs deployment on push to main. - Documentation: Wrote complete content for all guide and reference pages (migration, streaming, async, backends, output formats, configuration, type mappings).
Fixed
- Shutdown panic (issue #270): Fixed tokio worker thread panic (
Python::attachafterPy_Finalize) when Python exits with active subscriptions. Root cause:signal_shutdown()didn't close the data path to__anext__, leaving tokio futures alive during interpreter teardown. Fix addsEngine::shutdown_signal(watch channel) that immediately wakes pending__anext__futures, andshutdown_safe_futurewrapper that preventsfuture_into_pyfrom delivering results to a dead interpreter. Affects all async methods (requests, subscriptions, recipes). - Engine startup race condition (issue #272):
configure()no longer raisesRuntimeErrorif the engine was auto-created with defaults before configuration (e.g., by a health check or background thread in FastAPI). It now shuts down the default engine with aRuntimeWarningand stores the new config for the next request. Also added thread safety to_get_engine()(double-checked locking) and clear error messages when sync wrappers (bdp,bdh, etc.) are called inside async contexts. - Type checking: Resolved all 178
tyerrors to zero. Exception classes properly subclassed in Python instead of monkey-patching__init__on Rust classes. Added exception stubs to_core/__init__.pyi. Remaining 6type: ignorecomments are all upstream stub gaps (narwhals, stdlib, platform-specific). - Unused
pandasimport: Removed leftoverTYPE_CHECKINGimport ofpandasinblp.pyafterFormat.WIDEremoval. - Exception hierarchy:
BlpRequestError,BlpSecurityError,BlpFieldError, andBlpValidationErrorare now proper Python subclasses of the Rust base classes with typed__init__signatures, replacing fragile__init__monkey-patching.
Security
- Pygments ReDoS (CVE): Upgraded Pygments 2.19.2 to 2.20.0, fixing a regular expression denial of service in GUID matching.
Removed
OverflowPolicy::DropOldest: Removed unimplemented overflow policy that silently behaved asDropNewest. Will be reintroduced in a future release with correct ring-buffer semantics. Use'drop_newest'(default) or'block'.Format.WIDE: Removed the deprecated wide output format. UseFormat.SEMI_LONGfor field-as-column output, or call.pivot()onFormat.LONGresults.asset_config(): Removed the deprecated market config helper. Usemarket_info(ticker)instead.
Full Changelog: v0.12.2...v1.0.0rc4