Ошибка итерации запроса на 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)

Насколько я понял, ошибка в том, что нет какой-то мета информации. Возможно я ошибаюсь. Помогите разобраться


Ответы (0 шт):