From aa03a85f33488514c1136dce5fb35b3960c9714d Mon Sep 17 00:00:00 2001 From: Nick Macholl Date: Fri, 20 Dec 2024 15:24:22 -0600 Subject: [PATCH 01/11] MOD: Add root module export for Status enums --- CHANGELOG.md | 7 +++++++ databento/__init__.py | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 917f71cb..587af776 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 0.47.1 - TBD + +#### Enhancements +- Added export of `StatusAction` enum from `databento_dbn` to the root `databento` package +- Added export of `StatusReason` enum from `databento_dbn` to the root `databento` package +- Added export of `TradingEvent` enum from `databento_dbn` to the root `databento` package + ## 0.47.0 - 2024-12-17 #### Enhancements diff --git a/databento/__init__.py b/databento/__init__.py index c06e4aba..9e9db1a3 100644 --- a/databento/__init__.py +++ b/databento/__init__.py @@ -15,11 +15,14 @@ from databento_dbn import Schema from databento_dbn import StatMsg from databento_dbn import StatType +from databento_dbn import StatusAction from databento_dbn import StatusMsg +from databento_dbn import StatusReason from databento_dbn import SType from databento_dbn import SymbolMappingMsg from databento_dbn import SystemMsg from databento_dbn import TradeMsg +from databento_dbn import TradingEvent from databento_dbn.v2 import BBO1MMsg from databento_dbn.v2 import BBO1SMsg from databento_dbn.v2 import CBBO1MMsg @@ -96,7 +99,9 @@ "SplitDuration", "StatMsg", "StatType", + "StatusAction", "StatusMsg", + "StatusReason", "SymbolMappingMsg", "SymbologyResolution", "SystemMsg", @@ -104,6 +109,7 @@ "TBBOMsg", "TCBBOMsg", "TradeMsg", + "TradingEvent", "Venue", ] From 3d1ab19a706084049b1cc7e82e5c62aa8368ded8 Mon Sep 17 00:00:00 2001 From: Nick Macholl Date: Fri, 3 Jan 2025 11:17:30 -0800 Subject: [PATCH 02/11] BLD: Remove Python version upper-bound --- CHANGELOG.md | 3 ++- README.md | 2 +- pyproject.toml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 587af776..c3d27d57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,12 @@ # Changelog -## 0.47.1 - TBD +## 0.48.0 - TBD #### Enhancements - Added export of `StatusAction` enum from `databento_dbn` to the root `databento` package - Added export of `StatusReason` enum from `databento_dbn` to the root `databento` package - Added export of `TradingEvent` enum from `databento_dbn` to the root `databento` package +- Removed upper bound for supported `python` versions; the constraint is now `^3.9` ## 0.47.0 - 2024-12-17 diff --git a/README.md b/README.md index 692f66d8..8ed04187 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # databento-python [![test](https://github.com/databento/databento-python/actions/workflows/test.yml/badge.svg?branch=dev)](https://github.com/databento/databento-python/actions/workflows/test.yml) -![python](https://img.shields.io/badge/python-3.9+-blue.svg) +![python](https://img.shields.io/pypi/pyversions/databento.svg) [![pypi-version](https://img.shields.io/pypi/v/databento)](https://pypi.org/project/databento) [![license](https://img.shields.io/github/license/databento/databento-python?color=blue)](./LICENSE) [![code-style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) diff --git a/pyproject.toml b/pyproject.toml index ddaa8602..72348abc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ repository = "https://github.com/databento/databento-python" "Bug Tracker" = "https://github.com/databento/databento-python/issues" [tool.poetry.dependencies] -python = ">=3.9,<3.14" +python = "^3.9" aiohttp = [ {version = "^3.8.3", python = "<3.12"}, {version = "^3.9.0", python = "^3.12"} From 569231eca7db0ddaad63c3254a5f71e825f02647 Mon Sep 17 00:00:00 2001 From: Nick Macholl Date: Fri, 3 Jan 2025 13:53:06 -0800 Subject: [PATCH 03/11] FIX: Fix blocking on iteration __del__ --- CHANGELOG.md | 3 +++ databento/live/client.py | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3d27d57..b752da93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ - Added export of `TradingEvent` enum from `databento_dbn` to the root `databento` package - Removed upper bound for supported `python` versions; the constraint is now `^3.9` +#### Bug fixes +- Fixed an issue where sending a `KeyboardInterrupt` during iteration of the `Live` client could block execution waiting for the connection to close + ## 0.47.0 - 2024-12-17 #### Enhancements diff --git a/databento/live/client.py b/databento/live/client.py index 978b8672..220cdbc5 100644 --- a/databento/live/client.py +++ b/databento/live/client.py @@ -116,7 +116,7 @@ def __init__( def __del__(self) -> None: try: - self.stop() + self.terminate() except (AttributeError, ValueError): pass @@ -644,10 +644,11 @@ def __iter__(self) -> LiveIterator: return self def __del__(self) -> None: - if self.client.is_connected(): - self.client.stop() - self.client.block_for_close() + try: + self.client.terminate() logger.debug("iteration aborted") + except ValueError: + pass async def __anext__(self) -> DBNRecord: if not self._dbn_queue.is_enabled(): From d7c137e93c7e846bb519f5e1c379b1310d7cd1df Mon Sep 17 00:00:00 2001 From: Zach Banks Date: Mon, 6 Jan 2025 20:54:03 +0000 Subject: [PATCH 04/11] MOD: Adopt `EQUS.SUMMARY`, `EQUS.ALL` names --- databento/common/publishers.py | 769 +++++++++++++++++---------------- 1 file changed, 389 insertions(+), 380 deletions(-) diff --git a/databento/common/publishers.py b/databento/common/publishers.py index 8112fbed..4322658c 100644 --- a/databento/common/publishers.py +++ b/databento/common/publishers.py @@ -95,7 +95,7 @@ class Venue(StringyMixin, str, Enum): NDEX ICE Endex. DBEQ - Databento Equities - Consolidated. + Databento US Equities - Consolidated. SPHR MIAX Sapphire. LTSE @@ -108,6 +108,8 @@ class Venue(StringyMixin, str, Enum): IntelligentCross ASPEN Maker/Taker. ASPI IntelligentCross ASPEN Inverted. + EQUS + Databento US Equities - Consolidated. """ @@ -157,6 +159,7 @@ class Venue(StringyMixin, str, Enum): ASPN = "ASPN" ASMT = "ASMT" ASPI = "ASPI" + EQUS = "EQUS" @classmethod def from_int(cls, value: int) -> Venue: @@ -255,6 +258,8 @@ def from_int(cls, value: int) -> Venue: return Venue.ASMT if value == 46: return Venue.ASPI + if value == 47: + return Venue.EQUS raise ValueError(f"Integer value {value} does not correspond with any Venue variant") def to_int(self) -> int: @@ -353,6 +358,8 @@ def to_int(self) -> int: return 45 if self == Venue.ASPI: return 46 + if self == Venue.EQUS: + return 47 raise ValueError("Invalid Venue") @property @@ -439,7 +446,7 @@ def description(self) -> str: if self == Venue.NDEX: return "ICE Endex" if self == Venue.DBEQ: - return "Databento Equities - Consolidated" + return "Databento US Equities - Consolidated" if self == Venue.SPHR: return "MIAX Sapphire" if self == Venue.LTSE: @@ -452,6 +459,8 @@ def description(self) -> str: return "IntelligentCross ASPEN Maker/Taker" if self == Venue.ASPI: return "IntelligentCross ASPEN Inverted" + if self == Venue.EQUS: + return "Databento US Equities - Consolidated" raise ValueError("Unexpected Venue value") @@ -500,13 +509,13 @@ class Dataset(StringyMixin, str, Enum): OPRA_PILLAR OPRA Binary. DBEQ_BASIC - Databento Equities Basic. + Databento US Equities Basic. ARCX_PILLAR NYSE Arca Integrated. IEXG_TOPS IEX TOPS. - DBEQ_PLUS - Databento Equities Plus. + EQUS_PLUS + Databento US Equities Plus. XNYS_BBO NYSE BBO. XNYS_TRADES @@ -519,16 +528,16 @@ class Dataset(StringyMixin, str, Enum): ICE Futures Europe (Commodities) iMpact. NDEX_IMPACT ICE Endex iMpact. - DBEQ_MAX - Databento Equities Max. + EQUS_ALL + Databento US Equities (All Feeds). XNAS_BASIC Nasdaq Basic (NLS and QBBO). - DBEQ_SUMMARY - Databento Equities Summary. - XCIS_BBOTRADES - NYSE National BBO and Trades. - XNYS_BBOTRADES - NYSE BBO and Trades. + EQUS_SUMMARY + Databento US Equities Summary. + XCIS_TRADESBBO + NYSE National Trades and BBO. + XNYS_TRADESBBO + NYSE Trades and BBO. """ @@ -554,18 +563,18 @@ class Dataset(StringyMixin, str, Enum): DBEQ_BASIC = "DBEQ.BASIC" ARCX_PILLAR = "ARCX.PILLAR" IEXG_TOPS = "IEXG.TOPS" - DBEQ_PLUS = "DBEQ.PLUS" + EQUS_PLUS = "EQUS.PLUS" XNYS_BBO = "XNYS.BBO" XNYS_TRADES = "XNYS.TRADES" XNAS_QBBO = "XNAS.QBBO" XNAS_NLS = "XNAS.NLS" IFEU_IMPACT = "IFEU.IMPACT" NDEX_IMPACT = "NDEX.IMPACT" - DBEQ_MAX = "DBEQ.MAX" + EQUS_ALL = "EQUS.ALL" XNAS_BASIC = "XNAS.BASIC" - DBEQ_SUMMARY = "DBEQ.SUMMARY" - XCIS_BBOTRADES = "XCIS.BBOTRADES" - XNYS_BBOTRADES = "XNYS.BBOTRADES" + EQUS_SUMMARY = "EQUS.SUMMARY" + XCIS_TRADESBBO = "XCIS.TRADESBBO" + XNYS_TRADESBBO = "XNYS.TRADESBBO" @classmethod def from_int(cls, value: int) -> Dataset: @@ -617,7 +626,7 @@ def from_int(cls, value: int) -> Dataset: if value == 22: return Dataset.IEXG_TOPS if value == 23: - return Dataset.DBEQ_PLUS + return Dataset.EQUS_PLUS if value == 24: return Dataset.XNYS_BBO if value == 25: @@ -631,15 +640,15 @@ def from_int(cls, value: int) -> Dataset: if value == 29: return Dataset.NDEX_IMPACT if value == 30: - return Dataset.DBEQ_MAX + return Dataset.EQUS_ALL if value == 31: return Dataset.XNAS_BASIC if value == 32: - return Dataset.DBEQ_SUMMARY + return Dataset.EQUS_SUMMARY if value == 33: - return Dataset.XCIS_BBOTRADES + return Dataset.XCIS_TRADESBBO if value == 34: - return Dataset.XNYS_BBOTRADES + return Dataset.XNYS_TRADESBBO raise ValueError(f"Integer value {value} does not correspond with any Dataset variant") def to_int(self) -> int: @@ -690,7 +699,7 @@ def to_int(self) -> int: return 21 if self == Dataset.IEXG_TOPS: return 22 - if self == Dataset.DBEQ_PLUS: + if self == Dataset.EQUS_PLUS: return 23 if self == Dataset.XNYS_BBO: return 24 @@ -704,15 +713,15 @@ def to_int(self) -> int: return 28 if self == Dataset.NDEX_IMPACT: return 29 - if self == Dataset.DBEQ_MAX: + if self == Dataset.EQUS_ALL: return 30 if self == Dataset.XNAS_BASIC: return 31 - if self == Dataset.DBEQ_SUMMARY: + if self == Dataset.EQUS_SUMMARY: return 32 - if self == Dataset.XCIS_BBOTRADES: + if self == Dataset.XCIS_TRADESBBO: return 33 - if self == Dataset.XNYS_BBOTRADES: + if self == Dataset.XNYS_TRADESBBO: return 34 raise ValueError("Invalid Dataset") @@ -760,13 +769,13 @@ def description(self) -> str: if self == Dataset.OPRA_PILLAR: return "OPRA Binary" if self == Dataset.DBEQ_BASIC: - return "Databento Equities Basic" + return "Databento US Equities Basic" if self == Dataset.ARCX_PILLAR: return "NYSE Arca Integrated" if self == Dataset.IEXG_TOPS: return "IEX TOPS" - if self == Dataset.DBEQ_PLUS: - return "Databento Equities Plus" + if self == Dataset.EQUS_PLUS: + return "Databento US Equities Plus" if self == Dataset.XNYS_BBO: return "NYSE BBO" if self == Dataset.XNYS_TRADES: @@ -779,16 +788,16 @@ def description(self) -> str: return "ICE Futures Europe (Commodities) iMpact" if self == Dataset.NDEX_IMPACT: return "ICE Endex iMpact" - if self == Dataset.DBEQ_MAX: - return "Databento Equities Max" + if self == Dataset.EQUS_ALL: + return "Databento US Equities (All Feeds)" if self == Dataset.XNAS_BASIC: return "Nasdaq Basic (NLS and QBBO)" - if self == Dataset.DBEQ_SUMMARY: - return "Databento Equities Summary" - if self == Dataset.XCIS_BBOTRADES: - return "NYSE National BBO and Trades" - if self == Dataset.XNYS_BBOTRADES: - return "NYSE BBO and Trades" + if self == Dataset.EQUS_SUMMARY: + return "Databento US Equities Summary" + if self == Dataset.XCIS_TRADESBBO: + return "NYSE National Trades and BBO" + if self == Dataset.XNYS_TRADESBBO: + return "NYSE Trades and BBO" raise ValueError("Unexpected Dataset value") @@ -892,72 +901,72 @@ class Publisher(StringyMixin, str, Enum): Nasdaq QBBO. XNAS_NLS_XNAS Nasdaq Trades. - DBEQ_PLUS_XCHI - DBEQ Plus - NYSE Chicago. - DBEQ_PLUS_XCIS - DBEQ Plus - NYSE National. - DBEQ_PLUS_IEXG - DBEQ Plus - IEX. - DBEQ_PLUS_EPRL - DBEQ Plus - MIAX Pearl. - DBEQ_PLUS_XNAS - DBEQ Plus - Nasdaq. - DBEQ_PLUS_XNYS - DBEQ Plus - NYSE. - DBEQ_PLUS_FINN - DBEQ Plus - FINRA/Nasdaq TRF Carteret. - DBEQ_PLUS_FINY - DBEQ Plus - FINRA/NYSE TRF. - DBEQ_PLUS_FINC - DBEQ Plus - FINRA/Nasdaq TRF Chicago. + EQUS_PLUS_XCHI + Databento US Equities Plus - NYSE Chicago. + EQUS_PLUS_XCIS + Databento US Equities Plus - NYSE National. + EQUS_PLUS_IEXG + Databento US Equities Plus - IEX. + EQUS_PLUS_EPRL + Databento US Equities Plus - MIAX Pearl. + EQUS_PLUS_XNAS + Databento US Equities Plus - Nasdaq. + EQUS_PLUS_XNYS + Databento US Equities Plus - NYSE. + EQUS_PLUS_FINN + Databento US Equities Plus - FINRA/Nasdaq TRF Carteret. + EQUS_PLUS_FINY + Databento US Equities Plus - FINRA/NYSE TRF. + EQUS_PLUS_FINC + Databento US Equities Plus - FINRA/Nasdaq TRF Chicago. IFEU_IMPACT_IFEU ICE Futures Europe (Commodities). NDEX_IMPACT_NDEX ICE Endex. DBEQ_BASIC_DBEQ - DBEQ Basic - Consolidated. - DBEQ_PLUS_DBEQ - DBEQ Plus - Consolidated. + Databento US Equities Basic - Consolidated. + EQUS_PLUS_EQUS + EQUS Plus - Consolidated. OPRA_PILLAR_SPHR OPRA - MIAX Sapphire. - DBEQ_MAX_XCHI - DBEQ Max - NYSE Chicago. - DBEQ_MAX_XCIS - DBEQ Max - NYSE National. - DBEQ_MAX_IEXG - DBEQ Max - IEX. - DBEQ_MAX_EPRL - DBEQ Max - MIAX Pearl. - DBEQ_MAX_XNAS - DBEQ Max - Nasdaq. - DBEQ_MAX_XNYS - DBEQ Max - NYSE. - DBEQ_MAX_FINN - DBEQ Max - FINRA/Nasdaq TRF Carteret. - DBEQ_MAX_FINY - DBEQ Max - FINRA/NYSE TRF. - DBEQ_MAX_FINC - DBEQ Max - FINRA/Nasdaq TRF Chicago. - DBEQ_MAX_BATS - DBEQ Max - CBOE BZX. - DBEQ_MAX_BATY - DBEQ Max - CBOE BYX. - DBEQ_MAX_EDGA - DBEQ Max - CBOE EDGA. - DBEQ_MAX_EDGX - DBEQ Max - CBOE EDGX. - DBEQ_MAX_XBOS - DBEQ Max - Nasdaq BX. - DBEQ_MAX_XPSX - DBEQ Max - Nasdaq PSX. - DBEQ_MAX_MEMX - DBEQ Max - MEMX. - DBEQ_MAX_XASE - DBEQ Max - NYSE American. - DBEQ_MAX_ARCX - DBEQ Max - NYSE Arca. - DBEQ_MAX_LTSE - DBEQ Max - Long-Term Stock Exchange. + EQUS_ALL_XCHI + Databento US Equities (All Feeds) - NYSE Chicago. + EQUS_ALL_XCIS + Databento US Equities (All Feeds) - NYSE National. + EQUS_ALL_IEXG + Databento US Equities (All Feeds) - IEX. + EQUS_ALL_EPRL + Databento US Equities (All Feeds) - MIAX Pearl. + EQUS_ALL_XNAS + Databento US Equities (All Feeds) - Nasdaq. + EQUS_ALL_XNYS + Databento US Equities (All Feeds) - NYSE. + EQUS_ALL_FINN + Databento US Equities (All Feeds) - FINRA/Nasdaq TRF Carteret. + EQUS_ALL_FINY + Databento US Equities (All Feeds) - FINRA/NYSE TRF. + EQUS_ALL_FINC + Databento US Equities (All Feeds) - FINRA/Nasdaq TRF Chicago. + EQUS_ALL_BATS + Databento US Equities (All Feeds) - CBOE BZX. + EQUS_ALL_BATY + Databento US Equities (All Feeds) - CBOE BYX. + EQUS_ALL_EDGA + Databento US Equities (All Feeds) - CBOE EDGA. + EQUS_ALL_EDGX + Databento US Equities (All Feeds) - CBOE EDGX. + EQUS_ALL_XBOS + Databento US Equities (All Feeds) - Nasdaq BX. + EQUS_ALL_XPSX + Databento US Equities (All Feeds) - Nasdaq PSX. + EQUS_ALL_MEMX + Databento US Equities (All Feeds) - MEMX. + EQUS_ALL_XASE + Databento US Equities (All Feeds) - NYSE American. + EQUS_ALL_ARCX + Databento US Equities (All Feeds) - NYSE Arca. + EQUS_ALL_LTSE + Databento US Equities (All Feeds) - Long-Term Stock Exchange. XNAS_BASIC_XNAS Nasdaq Basic - Nasdaq. XNAS_BASIC_FINN @@ -976,16 +985,16 @@ class Publisher(StringyMixin, str, Enum): Nasdaq Basic - Nasdaq BX. XNAS_BASIC_XPSX Nasdaq Basic - Nasdaq PSX. - DBEQ_SUMMARY_DBEQ + EQUS_SUMMARY_EQUS Databento Equities Summary. - XCIS_BBOTRADES_XCIS - NYSE National BBO and Trades. - XNYS_BBOTRADES_XNYS - NYSE BBO and Trades. - XNAS_BASIC_DBEQ + XCIS_TRADESBBO_XCIS + NYSE National Trades and BBO. + XNYS_TRADESBBO_XNYS + NYSE Trades and BBO. + XNAS_BASIC_EQUS Nasdaq Basic - Consolidated. - DBEQ_MAX_DBEQ - DBEQ Max - Consolidated. + EQUS_ALL_EQUS + Databento US Equities (All Feeds) - Consolidated. """ @@ -1036,39 +1045,39 @@ class Publisher(StringyMixin, str, Enum): XNYS_TRADES_XNYS = "XNYS.TRADES.XNYS" XNAS_QBBO_XNAS = "XNAS.QBBO.XNAS" XNAS_NLS_XNAS = "XNAS.NLS.XNAS" - DBEQ_PLUS_XCHI = "DBEQ.PLUS.XCHI" - DBEQ_PLUS_XCIS = "DBEQ.PLUS.XCIS" - DBEQ_PLUS_IEXG = "DBEQ.PLUS.IEXG" - DBEQ_PLUS_EPRL = "DBEQ.PLUS.EPRL" - DBEQ_PLUS_XNAS = "DBEQ.PLUS.XNAS" - DBEQ_PLUS_XNYS = "DBEQ.PLUS.XNYS" - DBEQ_PLUS_FINN = "DBEQ.PLUS.FINN" - DBEQ_PLUS_FINY = "DBEQ.PLUS.FINY" - DBEQ_PLUS_FINC = "DBEQ.PLUS.FINC" + EQUS_PLUS_XCHI = "EQUS.PLUS.XCHI" + EQUS_PLUS_XCIS = "EQUS.PLUS.XCIS" + EQUS_PLUS_IEXG = "EQUS.PLUS.IEXG" + EQUS_PLUS_EPRL = "EQUS.PLUS.EPRL" + EQUS_PLUS_XNAS = "EQUS.PLUS.XNAS" + EQUS_PLUS_XNYS = "EQUS.PLUS.XNYS" + EQUS_PLUS_FINN = "EQUS.PLUS.FINN" + EQUS_PLUS_FINY = "EQUS.PLUS.FINY" + EQUS_PLUS_FINC = "EQUS.PLUS.FINC" IFEU_IMPACT_IFEU = "IFEU.IMPACT.IFEU" NDEX_IMPACT_NDEX = "NDEX.IMPACT.NDEX" DBEQ_BASIC_DBEQ = "DBEQ.BASIC.DBEQ" - DBEQ_PLUS_DBEQ = "DBEQ.PLUS.DBEQ" + EQUS_PLUS_EQUS = "EQUS.PLUS.EQUS" OPRA_PILLAR_SPHR = "OPRA.PILLAR.SPHR" - DBEQ_MAX_XCHI = "DBEQ.MAX.XCHI" - DBEQ_MAX_XCIS = "DBEQ.MAX.XCIS" - DBEQ_MAX_IEXG = "DBEQ.MAX.IEXG" - DBEQ_MAX_EPRL = "DBEQ.MAX.EPRL" - DBEQ_MAX_XNAS = "DBEQ.MAX.XNAS" - DBEQ_MAX_XNYS = "DBEQ.MAX.XNYS" - DBEQ_MAX_FINN = "DBEQ.MAX.FINN" - DBEQ_MAX_FINY = "DBEQ.MAX.FINY" - DBEQ_MAX_FINC = "DBEQ.MAX.FINC" - DBEQ_MAX_BATS = "DBEQ.MAX.BATS" - DBEQ_MAX_BATY = "DBEQ.MAX.BATY" - DBEQ_MAX_EDGA = "DBEQ.MAX.EDGA" - DBEQ_MAX_EDGX = "DBEQ.MAX.EDGX" - DBEQ_MAX_XBOS = "DBEQ.MAX.XBOS" - DBEQ_MAX_XPSX = "DBEQ.MAX.XPSX" - DBEQ_MAX_MEMX = "DBEQ.MAX.MEMX" - DBEQ_MAX_XASE = "DBEQ.MAX.XASE" - DBEQ_MAX_ARCX = "DBEQ.MAX.ARCX" - DBEQ_MAX_LTSE = "DBEQ.MAX.LTSE" + EQUS_ALL_XCHI = "EQUS.ALL.XCHI" + EQUS_ALL_XCIS = "EQUS.ALL.XCIS" + EQUS_ALL_IEXG = "EQUS.ALL.IEXG" + EQUS_ALL_EPRL = "EQUS.ALL.EPRL" + EQUS_ALL_XNAS = "EQUS.ALL.XNAS" + EQUS_ALL_XNYS = "EQUS.ALL.XNYS" + EQUS_ALL_FINN = "EQUS.ALL.FINN" + EQUS_ALL_FINY = "EQUS.ALL.FINY" + EQUS_ALL_FINC = "EQUS.ALL.FINC" + EQUS_ALL_BATS = "EQUS.ALL.BATS" + EQUS_ALL_BATY = "EQUS.ALL.BATY" + EQUS_ALL_EDGA = "EQUS.ALL.EDGA" + EQUS_ALL_EDGX = "EQUS.ALL.EDGX" + EQUS_ALL_XBOS = "EQUS.ALL.XBOS" + EQUS_ALL_XPSX = "EQUS.ALL.XPSX" + EQUS_ALL_MEMX = "EQUS.ALL.MEMX" + EQUS_ALL_XASE = "EQUS.ALL.XASE" + EQUS_ALL_ARCX = "EQUS.ALL.ARCX" + EQUS_ALL_LTSE = "EQUS.ALL.LTSE" XNAS_BASIC_XNAS = "XNAS.BASIC.XNAS" XNAS_BASIC_FINN = "XNAS.BASIC.FINN" XNAS_BASIC_FINC = "XNAS.BASIC.FINC" @@ -1078,11 +1087,11 @@ class Publisher(StringyMixin, str, Enum): XNAS_NLS_XPSX = "XNAS.NLS.XPSX" XNAS_BASIC_XBOS = "XNAS.BASIC.XBOS" XNAS_BASIC_XPSX = "XNAS.BASIC.XPSX" - DBEQ_SUMMARY_DBEQ = "DBEQ.SUMMARY.DBEQ" - XCIS_BBOTRADES_XCIS = "XCIS.BBOTRADES.XCIS" - XNYS_BBOTRADES_XNYS = "XNYS.BBOTRADES.XNYS" - XNAS_BASIC_DBEQ = "XNAS.BASIC.DBEQ" - DBEQ_MAX_DBEQ = "DBEQ.MAX.DBEQ" + EQUS_SUMMARY_EQUS = "EQUS.SUMMARY.EQUS" + XCIS_TRADESBBO_XCIS = "XCIS.TRADESBBO.XCIS" + XNYS_TRADESBBO_XNYS = "XNYS.TRADESBBO.XNYS" + XNAS_BASIC_EQUS = "XNAS.BASIC.EQUS" + EQUS_ALL_EQUS = "EQUS.ALL.EQUS" @classmethod def from_int(cls, value: int) -> Publisher: @@ -1184,23 +1193,23 @@ def from_int(cls, value: int) -> Publisher: if value == 47: return Publisher.XNAS_NLS_XNAS if value == 48: - return Publisher.DBEQ_PLUS_XCHI + return Publisher.EQUS_PLUS_XCHI if value == 49: - return Publisher.DBEQ_PLUS_XCIS + return Publisher.EQUS_PLUS_XCIS if value == 50: - return Publisher.DBEQ_PLUS_IEXG + return Publisher.EQUS_PLUS_IEXG if value == 51: - return Publisher.DBEQ_PLUS_EPRL + return Publisher.EQUS_PLUS_EPRL if value == 52: - return Publisher.DBEQ_PLUS_XNAS + return Publisher.EQUS_PLUS_XNAS if value == 53: - return Publisher.DBEQ_PLUS_XNYS + return Publisher.EQUS_PLUS_XNYS if value == 54: - return Publisher.DBEQ_PLUS_FINN + return Publisher.EQUS_PLUS_FINN if value == 55: - return Publisher.DBEQ_PLUS_FINY + return Publisher.EQUS_PLUS_FINY if value == 56: - return Publisher.DBEQ_PLUS_FINC + return Publisher.EQUS_PLUS_FINC if value == 57: return Publisher.IFEU_IMPACT_IFEU if value == 58: @@ -1208,47 +1217,47 @@ def from_int(cls, value: int) -> Publisher: if value == 59: return Publisher.DBEQ_BASIC_DBEQ if value == 60: - return Publisher.DBEQ_PLUS_DBEQ + return Publisher.EQUS_PLUS_EQUS if value == 61: return Publisher.OPRA_PILLAR_SPHR if value == 62: - return Publisher.DBEQ_MAX_XCHI + return Publisher.EQUS_ALL_XCHI if value == 63: - return Publisher.DBEQ_MAX_XCIS + return Publisher.EQUS_ALL_XCIS if value == 64: - return Publisher.DBEQ_MAX_IEXG + return Publisher.EQUS_ALL_IEXG if value == 65: - return Publisher.DBEQ_MAX_EPRL + return Publisher.EQUS_ALL_EPRL if value == 66: - return Publisher.DBEQ_MAX_XNAS + return Publisher.EQUS_ALL_XNAS if value == 67: - return Publisher.DBEQ_MAX_XNYS + return Publisher.EQUS_ALL_XNYS if value == 68: - return Publisher.DBEQ_MAX_FINN + return Publisher.EQUS_ALL_FINN if value == 69: - return Publisher.DBEQ_MAX_FINY + return Publisher.EQUS_ALL_FINY if value == 70: - return Publisher.DBEQ_MAX_FINC + return Publisher.EQUS_ALL_FINC if value == 71: - return Publisher.DBEQ_MAX_BATS + return Publisher.EQUS_ALL_BATS if value == 72: - return Publisher.DBEQ_MAX_BATY + return Publisher.EQUS_ALL_BATY if value == 73: - return Publisher.DBEQ_MAX_EDGA + return Publisher.EQUS_ALL_EDGA if value == 74: - return Publisher.DBEQ_MAX_EDGX + return Publisher.EQUS_ALL_EDGX if value == 75: - return Publisher.DBEQ_MAX_XBOS + return Publisher.EQUS_ALL_XBOS if value == 76: - return Publisher.DBEQ_MAX_XPSX + return Publisher.EQUS_ALL_XPSX if value == 77: - return Publisher.DBEQ_MAX_MEMX + return Publisher.EQUS_ALL_MEMX if value == 78: - return Publisher.DBEQ_MAX_XASE + return Publisher.EQUS_ALL_XASE if value == 79: - return Publisher.DBEQ_MAX_ARCX + return Publisher.EQUS_ALL_ARCX if value == 80: - return Publisher.DBEQ_MAX_LTSE + return Publisher.EQUS_ALL_LTSE if value == 81: return Publisher.XNAS_BASIC_XNAS if value == 82: @@ -1268,15 +1277,15 @@ def from_int(cls, value: int) -> Publisher: if value == 89: return Publisher.XNAS_BASIC_XPSX if value == 90: - return Publisher.DBEQ_SUMMARY_DBEQ + return Publisher.EQUS_SUMMARY_EQUS if value == 91: - return Publisher.XCIS_BBOTRADES_XCIS + return Publisher.XCIS_TRADESBBO_XCIS if value == 92: - return Publisher.XNYS_BBOTRADES_XNYS + return Publisher.XNYS_TRADESBBO_XNYS if value == 93: - return Publisher.XNAS_BASIC_DBEQ + return Publisher.XNAS_BASIC_EQUS if value == 94: - return Publisher.DBEQ_MAX_DBEQ + return Publisher.EQUS_ALL_EQUS raise ValueError(f"Integer value {value} does not correspond with any Publisher variant") def to_int(self) -> int: @@ -1377,23 +1386,23 @@ def to_int(self) -> int: return 46 if self == Publisher.XNAS_NLS_XNAS: return 47 - if self == Publisher.DBEQ_PLUS_XCHI: + if self == Publisher.EQUS_PLUS_XCHI: return 48 - if self == Publisher.DBEQ_PLUS_XCIS: + if self == Publisher.EQUS_PLUS_XCIS: return 49 - if self == Publisher.DBEQ_PLUS_IEXG: + if self == Publisher.EQUS_PLUS_IEXG: return 50 - if self == Publisher.DBEQ_PLUS_EPRL: + if self == Publisher.EQUS_PLUS_EPRL: return 51 - if self == Publisher.DBEQ_PLUS_XNAS: + if self == Publisher.EQUS_PLUS_XNAS: return 52 - if self == Publisher.DBEQ_PLUS_XNYS: + if self == Publisher.EQUS_PLUS_XNYS: return 53 - if self == Publisher.DBEQ_PLUS_FINN: + if self == Publisher.EQUS_PLUS_FINN: return 54 - if self == Publisher.DBEQ_PLUS_FINY: + if self == Publisher.EQUS_PLUS_FINY: return 55 - if self == Publisher.DBEQ_PLUS_FINC: + if self == Publisher.EQUS_PLUS_FINC: return 56 if self == Publisher.IFEU_IMPACT_IFEU: return 57 @@ -1401,47 +1410,47 @@ def to_int(self) -> int: return 58 if self == Publisher.DBEQ_BASIC_DBEQ: return 59 - if self == Publisher.DBEQ_PLUS_DBEQ: + if self == Publisher.EQUS_PLUS_EQUS: return 60 if self == Publisher.OPRA_PILLAR_SPHR: return 61 - if self == Publisher.DBEQ_MAX_XCHI: + if self == Publisher.EQUS_ALL_XCHI: return 62 - if self == Publisher.DBEQ_MAX_XCIS: + if self == Publisher.EQUS_ALL_XCIS: return 63 - if self == Publisher.DBEQ_MAX_IEXG: + if self == Publisher.EQUS_ALL_IEXG: return 64 - if self == Publisher.DBEQ_MAX_EPRL: + if self == Publisher.EQUS_ALL_EPRL: return 65 - if self == Publisher.DBEQ_MAX_XNAS: + if self == Publisher.EQUS_ALL_XNAS: return 66 - if self == Publisher.DBEQ_MAX_XNYS: + if self == Publisher.EQUS_ALL_XNYS: return 67 - if self == Publisher.DBEQ_MAX_FINN: + if self == Publisher.EQUS_ALL_FINN: return 68 - if self == Publisher.DBEQ_MAX_FINY: + if self == Publisher.EQUS_ALL_FINY: return 69 - if self == Publisher.DBEQ_MAX_FINC: + if self == Publisher.EQUS_ALL_FINC: return 70 - if self == Publisher.DBEQ_MAX_BATS: + if self == Publisher.EQUS_ALL_BATS: return 71 - if self == Publisher.DBEQ_MAX_BATY: + if self == Publisher.EQUS_ALL_BATY: return 72 - if self == Publisher.DBEQ_MAX_EDGA: + if self == Publisher.EQUS_ALL_EDGA: return 73 - if self == Publisher.DBEQ_MAX_EDGX: + if self == Publisher.EQUS_ALL_EDGX: return 74 - if self == Publisher.DBEQ_MAX_XBOS: + if self == Publisher.EQUS_ALL_XBOS: return 75 - if self == Publisher.DBEQ_MAX_XPSX: + if self == Publisher.EQUS_ALL_XPSX: return 76 - if self == Publisher.DBEQ_MAX_MEMX: + if self == Publisher.EQUS_ALL_MEMX: return 77 - if self == Publisher.DBEQ_MAX_XASE: + if self == Publisher.EQUS_ALL_XASE: return 78 - if self == Publisher.DBEQ_MAX_ARCX: + if self == Publisher.EQUS_ALL_ARCX: return 79 - if self == Publisher.DBEQ_MAX_LTSE: + if self == Publisher.EQUS_ALL_LTSE: return 80 if self == Publisher.XNAS_BASIC_XNAS: return 81 @@ -1461,15 +1470,15 @@ def to_int(self) -> int: return 88 if self == Publisher.XNAS_BASIC_XPSX: return 89 - if self == Publisher.DBEQ_SUMMARY_DBEQ: + if self == Publisher.EQUS_SUMMARY_EQUS: return 90 - if self == Publisher.XCIS_BBOTRADES_XCIS: + if self == Publisher.XCIS_TRADESBBO_XCIS: return 91 - if self == Publisher.XNYS_BBOTRADES_XNYS: + if self == Publisher.XNYS_TRADESBBO_XNYS: return 92 - if self == Publisher.XNAS_BASIC_DBEQ: + if self == Publisher.XNAS_BASIC_EQUS: return 93 - if self == Publisher.DBEQ_MAX_DBEQ: + if self == Publisher.EQUS_ALL_EQUS: return 94 raise ValueError("Invalid Publisher") @@ -1572,23 +1581,23 @@ def venue(self) -> Venue: return Venue.XNAS if self == Publisher.XNAS_NLS_XNAS: return Venue.XNAS - if self == Publisher.DBEQ_PLUS_XCHI: + if self == Publisher.EQUS_PLUS_XCHI: return Venue.XCHI - if self == Publisher.DBEQ_PLUS_XCIS: + if self == Publisher.EQUS_PLUS_XCIS: return Venue.XCIS - if self == Publisher.DBEQ_PLUS_IEXG: + if self == Publisher.EQUS_PLUS_IEXG: return Venue.IEXG - if self == Publisher.DBEQ_PLUS_EPRL: + if self == Publisher.EQUS_PLUS_EPRL: return Venue.EPRL - if self == Publisher.DBEQ_PLUS_XNAS: + if self == Publisher.EQUS_PLUS_XNAS: return Venue.XNAS - if self == Publisher.DBEQ_PLUS_XNYS: + if self == Publisher.EQUS_PLUS_XNYS: return Venue.XNYS - if self == Publisher.DBEQ_PLUS_FINN: + if self == Publisher.EQUS_PLUS_FINN: return Venue.FINN - if self == Publisher.DBEQ_PLUS_FINY: + if self == Publisher.EQUS_PLUS_FINY: return Venue.FINY - if self == Publisher.DBEQ_PLUS_FINC: + if self == Publisher.EQUS_PLUS_FINC: return Venue.FINC if self == Publisher.IFEU_IMPACT_IFEU: return Venue.IFEU @@ -1596,47 +1605,47 @@ def venue(self) -> Venue: return Venue.NDEX if self == Publisher.DBEQ_BASIC_DBEQ: return Venue.DBEQ - if self == Publisher.DBEQ_PLUS_DBEQ: - return Venue.DBEQ + if self == Publisher.EQUS_PLUS_EQUS: + return Venue.EQUS if self == Publisher.OPRA_PILLAR_SPHR: return Venue.SPHR - if self == Publisher.DBEQ_MAX_XCHI: + if self == Publisher.EQUS_ALL_XCHI: return Venue.XCHI - if self == Publisher.DBEQ_MAX_XCIS: + if self == Publisher.EQUS_ALL_XCIS: return Venue.XCIS - if self == Publisher.DBEQ_MAX_IEXG: + if self == Publisher.EQUS_ALL_IEXG: return Venue.IEXG - if self == Publisher.DBEQ_MAX_EPRL: + if self == Publisher.EQUS_ALL_EPRL: return Venue.EPRL - if self == Publisher.DBEQ_MAX_XNAS: + if self == Publisher.EQUS_ALL_XNAS: return Venue.XNAS - if self == Publisher.DBEQ_MAX_XNYS: + if self == Publisher.EQUS_ALL_XNYS: return Venue.XNYS - if self == Publisher.DBEQ_MAX_FINN: + if self == Publisher.EQUS_ALL_FINN: return Venue.FINN - if self == Publisher.DBEQ_MAX_FINY: + if self == Publisher.EQUS_ALL_FINY: return Venue.FINY - if self == Publisher.DBEQ_MAX_FINC: + if self == Publisher.EQUS_ALL_FINC: return Venue.FINC - if self == Publisher.DBEQ_MAX_BATS: + if self == Publisher.EQUS_ALL_BATS: return Venue.BATS - if self == Publisher.DBEQ_MAX_BATY: + if self == Publisher.EQUS_ALL_BATY: return Venue.BATY - if self == Publisher.DBEQ_MAX_EDGA: + if self == Publisher.EQUS_ALL_EDGA: return Venue.EDGA - if self == Publisher.DBEQ_MAX_EDGX: + if self == Publisher.EQUS_ALL_EDGX: return Venue.EDGX - if self == Publisher.DBEQ_MAX_XBOS: + if self == Publisher.EQUS_ALL_XBOS: return Venue.XBOS - if self == Publisher.DBEQ_MAX_XPSX: + if self == Publisher.EQUS_ALL_XPSX: return Venue.XPSX - if self == Publisher.DBEQ_MAX_MEMX: + if self == Publisher.EQUS_ALL_MEMX: return Venue.MEMX - if self == Publisher.DBEQ_MAX_XASE: + if self == Publisher.EQUS_ALL_XASE: return Venue.XASE - if self == Publisher.DBEQ_MAX_ARCX: + if self == Publisher.EQUS_ALL_ARCX: return Venue.ARCX - if self == Publisher.DBEQ_MAX_LTSE: + if self == Publisher.EQUS_ALL_LTSE: return Venue.LTSE if self == Publisher.XNAS_BASIC_XNAS: return Venue.XNAS @@ -1656,16 +1665,16 @@ def venue(self) -> Venue: return Venue.XBOS if self == Publisher.XNAS_BASIC_XPSX: return Venue.XPSX - if self == Publisher.DBEQ_SUMMARY_DBEQ: - return Venue.DBEQ - if self == Publisher.XCIS_BBOTRADES_XCIS: + if self == Publisher.EQUS_SUMMARY_EQUS: + return Venue.EQUS + if self == Publisher.XCIS_TRADESBBO_XCIS: return Venue.XCIS - if self == Publisher.XNYS_BBOTRADES_XNYS: + if self == Publisher.XNYS_TRADESBBO_XNYS: return Venue.XNYS - if self == Publisher.XNAS_BASIC_DBEQ: - return Venue.DBEQ - if self == Publisher.DBEQ_MAX_DBEQ: - return Venue.DBEQ + if self == Publisher.XNAS_BASIC_EQUS: + return Venue.EQUS + if self == Publisher.EQUS_ALL_EQUS: + return Venue.EQUS raise ValueError("Unexpected Publisher value") @property @@ -1767,72 +1776,72 @@ def dataset(self) -> Dataset: return Dataset.XNAS_QBBO if self == Publisher.XNAS_NLS_XNAS: return Dataset.XNAS_NLS - if self == Publisher.DBEQ_PLUS_XCHI: - return Dataset.DBEQ_PLUS - if self == Publisher.DBEQ_PLUS_XCIS: - return Dataset.DBEQ_PLUS - if self == Publisher.DBEQ_PLUS_IEXG: - return Dataset.DBEQ_PLUS - if self == Publisher.DBEQ_PLUS_EPRL: - return Dataset.DBEQ_PLUS - if self == Publisher.DBEQ_PLUS_XNAS: - return Dataset.DBEQ_PLUS - if self == Publisher.DBEQ_PLUS_XNYS: - return Dataset.DBEQ_PLUS - if self == Publisher.DBEQ_PLUS_FINN: - return Dataset.DBEQ_PLUS - if self == Publisher.DBEQ_PLUS_FINY: - return Dataset.DBEQ_PLUS - if self == Publisher.DBEQ_PLUS_FINC: - return Dataset.DBEQ_PLUS + if self == Publisher.EQUS_PLUS_XCHI: + return Dataset.EQUS_PLUS + if self == Publisher.EQUS_PLUS_XCIS: + return Dataset.EQUS_PLUS + if self == Publisher.EQUS_PLUS_IEXG: + return Dataset.EQUS_PLUS + if self == Publisher.EQUS_PLUS_EPRL: + return Dataset.EQUS_PLUS + if self == Publisher.EQUS_PLUS_XNAS: + return Dataset.EQUS_PLUS + if self == Publisher.EQUS_PLUS_XNYS: + return Dataset.EQUS_PLUS + if self == Publisher.EQUS_PLUS_FINN: + return Dataset.EQUS_PLUS + if self == Publisher.EQUS_PLUS_FINY: + return Dataset.EQUS_PLUS + if self == Publisher.EQUS_PLUS_FINC: + return Dataset.EQUS_PLUS if self == Publisher.IFEU_IMPACT_IFEU: return Dataset.IFEU_IMPACT if self == Publisher.NDEX_IMPACT_NDEX: return Dataset.NDEX_IMPACT if self == Publisher.DBEQ_BASIC_DBEQ: return Dataset.DBEQ_BASIC - if self == Publisher.DBEQ_PLUS_DBEQ: - return Dataset.DBEQ_PLUS + if self == Publisher.EQUS_PLUS_EQUS: + return Dataset.EQUS_PLUS if self == Publisher.OPRA_PILLAR_SPHR: return Dataset.OPRA_PILLAR - if self == Publisher.DBEQ_MAX_XCHI: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_XCIS: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_IEXG: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_EPRL: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_XNAS: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_XNYS: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_FINN: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_FINY: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_FINC: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_BATS: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_BATY: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_EDGA: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_EDGX: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_XBOS: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_XPSX: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_MEMX: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_XASE: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_ARCX: - return Dataset.DBEQ_MAX - if self == Publisher.DBEQ_MAX_LTSE: - return Dataset.DBEQ_MAX + if self == Publisher.EQUS_ALL_XCHI: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_XCIS: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_IEXG: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_EPRL: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_XNAS: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_XNYS: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_FINN: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_FINY: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_FINC: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_BATS: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_BATY: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_EDGA: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_EDGX: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_XBOS: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_XPSX: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_MEMX: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_XASE: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_ARCX: + return Dataset.EQUS_ALL + if self == Publisher.EQUS_ALL_LTSE: + return Dataset.EQUS_ALL if self == Publisher.XNAS_BASIC_XNAS: return Dataset.XNAS_BASIC if self == Publisher.XNAS_BASIC_FINN: @@ -1851,16 +1860,16 @@ def dataset(self) -> Dataset: return Dataset.XNAS_BASIC if self == Publisher.XNAS_BASIC_XPSX: return Dataset.XNAS_BASIC - if self == Publisher.DBEQ_SUMMARY_DBEQ: - return Dataset.DBEQ_SUMMARY - if self == Publisher.XCIS_BBOTRADES_XCIS: - return Dataset.XCIS_BBOTRADES - if self == Publisher.XNYS_BBOTRADES_XNYS: - return Dataset.XNYS_BBOTRADES - if self == Publisher.XNAS_BASIC_DBEQ: + if self == Publisher.EQUS_SUMMARY_EQUS: + return Dataset.EQUS_SUMMARY + if self == Publisher.XCIS_TRADESBBO_XCIS: + return Dataset.XCIS_TRADESBBO + if self == Publisher.XNYS_TRADESBBO_XNYS: + return Dataset.XNYS_TRADESBBO + if self == Publisher.XNAS_BASIC_EQUS: return Dataset.XNAS_BASIC - if self == Publisher.DBEQ_MAX_DBEQ: - return Dataset.DBEQ_MAX + if self == Publisher.EQUS_ALL_EQUS: + return Dataset.EQUS_ALL raise ValueError("Unexpected Publisher value") @property @@ -1962,72 +1971,72 @@ def description(self) -> str: return "Nasdaq QBBO" if self == Publisher.XNAS_NLS_XNAS: return "Nasdaq Trades" - if self == Publisher.DBEQ_PLUS_XCHI: - return "DBEQ Plus - NYSE Chicago" - if self == Publisher.DBEQ_PLUS_XCIS: - return "DBEQ Plus - NYSE National" - if self == Publisher.DBEQ_PLUS_IEXG: - return "DBEQ Plus - IEX" - if self == Publisher.DBEQ_PLUS_EPRL: - return "DBEQ Plus - MIAX Pearl" - if self == Publisher.DBEQ_PLUS_XNAS: - return "DBEQ Plus - Nasdaq" - if self == Publisher.DBEQ_PLUS_XNYS: - return "DBEQ Plus - NYSE" - if self == Publisher.DBEQ_PLUS_FINN: - return "DBEQ Plus - FINRA/Nasdaq TRF Carteret" - if self == Publisher.DBEQ_PLUS_FINY: - return "DBEQ Plus - FINRA/NYSE TRF" - if self == Publisher.DBEQ_PLUS_FINC: - return "DBEQ Plus - FINRA/Nasdaq TRF Chicago" + if self == Publisher.EQUS_PLUS_XCHI: + return "Databento US Equities Plus - NYSE Chicago" + if self == Publisher.EQUS_PLUS_XCIS: + return "Databento US Equities Plus - NYSE National" + if self == Publisher.EQUS_PLUS_IEXG: + return "Databento US Equities Plus - IEX" + if self == Publisher.EQUS_PLUS_EPRL: + return "Databento US Equities Plus - MIAX Pearl" + if self == Publisher.EQUS_PLUS_XNAS: + return "Databento US Equities Plus - Nasdaq" + if self == Publisher.EQUS_PLUS_XNYS: + return "Databento US Equities Plus - NYSE" + if self == Publisher.EQUS_PLUS_FINN: + return "Databento US Equities Plus - FINRA/Nasdaq TRF Carteret" + if self == Publisher.EQUS_PLUS_FINY: + return "Databento US Equities Plus - FINRA/NYSE TRF" + if self == Publisher.EQUS_PLUS_FINC: + return "Databento US Equities Plus - FINRA/Nasdaq TRF Chicago" if self == Publisher.IFEU_IMPACT_IFEU: return "ICE Futures Europe (Commodities)" if self == Publisher.NDEX_IMPACT_NDEX: return "ICE Endex" if self == Publisher.DBEQ_BASIC_DBEQ: - return "DBEQ Basic - Consolidated" - if self == Publisher.DBEQ_PLUS_DBEQ: - return "DBEQ Plus - Consolidated" + return "Databento US Equities Basic - Consolidated" + if self == Publisher.EQUS_PLUS_EQUS: + return "EQUS Plus - Consolidated" if self == Publisher.OPRA_PILLAR_SPHR: return "OPRA - MIAX Sapphire" - if self == Publisher.DBEQ_MAX_XCHI: - return "DBEQ Max - NYSE Chicago" - if self == Publisher.DBEQ_MAX_XCIS: - return "DBEQ Max - NYSE National" - if self == Publisher.DBEQ_MAX_IEXG: - return "DBEQ Max - IEX" - if self == Publisher.DBEQ_MAX_EPRL: - return "DBEQ Max - MIAX Pearl" - if self == Publisher.DBEQ_MAX_XNAS: - return "DBEQ Max - Nasdaq" - if self == Publisher.DBEQ_MAX_XNYS: - return "DBEQ Max - NYSE" - if self == Publisher.DBEQ_MAX_FINN: - return "DBEQ Max - FINRA/Nasdaq TRF Carteret" - if self == Publisher.DBEQ_MAX_FINY: - return "DBEQ Max - FINRA/NYSE TRF" - if self == Publisher.DBEQ_MAX_FINC: - return "DBEQ Max - FINRA/Nasdaq TRF Chicago" - if self == Publisher.DBEQ_MAX_BATS: - return "DBEQ Max - CBOE BZX" - if self == Publisher.DBEQ_MAX_BATY: - return "DBEQ Max - CBOE BYX" - if self == Publisher.DBEQ_MAX_EDGA: - return "DBEQ Max - CBOE EDGA" - if self == Publisher.DBEQ_MAX_EDGX: - return "DBEQ Max - CBOE EDGX" - if self == Publisher.DBEQ_MAX_XBOS: - return "DBEQ Max - Nasdaq BX" - if self == Publisher.DBEQ_MAX_XPSX: - return "DBEQ Max - Nasdaq PSX" - if self == Publisher.DBEQ_MAX_MEMX: - return "DBEQ Max - MEMX" - if self == Publisher.DBEQ_MAX_XASE: - return "DBEQ Max - NYSE American" - if self == Publisher.DBEQ_MAX_ARCX: - return "DBEQ Max - NYSE Arca" - if self == Publisher.DBEQ_MAX_LTSE: - return "DBEQ Max - Long-Term Stock Exchange" + if self == Publisher.EQUS_ALL_XCHI: + return "Databento US Equities (All Feeds) - NYSE Chicago" + if self == Publisher.EQUS_ALL_XCIS: + return "Databento US Equities (All Feeds) - NYSE National" + if self == Publisher.EQUS_ALL_IEXG: + return "Databento US Equities (All Feeds) - IEX" + if self == Publisher.EQUS_ALL_EPRL: + return "Databento US Equities (All Feeds) - MIAX Pearl" + if self == Publisher.EQUS_ALL_XNAS: + return "Databento US Equities (All Feeds) - Nasdaq" + if self == Publisher.EQUS_ALL_XNYS: + return "Databento US Equities (All Feeds) - NYSE" + if self == Publisher.EQUS_ALL_FINN: + return "Databento US Equities (All Feeds) - FINRA/Nasdaq TRF Carteret" + if self == Publisher.EQUS_ALL_FINY: + return "Databento US Equities (All Feeds) - FINRA/NYSE TRF" + if self == Publisher.EQUS_ALL_FINC: + return "Databento US Equities (All Feeds) - FINRA/Nasdaq TRF Chicago" + if self == Publisher.EQUS_ALL_BATS: + return "Databento US Equities (All Feeds) - CBOE BZX" + if self == Publisher.EQUS_ALL_BATY: + return "Databento US Equities (All Feeds) - CBOE BYX" + if self == Publisher.EQUS_ALL_EDGA: + return "Databento US Equities (All Feeds) - CBOE EDGA" + if self == Publisher.EQUS_ALL_EDGX: + return "Databento US Equities (All Feeds) - CBOE EDGX" + if self == Publisher.EQUS_ALL_XBOS: + return "Databento US Equities (All Feeds) - Nasdaq BX" + if self == Publisher.EQUS_ALL_XPSX: + return "Databento US Equities (All Feeds) - Nasdaq PSX" + if self == Publisher.EQUS_ALL_MEMX: + return "Databento US Equities (All Feeds) - MEMX" + if self == Publisher.EQUS_ALL_XASE: + return "Databento US Equities (All Feeds) - NYSE American" + if self == Publisher.EQUS_ALL_ARCX: + return "Databento US Equities (All Feeds) - NYSE Arca" + if self == Publisher.EQUS_ALL_LTSE: + return "Databento US Equities (All Feeds) - Long-Term Stock Exchange" if self == Publisher.XNAS_BASIC_XNAS: return "Nasdaq Basic - Nasdaq" if self == Publisher.XNAS_BASIC_FINN: @@ -2046,14 +2055,14 @@ def description(self) -> str: return "Nasdaq Basic - Nasdaq BX" if self == Publisher.XNAS_BASIC_XPSX: return "Nasdaq Basic - Nasdaq PSX" - if self == Publisher.DBEQ_SUMMARY_DBEQ: + if self == Publisher.EQUS_SUMMARY_EQUS: return "Databento Equities Summary" - if self == Publisher.XCIS_BBOTRADES_XCIS: - return "NYSE National BBO and Trades" - if self == Publisher.XNYS_BBOTRADES_XNYS: - return "NYSE BBO and Trades" - if self == Publisher.XNAS_BASIC_DBEQ: + if self == Publisher.XCIS_TRADESBBO_XCIS: + return "NYSE National Trades and BBO" + if self == Publisher.XNYS_TRADESBBO_XNYS: + return "NYSE Trades and BBO" + if self == Publisher.XNAS_BASIC_EQUS: return "Nasdaq Basic - Consolidated" - if self == Publisher.DBEQ_MAX_DBEQ: - return "DBEQ Max - Consolidated" + if self == Publisher.EQUS_ALL_EQUS: + return "Databento US Equities (All Feeds) - Consolidated" raise ValueError("Unexpected Publisher value") From 934746f9742b3cf3b1fec08eb8740903ddeb108b Mon Sep 17 00:00:00 2001 From: Vinicius Livramento Date: Tue, 14 Jan 2025 10:17:47 +0000 Subject: [PATCH 05/11] ADD: Add new dataset EQUS.MINI --- CHANGELOG.md | 4 ++++ databento/common/publishers.py | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b752da93..5037fb42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,15 @@ ## 0.48.0 - TBD +#### Breaking changes +- Updated enumerations for unreleased datasets and publishers. + #### Enhancements - Added export of `StatusAction` enum from `databento_dbn` to the root `databento` package - Added export of `StatusReason` enum from `databento_dbn` to the root `databento` package - Added export of `TradingEvent` enum from `databento_dbn` to the root `databento` package - Removed upper bound for supported `python` versions; the constraint is now `^3.9` +- Added new dataset `EQUS.MINI` and new publisher `EQUS.MINI.EQUS` #### Bug fixes - Fixed an issue where sending a `KeyboardInterrupt` during iteration of the `Live` client could block execution waiting for the connection to close diff --git a/databento/common/publishers.py b/databento/common/publishers.py index 4322658c..40c685bb 100644 --- a/databento/common/publishers.py +++ b/databento/common/publishers.py @@ -538,6 +538,8 @@ class Dataset(StringyMixin, str, Enum): NYSE National Trades and BBO. XNYS_TRADESBBO NYSE Trades and BBO. + EQUS_MINI + Databento US Equities Mini. """ @@ -575,6 +577,7 @@ class Dataset(StringyMixin, str, Enum): EQUS_SUMMARY = "EQUS.SUMMARY" XCIS_TRADESBBO = "XCIS.TRADESBBO" XNYS_TRADESBBO = "XNYS.TRADESBBO" + EQUS_MINI = "EQUS.MINI" @classmethod def from_int(cls, value: int) -> Dataset: @@ -649,6 +652,8 @@ def from_int(cls, value: int) -> Dataset: return Dataset.XCIS_TRADESBBO if value == 34: return Dataset.XNYS_TRADESBBO + if value == 35: + return Dataset.EQUS_MINI raise ValueError(f"Integer value {value} does not correspond with any Dataset variant") def to_int(self) -> int: @@ -723,6 +728,8 @@ def to_int(self) -> int: return 33 if self == Dataset.XNYS_TRADESBBO: return 34 + if self == Dataset.EQUS_MINI: + return 35 raise ValueError("Invalid Dataset") @property @@ -798,6 +805,8 @@ def description(self) -> str: return "NYSE National Trades and BBO" if self == Dataset.XNYS_TRADESBBO: return "NYSE Trades and BBO" + if self == Dataset.EQUS_MINI: + return "Databento US Equities Mini" raise ValueError("Unexpected Dataset value") @@ -995,6 +1004,8 @@ class Publisher(StringyMixin, str, Enum): Nasdaq Basic - Consolidated. EQUS_ALL_EQUS Databento US Equities (All Feeds) - Consolidated. + EQUS_MINI_EQUS + Databento US Equities Mini. """ @@ -1092,6 +1103,7 @@ class Publisher(StringyMixin, str, Enum): XNYS_TRADESBBO_XNYS = "XNYS.TRADESBBO.XNYS" XNAS_BASIC_EQUS = "XNAS.BASIC.EQUS" EQUS_ALL_EQUS = "EQUS.ALL.EQUS" + EQUS_MINI_EQUS = "EQUS.MINI.EQUS" @classmethod def from_int(cls, value: int) -> Publisher: @@ -1286,6 +1298,8 @@ def from_int(cls, value: int) -> Publisher: return Publisher.XNAS_BASIC_EQUS if value == 94: return Publisher.EQUS_ALL_EQUS + if value == 95: + return Publisher.EQUS_MINI_EQUS raise ValueError(f"Integer value {value} does not correspond with any Publisher variant") def to_int(self) -> int: @@ -1480,6 +1494,8 @@ def to_int(self) -> int: return 93 if self == Publisher.EQUS_ALL_EQUS: return 94 + if self == Publisher.EQUS_MINI_EQUS: + return 95 raise ValueError("Invalid Publisher") @property @@ -1675,6 +1691,8 @@ def venue(self) -> Venue: return Venue.EQUS if self == Publisher.EQUS_ALL_EQUS: return Venue.EQUS + if self == Publisher.EQUS_MINI_EQUS: + return Venue.EQUS raise ValueError("Unexpected Publisher value") @property @@ -1870,6 +1888,8 @@ def dataset(self) -> Dataset: return Dataset.XNAS_BASIC if self == Publisher.EQUS_ALL_EQUS: return Dataset.EQUS_ALL + if self == Publisher.EQUS_MINI_EQUS: + return Dataset.EQUS_MINI raise ValueError("Unexpected Publisher value") @property @@ -2065,4 +2085,6 @@ def description(self) -> str: return "Nasdaq Basic - Consolidated" if self == Publisher.EQUS_ALL_EQUS: return "Databento US Equities (All Feeds) - Consolidated" + if self == Publisher.EQUS_MINI_EQUS: + return "Databento US Equities Mini" raise ValueError("Unexpected Publisher value") From cc4e0dec5de58c93edc860e50dc751ec54aea5f7 Mon Sep 17 00:00:00 2001 From: Carter Green Date: Tue, 14 Jan 2025 09:54:13 -0600 Subject: [PATCH 06/11] MOD: Use method to enable DBNQueue --- databento/live/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/databento/live/client.py b/databento/live/client.py index 220cdbc5..92ea39c3 100644 --- a/databento/live/client.py +++ b/databento/live/client.py @@ -633,7 +633,7 @@ class LiveIterator: def __init__(self, client: Live): client.start() self._dbn_queue = client._session._dbn_queue - self._dbn_queue._enabled.set() + self._dbn_queue.enable() self._client = client @property From 3423e2f2013493732c5b93251084e6cc31581313 Mon Sep 17 00:00:00 2001 From: Renan Gemignani Date: Thu, 16 Jan 2025 13:25:02 +0100 Subject: [PATCH 07/11] ADD: Consolidated pub for XNYS.TRADES bars --- CHANGELOG.md | 2 +- databento/common/publishers.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5037fb42..b84fa23a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ - Added export of `StatusReason` enum from `databento_dbn` to the root `databento` package - Added export of `TradingEvent` enum from `databento_dbn` to the root `databento` package - Removed upper bound for supported `python` versions; the constraint is now `^3.9` -- Added new dataset `EQUS.MINI` and new publisher `EQUS.MINI.EQUS` +- Added new dataset `EQUS.MINI` and new publishers `EQUS.MINI.EQUS`, `XNYS.TRADES.EQUS` #### Bug fixes - Fixed an issue where sending a `KeyboardInterrupt` during iteration of the `Live` client could block execution waiting for the connection to close diff --git a/databento/common/publishers.py b/databento/common/publishers.py index 40c685bb..6c310c50 100644 --- a/databento/common/publishers.py +++ b/databento/common/publishers.py @@ -1006,6 +1006,8 @@ class Publisher(StringyMixin, str, Enum): Databento US Equities (All Feeds) - Consolidated. EQUS_MINI_EQUS Databento US Equities Mini. + XNYS_TRADES_EQUS + NYSE Trades - Consolidated. """ @@ -1104,6 +1106,7 @@ class Publisher(StringyMixin, str, Enum): XNAS_BASIC_EQUS = "XNAS.BASIC.EQUS" EQUS_ALL_EQUS = "EQUS.ALL.EQUS" EQUS_MINI_EQUS = "EQUS.MINI.EQUS" + XNYS_TRADES_EQUS = "XNYS.TRADES.EQUS" @classmethod def from_int(cls, value: int) -> Publisher: @@ -1300,6 +1303,8 @@ def from_int(cls, value: int) -> Publisher: return Publisher.EQUS_ALL_EQUS if value == 95: return Publisher.EQUS_MINI_EQUS + if value == 96: + return Publisher.XNYS_TRADES_EQUS raise ValueError(f"Integer value {value} does not correspond with any Publisher variant") def to_int(self) -> int: @@ -1496,6 +1501,8 @@ def to_int(self) -> int: return 94 if self == Publisher.EQUS_MINI_EQUS: return 95 + if self == Publisher.XNYS_TRADES_EQUS: + return 96 raise ValueError("Invalid Publisher") @property @@ -1693,6 +1700,8 @@ def venue(self) -> Venue: return Venue.EQUS if self == Publisher.EQUS_MINI_EQUS: return Venue.EQUS + if self == Publisher.XNYS_TRADES_EQUS: + return Venue.EQUS raise ValueError("Unexpected Publisher value") @property @@ -1890,6 +1899,8 @@ def dataset(self) -> Dataset: return Dataset.EQUS_ALL if self == Publisher.EQUS_MINI_EQUS: return Dataset.EQUS_MINI + if self == Publisher.XNYS_TRADES_EQUS: + return Dataset.XNYS_TRADES raise ValueError("Unexpected Publisher value") @property @@ -2087,4 +2098,6 @@ def description(self) -> str: return "Databento US Equities (All Feeds) - Consolidated" if self == Publisher.EQUS_MINI_EQUS: return "Databento US Equities Mini" + if self == Publisher.XNYS_TRADES_EQUS: + return "NYSE Trades - Consolidated" raise ValueError("Unexpected Publisher value") From e40893a16b5221a0a57dc3eddc2e82b822ccfdd0 Mon Sep 17 00:00:00 2001 From: Zach Banks Date: Thu, 16 Jan 2025 17:33:25 +0000 Subject: [PATCH 08/11] FIX: Use POST not GET for endpoints with `symbols` --- databento/common/http.py | 3 +- databento/historical/api/metadata.py | 72 ++++++++++++++-------------- tests/test_historical_metadata.py | 72 ++++++++++++++-------------- 3 files changed, 74 insertions(+), 73 deletions(-) diff --git a/databento/common/http.py b/databento/common/http.py index 290f3e1c..5908e1bf 100644 --- a/databento/common/http.py +++ b/databento/common/http.py @@ -3,6 +3,7 @@ import json import warnings from collections.abc import Iterable +from collections.abc import Mapping from io import BytesIO from json.decoder import JSONDecodeError from os import PathLike @@ -94,7 +95,7 @@ async def _get_json_async( def _post( self, url: str, - data: dict[str, object | None] | None = None, + data: Mapping[str, object | None] | None = None, params: Iterable[tuple[str, str | None]] | None = None, basic_auth: bool = False, ) -> Response: diff --git a/databento/historical/api/metadata.py b/databento/historical/api/metadata.py index 7166425c..97c08e1e 100644 --- a/databento/historical/api/metadata.py +++ b/databento/historical/api/metadata.py @@ -304,22 +304,22 @@ def get_record_count( """ stype_in_valid = validate_enum(stype_in, SType, "stype_in") symbols_list = optional_symbols_list_to_list(symbols, stype_in_valid) - params: list[tuple[str, str | None]] = [ - ("dataset", validate_semantic_string(dataset, "dataset")), - ("symbols", ",".join(symbols_list)), - ("schema", str(validate_enum(schema, Schema, "schema"))), - ("start", optional_datetime_to_string(start)), - ("end", optional_datetime_to_string(end)), - ("stype_in", str(stype_in_valid)), - ] + data: dict[str, str | None] = { + "dataset": validate_semantic_string(dataset, "dataset"), + "symbols": ",".join(symbols_list), + "schema": str(validate_enum(schema, Schema, "schema")), + "start": optional_datetime_to_string(start), + "end": optional_datetime_to_string(end), + "stype_in": str(stype_in_valid), + } # Optional Parameters if limit is not None: - params.append(("limit", str(limit))) + data["limit"] = str(limit) - response: Response = self._get( + response: Response = self._post( url=self._base_url + ".get_record_count", - params=params, + data=data, basic_auth=True, ) @@ -373,22 +373,22 @@ def get_billable_size( """ stype_in_valid = validate_enum(stype_in, SType, "stype_in") symbols_list = optional_symbols_list_to_list(symbols, stype_in_valid) - params: list[tuple[str, str | None]] = [ - ("dataset", validate_semantic_string(dataset, "dataset")), - ("start", datetime_to_string(start)), - ("end", optional_datetime_to_string(end)), - ("symbols", ",".join(symbols_list)), - ("schema", str(validate_enum(schema, Schema, "schema"))), - ("stype_in", str(stype_in_valid)), - ("stype_out", str(SType.INSTRUMENT_ID)), - ] + data: dict[str, str | None] = { + "dataset": validate_semantic_string(dataset, "dataset"), + "start": datetime_to_string(start), + "end": optional_datetime_to_string(end), + "symbols": ",".join(symbols_list), + "schema": str(validate_enum(schema, Schema, "schema")), + "stype_in": str(stype_in_valid), + "stype_out": str(SType.INSTRUMENT_ID), + } if limit is not None: - params.append(("limit", str(limit))) + data["limit"] = str(limit) - response: Response = self._get( + response: Response = self._post( url=self._base_url + ".get_billable_size", - params=params, + data=data, basic_auth=True, ) @@ -445,23 +445,23 @@ def get_cost( """ stype_in_valid = validate_enum(stype_in, SType, "stype_in") symbols_list = optional_symbols_list_to_list(symbols, stype_in_valid) - params: list[tuple[str, str | None]] = [ - ("dataset", validate_semantic_string(dataset, "dataset")), - ("start", datetime_to_string(start)), - ("end", optional_datetime_to_string(end)), - ("symbols", ",".join(symbols_list)), - ("schema", str(validate_enum(schema, Schema, "schema"))), - ("stype_in", str(stype_in_valid)), - ("stype_out", str(SType.INSTRUMENT_ID)), - ("mode", validate_enum(mode, FeedMode, "mode")), - ] + data: dict[str, str | None] = { + "dataset": validate_semantic_string(dataset, "dataset"), + "start": datetime_to_string(start), + "end": optional_datetime_to_string(end), + "symbols": ",".join(symbols_list), + "schema": str(validate_enum(schema, Schema, "schema")), + "stype_in": str(stype_in_valid), + "stype_out": str(SType.INSTRUMENT_ID), + "mode": validate_enum(mode, FeedMode, "mode"), + } if limit is not None: - params.append(("limit", str(limit))) + data["limit"] = str(limit) - response: Response = self._get( + response: Response = self._post( url=self._base_url + ".get_cost", - params=params, + data=data, basic_auth=True, ) diff --git a/tests/test_historical_metadata.py b/tests/test_historical_metadata.py index f5db8433..44b55dd6 100644 --- a/tests/test_historical_metadata.py +++ b/tests/test_historical_metadata.py @@ -191,7 +191,7 @@ def test_get_record_count_sends_expected_request( historical_client: Historical, ) -> None: # Arrange - monkeypatch.setattr(requests, "get", mocked_get := MagicMock()) + monkeypatch.setattr(requests, "post", mocked_post := MagicMock()) # Act historical_client.metadata.get_record_count( @@ -204,20 +204,20 @@ def test_get_record_count_sends_expected_request( ) # Assert - call = mocked_get.call_args.kwargs + call = mocked_post.call_args.kwargs assert call["url"] == f"{historical_client.gateway}/v{db.API_VERSION}/metadata.get_record_count" assert sorted(call["headers"].keys()) == ["accept", "user-agent"] assert call["headers"]["accept"] == "application/json" assert all(v in call["headers"]["user-agent"] for v in ("Databento/", "Python/")) - assert call["params"] == [ - ("dataset", "GLBX.MDP3"), - ("symbols", "ESH1"), - ("schema", "mbo"), - ("start", "2020-12-28T12:00"), - ("end", "2020-12-29"), - ("stype_in", "raw_symbol"), - ("limit", "1000000"), - ] + assert call["data"] == { + "dataset": "GLBX.MDP3", + "symbols": "ESH1", + "schema": "mbo", + "start": "2020-12-28T12:00", + "end": "2020-12-29", + "stype_in": "raw_symbol", + "limit": "1000000", + } assert call["timeout"] == (100, 100) assert isinstance(call["auth"], requests.auth.HTTPBasicAuth) @@ -227,7 +227,7 @@ def test_get_billable_size_sends_expected_request( historical_client: Historical, ) -> None: # Arrange - monkeypatch.setattr(requests, "get", mocked_get := MagicMock()) + monkeypatch.setattr(requests, "post", mocked_post := MagicMock()) # Act historical_client.metadata.get_billable_size( @@ -240,23 +240,23 @@ def test_get_billable_size_sends_expected_request( ) # Assert - call = mocked_get.call_args.kwargs + call = mocked_post.call_args.kwargs assert ( call["url"] == f"{historical_client.gateway}/v{db.API_VERSION}/metadata.get_billable_size" ) assert sorted(call["headers"].keys()) == ["accept", "user-agent"] assert call["headers"]["accept"] == "application/json" assert all(v in call["headers"]["user-agent"] for v in ("Databento/", "Python/")) - assert call["params"] == [ - ("dataset", "GLBX.MDP3"), - ("start", "2020-12-28T12:00"), - ("end", "2020-12-29"), - ("symbols", "ESH1"), - ("schema", "mbo"), - ("stype_in", "raw_symbol"), - ("stype_out", "instrument_id"), - ("limit", "1000000"), - ] + assert call["data"] == { + "dataset": "GLBX.MDP3", + "start": "2020-12-28T12:00", + "end": "2020-12-29", + "symbols": "ESH1", + "schema": "mbo", + "stype_in": "raw_symbol", + "stype_out": "instrument_id", + "limit": "1000000", + } assert call["timeout"] == (100, 100) assert isinstance(call["auth"], requests.auth.HTTPBasicAuth) @@ -266,7 +266,7 @@ def test_get_cost_sends_expected_request( historical_client: Historical, ) -> None: # Arrange - monkeypatch.setattr(requests, "get", mocked_get := MagicMock()) + monkeypatch.setattr(requests, "post", mocked_post := MagicMock()) # Act historical_client.metadata.get_cost( @@ -279,21 +279,21 @@ def test_get_cost_sends_expected_request( ) # Assert - call = mocked_get.call_args.kwargs + call = mocked_post.call_args.kwargs assert call["url"] == f"{historical_client.gateway}/v{db.API_VERSION}/metadata.get_cost" assert sorted(call["headers"].keys()) == ["accept", "user-agent"] assert call["headers"]["accept"] == "application/json" assert all(v in call["headers"]["user-agent"] for v in ("Databento/", "Python/")) - assert call["params"] == [ - ("dataset", "GLBX.MDP3"), - ("start", "2020-12-28T12:00"), - ("end", "2020-12-29"), - ("symbols", "ESH1"), - ("schema", "mbo"), - ("stype_in", "raw_symbol"), - ("stype_out", "instrument_id"), - ("mode", "historical-streaming"), - ("limit", "1000000"), - ] + assert call["data"] == { + "dataset": "GLBX.MDP3", + "start": "2020-12-28T12:00", + "end": "2020-12-29", + "symbols": "ESH1", + "schema": "mbo", + "stype_in": "raw_symbol", + "stype_out": "instrument_id", + "mode": "historical-streaming", + "limit": "1000000", + } assert call["timeout"] == (100, 100) assert isinstance(call["auth"], requests.auth.HTTPBasicAuth) From 5a32b1e685b54137a4be66658fe45131244b6cb7 Mon Sep 17 00:00:00 2001 From: Nick Macholl Date: Tue, 14 Jan 2025 09:12:11 -0800 Subject: [PATCH 09/11] MOD: Upgrade databento_dbn to 0.27.0 --- CHANGELOG.md | 4 +++- README.md | 2 +- databento/common/types.py | 1 + pyproject.toml | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b84fa23a..c63967b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,10 @@ - Added export of `StatusAction` enum from `databento_dbn` to the root `databento` package - Added export of `StatusReason` enum from `databento_dbn` to the root `databento` package - Added export of `TradingEvent` enum from `databento_dbn` to the root `databento` package -- Removed upper bound for supported `python` versions; the constraint is now `^3.9` - Added new dataset `EQUS.MINI` and new publishers `EQUS.MINI.EQUS`, `XNYS.TRADES.EQUS` +- Removed upper bound for supported `python` versions; the constraint is now `^3.9` +- Upgraded `databento-dbn` to 0.27.0 + - Fixed export of `InstrumentDefMsgV3` to Python #### Bug fixes - Fixed an issue where sending a `KeyboardInterrupt` during iteration of the `Live` client could block execution waiting for the connection to close diff --git a/README.md b/README.md index 8ed04187..3e112c65 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ The library is fully compatible with the latest distribution of Anaconda 3.9 and The minimum dependencies as found in the `pyproject.toml` are also listed below: - python = "^3.9" - aiohttp = "^3.8.3" -- databento-dbn = "0.25.0" +- databento-dbn = "0.27.0" - numpy= ">=1.23.5" - pandas = ">=1.5.3" - pip-system-certs = ">=4.0" (Windows only) diff --git a/databento/common/types.py b/databento/common/types.py index fb95bde8..a34fbc43 100644 --- a/databento/common/types.py +++ b/databento/common/types.py @@ -21,6 +21,7 @@ databento_dbn.ImbalanceMsg, databento_dbn.InstrumentDefMsg, databento_dbn.InstrumentDefMsgV1, + databento_dbn.InstrumentDefMsgV3, databento_dbn.StatMsg, databento_dbn.StatusMsg, databento_dbn.SymbolMappingMsg, diff --git a/pyproject.toml b/pyproject.toml index 72348abc..30619eb3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ aiohttp = [ {version = "^3.8.3", python = "<3.12"}, {version = "^3.9.0", python = "^3.12"} ] -databento-dbn = "0.25.0" +databento-dbn = "0.27.0" numpy = [ {version = ">=1.23.5", python = "<3.12"}, {version = ">=1.26.0", python = "^3.12"} From 6f4ece8887209bd65e481a8d7aa5203fd6b3f90a Mon Sep 17 00:00:00 2001 From: Nick Macholl Date: Tue, 21 Jan 2025 09:01:38 -0800 Subject: [PATCH 10/11] VER: Release 0.48.0 --- CHANGELOG.md | 2 +- databento/version.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c63967b3..75d88632 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## 0.48.0 - TBD +## 0.48.0 - 2025-01-21 #### Breaking changes - Updated enumerations for unreleased datasets and publishers. diff --git a/databento/version.py b/databento/version.py index bf97bc40..3158ac8c 100644 --- a/databento/version.py +++ b/databento/version.py @@ -1 +1 @@ -__version__ = "0.47.0" +__version__ = "0.48.0" diff --git a/pyproject.toml b/pyproject.toml index 30619eb3..80683650 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "databento" -version = "0.47.0" +version = "0.48.0" description = "Official Python client library for Databento" authors = [ "Databento ", From dde13cb2473a9a120e098f51f57945cabb7366a7 Mon Sep 17 00:00:00 2001 From: Zach Banks Date: Tue, 21 Jan 2025 20:55:37 +0000 Subject: [PATCH 11/11] DOC: Add changelog entry for GET/POST fix --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75d88632..998db0a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ #### Bug fixes - Fixed an issue where sending a `KeyboardInterrupt` during iteration of the `Live` client could block execution waiting for the connection to close +- Fixed an issue with submitting historical metadata requests for a large number of symbols. ## 0.47.0 - 2024-12-17