Skip to content

xbbg 1.4.6

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Aug 22:57

Changed

  • Linux artifacts now support glibc 2.28 and newer: wheels, the @xbbg/core-linux-x64 native addon, and the xbbg-mcp linux-amd64 binary build inside the manylinux_2_28 (AlmaLinux 8) container instead of on bare ubuntu-latest, so they run on RHEL/Alma/Rocky 8, Debian 10+, Ubuntu 20.04+, and Amazon Linux 2023. Linux wheels are tagged manylinux_2_28_x86_64 (enforced via auditwheel repair --plat), and the new scripts/check-glibc-max.sh guard fails CI and release builds if any Linux binary references newer GLIBC symbol versions.
  • lookback_days on active_cdx is now a minimum, not the whole window: the activity window always reaches back to the resolved series' first accrual date, so "this series has traded" can only flip false to true as the date advances.

Removed

  • BREAKING -- **kwargs on xbbg.ext.acdx_ticker / aactive_cdx: these forwarded Bloomberg request keywords to internal metadata lookups and never affected the returned ticker; passing them is now a TypeError.

Fixed

  • CDX series resolution is now as-of the requested date, and monotone: cdx_ticker / active_cdx, Engine.cdxTicker() / Engine.activeCdx(), and the underlying xbbg-recipes entry points resolve the series whose Bloomberg CDS_FIRST_ACCRUAL_START_DATE is the latest one on or before the reference date, walking the accrual ladder in batched reference-data requests. Previously they read ROLLING_SERIES off the generic ticker -- a point-in-time field that reports today's series whatever date was asked for -- and stepped back at most one series, so every historical date collapsed onto the current series or its predecessor (cdx_ticker('CDX IG CDSI GEN 5Y Corp', '2020-06-01') returned S45; it now returns S34). active_cdx additionally chose between the two candidates by whichever had the later PX_LAST print, which flipped the answer back to the older series on any day the newer one had not yet printed. Series, and version within a series, are now non-decreasing as the date advances.
  • CDX roll dates are read, not assumed: the semi-annual cadence only sizes the candidate window; the series is decided by comparing against the accrual dates Bloomberg returns. Business-day-adjusted rolls therefore resolve exactly -- CDX.NA.IG.45 first accrues 2025-09-22, so 2025-09-21 resolves to S44.
  • CDX version is resolved per series: the Vn token is the version Bloomberg reports for the resolved series (CDX.NA.HY.32 resolves to V14, HY.40 to V4), instead of the current series' version stamped onto every answer. Version is scoped to a series and resets at each roll, so it is non-decreasing within a series but not across one.
  • BREAKING -- failed CDX resolution raises: xbbg.ext.cdx_ticker / active_cdx no longer swallow Bloomberg errors, missing metadata, or unparseable series numbers into an empty-string ticker. They now delegate to the same xbbg-recipes resolver as @xbbg/core, so the Python and JavaScript surfaces cannot drift apart, and raise ValueError (non-generic ticker, date before the index's first series) or RuntimeError (missing or inconsistent Bloomberg metadata) instead. Callers that tested for "" must catch instead.
  • Clean session shutdown no longer logs SessionConnectionDown / SessionTerminated as WARN/ERROR (#346): tearing an engine down -- including the implicit teardown at interpreter exit after a one-shot call such as blp.bdh() -- makes the Bloomberg SDK emit both events for every pooled session. The request path already recognized a requested shutdown and logged at INFO, but the subscription path did not, so any script that simply ran a request printed a spurious SessionTerminated -- SDK gave up reconnecting; closing subscriptions at ERROR on exit, with active_subs=0 and an empty reason. Subscription workers now publish the shutdown flag before asking the SDK to stop and classify each lifecycle event (shutdown_in_progress at INFO versus connection_down_without_shutdown / termination_without_shutdown at the original WARN/ERROR), so genuine mid-session failures keep their severity.
  • import xbbg no longer leaks SyntaxWarnings from Bloomberg's blpapi wheel (#346): importing xbbg runs SDK discovery, which imports the blpapi Python package because the pip wheel ships the shared library and is probed ahead of a Terminal DAPI install. Bloomberg's resolutionlist.py and topiclist.py contain invalid escape sequences in their docstrings, so Python 3.12+ printed SyntaxWarning: invalid escape sequence '\s' on first import for anyone with the wheel installed -- from an import the caller never asked for. Discovery now performs that import with SyntaxWarning filtered, leaving the user's own warning filters untouched.

Full Changelog: v1.4.5...v1.4.6