Налаштування
Читайте налаштування термінала і стакана, змінюйте їх і стежте за змінами.
Для читання налаштувань потрібне право 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 | Повторити виклик |