From f385190d2e5adad5daac910ef6211deb2bffe81f Mon Sep 17 00:00:00 2001 From: dimitryLMEX Date: Tue, 26 May 2026 21:18:47 +0700 Subject: [PATCH] fix: guard BookQuest against IndexError when depth exceeds book levels (#1042) When self.depth is greater than the number of available bid or ask levels, calling book.book.bids.index(i) raises an IndexError. Fix by clamping the iteration range to min(self.depth, len(...)) for both bids and asks. --- cryptofeed/backends/quest.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cryptofeed/backends/quest.py b/cryptofeed/backends/quest.py index aa11a9d3b..d4b12e9a4 100644 --- a/cryptofeed/backends/quest.py +++ b/cryptofeed/backends/quest.py @@ -75,7 +75,11 @@ def __init__(self, *args, depth=10, **kwargs): self.depth = depth async def __call__(self, book, receipt_timestamp: float): - vals = ','.join([f"bid_{i}_price={book.book.bids.index(i)[0]},bid_{i}_size={book.book.bids.index(i)[1]}" for i in range(self.depth)] + [f"ask_{i}_price={book.book.asks.index(i)[0]},ask_{i}_size={book.book.asks.index(i)[1]}" for i in range(self.depth)]) + bid_depth = min(self.depth, len(book.book.bids)) + ask_depth = min(self.depth, len(book.book.asks)) + bid_vals = [f"bid_{i}_price={book.book.bids.index(i)[0]},bid_{i}_size={book.book.bids.index(i)[1]}" for i in range(bid_depth)] + ask_vals = [f"ask_{i}_price={book.book.asks.index(i)[0]},ask_{i}_size={book.book.asks.index(i)[1]}" for i in range(ask_depth)] + vals = ','.join(bid_vals + ask_vals) timestamp = book.timestamp receipt_timestamp_int = int(receipt_timestamp * 1_000_000) timestamp_int = int(timestamp * 1_000_000_000) if timestamp is not None else receipt_timestamp_int * 1000