Настройки
Настройки терминала и стакана: как их прочитать, изменить и как следить за изменениями.
Для чтения настроек нужно право settings:read. Для изменения нужно
settings:write.
Прочитать настройки
settings = terminal.settings(category="multiview")
for row in settings.data:
print(row.category, row.key, row.value, row.writable)Настройка — это строка с category, key и value. writable говорит,
может ли API её изменить. Без аргументов вы получите настройки всего
терминала.
| Аргумент | Значение |
|---|---|
category, key | Только строки этой категории или этого ключа. |
scope | global (по умолчанию) или order_book. |
instrument | Строки, сохранённые для стакана этого инструмента. |
connection_id | Строки, сохранённые для этого подключения. |
Прочитать настройки стакана
book = terminal.orderbook_settings(12, "binance:futures:BTCUSDT")
for category, keys in book.data.items():
for key, setting in keys.items():
print(category, key, setting.value, setting.resolved_from)Вызов выше показывает, что сохранено. Этот показывает, что стакан получает
в итоге: каждая настройка берётся из первого места, где есть значение, и
resolved_from называет это место.
resolved_from | Где сохранено значение |
|---|---|
instrument | Для этого инструмента на этом подключении |
connection | Как значение по умолчанию для подключения |
app_instrument | Для этого инструмента без подключения |
global | Как значение по умолчанию для терминала |
Изменить настройку
from spectre_terminal import SettingChange
applied = terminal.update_settings([
SettingChange("multiview", "stack_width_px", 300),
SettingChange("general", "auto_scroll", True, instrument="binance:futures:BTCUSDT", connection_id=12),
])
print(applied.applied)Вызов принимает до 100 изменений. Куда сохранится изменение, зависит от того, что вы передаёте вместе с ним.
| Вы передаёте | Изменение сохраняется |
|---|---|
instrument | Для стакана этого инструмента |
scope="order_book" и connection_id | Как значение по умолчанию для стаканов подключения |
Только scope="order_book" | Как значение по умолчанию для стаканов терминала |
| Больше ничего | Как настройка всего терминала |
Сначала терминал сверяет каждое изменение со своим списком настроек. Если хотя бы одно отклонено, не сохраняется ничего.
Затем изменения применяются по порядку. Если одно не применилось, вызов останавливается с ошибкой, а изменения до него остаются применёнными.
Плечо через настройки не меняется. Используйте Изменить плечо.
Изменить тему или горячую клавишу
from spectre_terminal import SettingChange
terminal.update_settings([
SettingChange("appearance", "theme", {"stack": "dark"}),
SettingChange("hotkeys_orderbook", "close_position", {"code": "KeyX", "modifiers": []}),
])Тема принимает любые из stack, graphic и interface. Последние два
принимают только light или dark.
Горячая клавиша принимает code и modifiers или null. Сочетание,
которое занято другим действием, отклоняется.
Следить за изменениями
import asyncio
from spectre_terminal import Event
async def main():
async with terminal.stream() as stream:
await stream.subscribe("settings")
async for frame in stream:
if isinstance(frame, Event) and frame.topic == "settings":
print(frame.data.scope, frame.data.category, frame.data.key, frame.data.value)
asyncio.run(main())Кадр приходит на каждую сохранённую строку, кто бы её ни сохранил. Подписка
не присылает начальное состояние, поэтому сначала прочитайте значения через
settings(). Подробнее в разделе Стриминг.
Когда вызов не удался
| Что происходит | Что вы получите | Что делать |
|---|---|---|
| Неизвестный ключ, неверный тип или форма значения, число вне диапазона | 400 invalid_request | Ничего не сохранено. Исправить изменение, которое названо в сообщении |
| Настройка — это плечо или служебная строка терминала | 501 unsupported | Повтор не поможет |
| Больше 5 записей настроек в секунду на весь терминал | 429 rate_limited | Снизить темп, см. Лимиты |
| Терминал не смог прочитать или сохранить настройки | 503 unavailable | Повторить |