Skip to content

xbbg 1.0.0rc4

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Mar 03:58
· 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, and Typing :: 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 dead Auto CI build badge with ci-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.sh and CI job that verifies every C symbol xbbg-core depends on exists across SDK versions (oldest supported through latest). Minimum supported SDK version defined in defs/bloomberg.toml (min_sdk_version).
  • SECURITY.md: Restored security policy with vulnerability reporting instructions and hardening notes.
  • GitHub Pages deploy workflow: Added deploy-docs.yml for 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::attach after Py_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 adds Engine::shutdown_signal (watch channel) that immediately wakes pending __anext__ futures, and shutdown_safe_future wrapper that prevents future_into_py from delivering results to a dead interpreter. Affects all async methods (requests, subscriptions, recipes).
  • Engine startup race condition (issue #272): configure() no longer raises RuntimeError if 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 a RuntimeWarning and 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 ty errors to zero. Exception classes properly subclassed in Python instead of monkey-patching __init__ on Rust classes. Added exception stubs to _core/__init__.pyi. Remaining 6 type: ignore comments are all upstream stub gaps (narwhals, stdlib, platform-specific).
  • Unused pandas import: Removed leftover TYPE_CHECKING import of pandas in blp.py after Format.WIDE removal.
  • Exception hierarchy: BlpRequestError, BlpSecurityError, BlpFieldError, and BlpValidationError are 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 as DropNewest. 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. Use Format.SEMI_LONG for field-as-column output, or call .pivot() on Format.LONG results.
  • asset_config(): Removed the deprecated market config helper. Use market_info(ticker) instead.

Full Changelog: v0.12.2...v1.0.0rc4