Ошибка итерации запроса на Bi-directional stream для получения биржевой информации по Tinkoff Invest API
Мое торговый бот имеет функцию, которая должна запрашивать данные с биржи в реальном времени с помощью Tinkoff Invest API. В API это делается с помощью сервиса MarketDataStreamService. Стрим принимает запрос как аргумент-итератор, и возвращает объект-итератор. В моем случае запрашиваются пятиминутные свечи по акциям Сбера. Вот как это выглядит:
@bot.message_handler(commands=['get_data_stream'])
def getCandlesDataStream(message):
def request_iterator():
yield schemas.MarketDataRequest(
subscribe_candles_request=schemas.SubscribeCandlesRequest(
waiting_close=True,
subscription_action=schemas.SubscriptionAction.SUBSCRIPTION_ACTION_SUBSCRIBE,
instruments=[
schemas.CandleInstrument(
figi='TCS009029540',
interval=schemas.SubscriptionInterval.SUBSCRIPTION_INTERVAL_FIVE_MINUTE,
)
],
)
)
while True:
time.sleep(1)
with SandboxClient(TOKEN) as client: # Запускаем клиент тинькофф-песочницы
for marketdata in client.market_data_stream.market_data_stream(
request_iterator()
):
print(marketdata)
Импорты:
from tinkoff.invest import CandleInterval
from tinkoff.invest import schemas
# Для исторических свечей
from tinkoff.invest.services import MarketDataCache, MarketDataStreamService
from tinkoff.invest.caching.market_data_cache.cache_settings import (
MarketDataCacheSettings,
)
При вызове функции MarketDataStream, при попытке инициализации итератора вызывается ошибка итерации. Вот Traceback:
ERROR:grpc._channel:Exception iterating requests!
Traceback (most recent call last):
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\grpc\_channel.py", line 238, in consume_request_iterator
request = next(request_iterator)
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\tinkoff\invest\services.py", line 1043, in _convert_market_data_stream_request
for request in request_iterator:
File "C:\Users\gibad\PycharmProjects\teleBotTest\work\core_bot.py", line 248, in request_iterator
interval=schemas.SubscriptionInterval.SUBSCRIPTION_INTERVAL_FIVE_MINUTE,
File "C:\Users\gibad\AppData\Local\Programs\Python\Python310\lib\enum.py", line 437, in __getattr__
raise AttributeError(name) from None
AttributeError: SUBSCRIPTION_INTERVAL_FIVE_MINUTE
ERROR:tinkoff.invest.logging:None MarketDataStream UNKNOWN Exception iterating requests!
ERROR:TeleBot:Infinity polling exception: (<StatusCode.UNKNOWN: (2, 'unknown')>, 'Exception iterating requests!', None)
ERROR:TeleBot:Exception traceback:
Traceback (most recent call last):
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\tinkoff\invest\_errors.py", line 54, in wrapper
yield from func(*args, **kwargs)
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\tinkoff\invest\services.py", line 1053, in market_data_stream
for response in self.stub.MarketDataStream(
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\grpc\_channel.py", line 475, in __next__
return self._next()
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\grpc\_channel.py", line 881, in _next
raise self
grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
status = StatusCode.UNKNOWN
details = "Exception iterating requests!"
debug_error_string = "None"
>
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\telebot\__init__.py", line 955, in infinity_polling
self.polling(non_stop=True, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\telebot\__init__.py", line 1043, in polling
self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\telebot\__init__.py", line 1118, in __threaded_polling
raise e
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\telebot\__init__.py", line 1074, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\telebot\util.py", line 147, in raise_exceptions
raise self.exception_info
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\telebot\util.py", line 90, in run
task(*args, **kwargs)
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\telebot\__init__.py", line 6770, in _run_middlewares_and_handler
result = handler['function'](message)
File "C:\Users\gibad\PycharmProjects\teleBotTest\work\core_bot.py", line 257, in getCandlesDataStream
for marketdata in client.market_data_stream.market_data_stream(
File "C:\Users\gibad\PycharmProjects\teleBotTest\venv\lib\site-packages\tinkoff\invest\_errors.py", line 72, in wrapper
raise RequestError(status_code, details, metadata) from e
tinkoff.invest.exceptions.RequestError: (<StatusCode.UNKNOWN: (2, 'unknown')>, 'Exception iterating requests!', None)
Насколько я понял, ошибка в том, что нет какой-то мета информации. Возможно я ошибаюсь. Помогите разобраться