Tinkoff / invest-python

Tinkoff Invest Python gRPC client
https://tinkoff.github.io/invest-python/
Apache License 2.0
301 stars 87 forks source link

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

Closed AlexanderVolkovTCS closed 1 year ago

AlexanderVolkovTCS commented 1 year ago

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

Мы вызываем 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

irusland commented 1 year ago

Начал делать, удалять запросы, например к 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 а там не алиасы, а продовые методы.

irusland commented 1 year ago

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

irusland commented 1 year ago

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

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

irusland commented 1 year ago

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