Перейти к содержимому

Рабочее пространство

Окна, вкладки, стеки и графики терминала: как их прочитать, открыть, изменить или закрыть.

Для чтения раскладки нужно право workspace:read. Для изменения нужно workspace:write. Стек — это стакан с лентой сделок и кластерами.

Прочитать раскладку

workspace = terminal.workspace()
for window in workspace.windows:
    for tab in window.tabs:
        print(window.id, tab.id, tab.name, [stack.instrument for stack in tab.stacks])

В ответе перечислены все окна с их вкладками и все вкладки с их стеками и графиками. Все поля есть в справочнике.

Идентификаторы действуют один запуск

У окна и вкладки есть id, у стека и графика — widget_id. Вкладки нумеруются внутри каждого окна, поэтому вкладка адресуется окном и вкладкой вместе.

Все идентификаторы действуют только в текущем запуске терминала. После перезапуска прочитайте раскладку заново.

Открыть стек

opened = terminal.open_stack("binance:futures:BTCUSDT", chart=True)
print(opened.window_id, opened.tab_id, opened.stacks, opened.charts)
АргументЗначение
charttrue открывает вместе со стеком график инструмента. По умолчанию false.
targetnew_tab (по умолчанию) или new_window.
window_idОкно для новой вкладки. По умолчанию — окно в фокусе.
activatefalse открывает вкладку в фоне. Новое окно всегда получает фокус.

Ответ называет окно, вкладку и идентификаторы открытых виджетов. Все команды на этой странице отвечают в этой форме.

Открыть вкладку с несколькими инструментами

from spectre_terminal import TabItem

opened = terminal.open_tab(
    [TabItem("binance:futures:BTCUSDT", chart=True), "binance:futures:ETHUSDT"],
    name="Majors",
)
print(opened.tab_id, opened.stacks, opened.charts)

Каждый элемент становится колонкой, в порядке списка. В списке от 1 до 50 элементов, name — до 64 символов. Если хотя бы один элемент отклонён, не открывается ничего.

target, window_id и activate работают так же, как в Открыть стек.

Добавить стеки во вкладку

added = terminal.add_stacks(1, 2, ["binance:futures:SOLUSDT"])
print(added.stacks, added.charts)

Первые два аргумента — окно и вкладка. Новые колонки встают после последней. В ответе перечислены только добавленные виджеты.

Открыть монету на всех биржах

opened = terminal.open_multiview("BTC", target="new_window")
print(opened.window_id, opened.stacks, opened.charts)

Это кнопка «Мультивью» в терминале: монета открывается на всех биржах, включённых в настройке «Раскладка бирж». Передайте монету, BTC, или пару, BTC/USDT. Без target терминал следует своей настройке «Мультивью».

Сменить инструмент стека

terminal.set_stack_instrument(14, "binance:futures:ETHUSDT")

Первый аргумент — это widget_id стека. Его графики тоже переключаются.

Закрыть стек, вкладку или окно

terminal.close_stack(14)
terminal.close_tab(1, 2)
terminal.close_window(2)

Подтверждения нет. Главное окно, помеченное в раскладке как main, и единственную вкладку окна закрыть нельзя: вызов отвечает 400 invalid_request.

Вывести вкладку или окно на передний план

terminal.activate_tab(1, 2)
terminal.activate_window(2)

Первый вызов выбирает вкладку, не меняя фокус окна. Второй выводит окно на передний план.

Следить за изменениями

import asyncio
from spectre_terminal import Event

async def main():
    async with terminal.stream() as stream:
        await stream.subscribe("workspace")
        async for frame in stream:
            if isinstance(frame, Event) and frame.topic == "workspace":
                for window in frame.data.windows:
                    print(window.id, [tab.name for tab in window.tabs])

asyncio.run(main())

Первый кадр — это текущая раскладка. Затем на каждое изменение приходит кадр со всей раскладкой. Подробнее в разделе Стриминг.

Когда команда не удалась

Что происходитЧто вы получитеЧто делать
Инструмента нет в справочнике, или идентификатор принадлежит графику400 invalid_requestИсправить запрос
Такого окна, вкладки или стека нет404 not_foundПрочитать раскладку заново
Монеты нет ни на одной включённой бирже404 not_foundПроверить монету
Больше 5 команд рабочего пространства в секунду на весь терминал429 rate_limitedСнизить темп, см. Лимиты
Окно не ответило за 2 секунды503 unavailableПроверить раскладку, затем повторить

Что недоступно

API не переносит стеки между вкладками, не меняет ширину колонок и не управляет другими окнами, например скринером.

На этой странице