В примерах работы с песочницей исбавиться от алиасов в наименованиях методов
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?
Если да - то получится перейти с обратной совместимостью. Если нет - то код будет обратно совместим, но те, кто в сэндбокс ходят по продовому урлу развалятся в рантайме.