Tinkoff/invest-python

В примерах работы с песочницей исбавиться от алиасов в наименованиях методов

AlexanderVolkovTCS opened this issue · 4 comments

Что случилось?

Мы вызываем get_sandbox_operations/get_sandbox_portfolio/get_sandbox_portfolio, хотя для песочного контура работают эти же варианты функций в наименовании, как на проде:
get_operations/get_portfolio/get_portfolio

пример
https://github.com/Tinkoff/invest-python/blob/main/examples/wiseplat_set_get_sandbox_balance.py#L56

Предлагаю перейти к единообразию и отказаться от методов, имеющих продовые алиасы.
Нет алиасов только у методов:
OpenSandboxAccount
CloseSandboxAccount
SandboxPayIn

Воспроизведение

No response

Tinkoff Invest Version

0.2.0-beta50

Python Version

3.11

OS

Windows

Логи

No response

Начал делать, удалять запросы, например к PostSandboxOrder, проксированием к PostOrder
То есть в классе SandboxService метод post_sandbox_order проксировать в orders.post_order.

Столкнулся с тем, что ломается обратная совместимость, если клиент сейчас работает с песочницей так:

from tinkoff.invest import Client

with Client(SANDBOX_INVEST_TOKEN) as client:
    client.sandbox.get_sandbox_orders()

а не

from tinkoff.invest.sandbox.client import SandboxClient

with SandboxClient(SANDBOX_INVEST_TOKEN) as client:
    client.sandbox.get_sandbox_orders()

То после моей доработки у клиента будет падать ошибка tinkoff.invest.exceptions.RequestError: (<StatusCode.PERMISSION_DENIED: (7, 'permission denied')>, '40002',

из-за того, что используется Client, мы обращаемся к продовому серверу invest-public-api.tinkoff.ru,

а не к SandboxClient с сэндбоксовыми алиасами sandbox-invest-public-api.tinkoff.ru.

Итого, кто раньше использовал Client и ходил в .sandbox - ходил в прод, на сэндбоксные методы.
А сейчас если мы хотим сделать хождение в .sandbox на алиасы продовых методов, то у пользователей использующих Client начнёт всё падать на UNAUTHORIZED, так как Client ходит в invest-public-api.tinkoff.ru а там не алиасы, а продовые методы.

То есть по коду - это обратно совместимое изменение, клиентам не придется ничего переписывать, чтобы запустить приложение, но бизнесово это не обратно совместимое изменение, запущенное приложение будет ловить UNAUTHORIZED, NOT_FOUND и тд

В связи с этим, @AlexanderVolkovTCS, вопрос: есть ли возможность на стороне бека понимать какой токен пришел и если на invest-public-api.tinkoff.ru в метод GetOrders пришел sandbox'ный токен, то обрабатывать его так, как будто он пришел на sandbox-invest-public-api.tinkoff.ru в метод-алиас GetOrders?

Если да - то получится перейти с обратной совместимостью. Если нет - то код будет обратно совместим, но те, кто в сэндбокс ходят по продовому урлу развалятся в рантайме.

Завел реквест в первом приближении. Пока не знаю что делать.