Files
tick-stock-panel/examples/open-api/04_events_stream.py
T
shy3130 d3500b1e76 docs(examples): 示例脚本实测修正 — 演示值按字段语义 / 回测走纯 Polars 引擎 / hello 输出规整
四个示例以真实 Token 完整跑通: 01 行情 / 02 写入+读回 / 03 策略清单+回测 /
04 票据+事件流 (种告警实时收到 4 条 alert)。
- 02: 演示行不再把占位值写进 date/name, 按字段名给合理值
- 03: POST /api/backtest/run 依赖 vectorbt (可选 extra), 改走所有安装自带
  纯 Polars 引擎的 /api/backtest/strategy/run, 近 90 天单标的控制耗时
- 04: hello 帧打印规整
2026-09-26 11:42:22 +08:00

25 lines
1.0 KiB
Python

"""示例 4 — 事件流 SSE (任意有效 Token; 票据继承 scope)。
EventSource 带不了 Authorization 头, 走两步:
POST /api/events/ticket (Bearer) → 一次性票据 (60 秒)
GET /api/events?ticket=… → hello 帧 + 事件 (此处演示 alert 告警推送)
票据一次性: 断线重连需重新换票。浏览器端用 EventSource,
脚本端像本例一样逐行读流即可。
"""
import itertools
from common import call, sse
# 1. 换票 (任意 scope 的 Token 都可; 流里只推票据 scope 覆盖的事件)
ticket = call("POST", "/api/events/ticket")["ticket"]
print("票据已签发 (60s 内一次性)")
# 2. 订阅: hello 帧之后, 面板触发任意监控告警即可看到 alert 事件
for event in itertools.islice(sse(f"/api/events?ticket={ticket}"), 5):
if event.get("event") == "hello":
print("hello: 票据 scope =", event.get("data", ""))
continue
print(f"[{event.get('event')}] {event.get('data', '')[:120]}")
print("(收到 5 帧后退出; 生产环境保持连接持续接收)")