Skip to content

Commit e12a328

Browse files
authored
Route runtime errors to main bot (#141)
1 parent 529b52c commit e12a328

12 files changed

Lines changed: 407 additions & 388 deletions

.github/workflows/execution-report-heartbeat.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,7 @@ jobs:
4444
CLOUD_RUN_SERVICES: ${{ vars.CLOUD_RUN_SERVICES }}
4545
CLOUD_RUN_SERVICE_TARGETS_JSON: ${{ vars.CLOUD_RUN_SERVICE_TARGETS_JSON }}
4646
GLOBAL_TELEGRAM_CHAT_ID: ${{ vars.GLOBAL_TELEGRAM_CHAT_ID }}
47-
CRISIS_ALERT_TELEGRAM_CHAT_IDS: ${{ vars.CRISIS_ALERT_TELEGRAM_CHAT_IDS }}
48-
CRISIS_ALERT_TELEGRAM_API_BASE_URL: ${{ vars.CRISIS_ALERT_TELEGRAM_API_BASE_URL }}
4947
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
50-
CRISIS_ALERT_TELEGRAM_BOT_TOKEN: ${{ secrets.CRISIS_ALERT_TELEGRAM_BOT_TOKEN }}
5148
steps:
5249
- name: Checkout repository
5350
uses: actions/checkout@v6

.github/workflows/runtime-guard.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,7 @@ jobs:
5050
CLOUD_RUN_SERVICES: ${{ vars.CLOUD_RUN_SERVICES }}
5151
CLOUD_RUN_SERVICE_TARGETS_JSON: ${{ vars.CLOUD_RUN_SERVICE_TARGETS_JSON }}
5252
GLOBAL_TELEGRAM_CHAT_ID: ${{ vars.GLOBAL_TELEGRAM_CHAT_ID }}
53-
CRISIS_ALERT_TELEGRAM_CHAT_IDS: ${{ vars.CRISIS_ALERT_TELEGRAM_CHAT_IDS }}
54-
CRISIS_ALERT_TELEGRAM_API_BASE_URL: ${{ vars.CRISIS_ALERT_TELEGRAM_API_BASE_URL }}
5553
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
56-
CRISIS_ALERT_TELEGRAM_BOT_TOKEN: ${{ secrets.CRISIS_ALERT_TELEGRAM_BOT_TOKEN }}
5754
steps:
5855
- name: Checkout repository
5956
uses: actions/checkout@v6

.github/workflows/sync-cloud-run-env.yml

Lines changed: 185 additions & 150 deletions
Large diffs are not rendered by default.

main.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -535,10 +535,6 @@ def _runtime_error_notification_targets() -> tuple[tuple[str, str], ...]:
535535
targets: list[tuple[str, str]] = []
536536
if TG_TOKEN and TG_CHAT_ID:
537537
targets.append((TG_TOKEN, TG_CHAT_ID))
538-
crisis_token = os.getenv("CRISIS_ALERT_TELEGRAM_BOT_TOKEN")
539-
for chat_id in _split_env_list(os.getenv("CRISIS_ALERT_TELEGRAM_CHAT_IDS")):
540-
if crisis_token and chat_id:
541-
targets.append((crisis_token, chat_id))
542538

543539
seen: set[tuple[str, str]] = set()
544540
unique_targets: list[tuple[str, str]] = []

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
flask
22
gunicorn
3-
quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@v0.7.37
3+
quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@3b6a0a9bedde72773e188041e0dc48516b38aadc
44
us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@v0.7.52
55
hk-equity-strategies @ git+https://github.com/QuantStrategyLab/HkEquityStrategies.git@v0.4.3
66
pandas

runtime_config_support.py

Lines changed: 89 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -152,36 +152,36 @@ class PlatformRuntimeSettings:
152152
quantconnect_version_id: str | None = None
153153
quantconnect_credentials_secret_name: str | None = None
154154
quantconnect_brokerage_secret_name: str | None = None
155-
crisis_alert_channels: tuple[str, ...] = ()
156-
crisis_alert_email_recipients: tuple[str, ...] = ()
157-
crisis_alert_email_sender_email: str | None = None
158-
crisis_alert_email_sender_password: str | None = None
159-
crisis_alert_email_smtp_host: str | None = None
160-
crisis_alert_email_smtp_port: str | None = None
161-
crisis_alert_email_smtp_security: str | None = None
162-
crisis_alert_sms_recipients: tuple[str, ...] = ()
163-
crisis_alert_sms_provider: str | None = None
164-
crisis_alert_sms_account_id: str | None = None
165-
crisis_alert_sms_auth_token: str | None = None
166-
crisis_alert_sms_sender: str | None = None
167-
crisis_alert_sms_messaging_service_id: str | None = None
168-
crisis_alert_sms_api_base_url: str | None = None
169-
crisis_alert_sms_body_max_chars: str | None = None
170-
crisis_alert_push_recipients: tuple[str, ...] = ()
171-
crisis_alert_push_provider: str | None = None
172-
crisis_alert_push_app_token: str | None = None
173-
crisis_alert_push_access_token: str | None = None
174-
crisis_alert_push_api_base_url: str | None = None
175-
crisis_alert_push_device: str | None = None
176-
crisis_alert_push_priority: str | None = None
177-
crisis_alert_push_tags: str | None = None
178-
crisis_alert_push_body_max_chars: str | None = None
179-
crisis_alert_telegram_chat_ids: tuple[str, ...] = ()
180-
crisis_alert_telegram_bot_token: str | None = None
181-
crisis_alert_telegram_api_base_url: str | None = None
182-
crisis_alert_telegram_parse_mode: str | None = None
183-
crisis_alert_telegram_disable_web_page_preview: str | None = None
184-
crisis_alert_telegram_body_max_chars: str | None = None
155+
strategy_plugin_alert_channels: tuple[str, ...] = ()
156+
strategy_plugin_alert_email_recipients: tuple[str, ...] = ()
157+
strategy_plugin_alert_email_sender_email: str | None = None
158+
strategy_plugin_alert_email_sender_password: str | None = None
159+
strategy_plugin_alert_email_smtp_host: str | None = None
160+
strategy_plugin_alert_email_smtp_port: str | None = None
161+
strategy_plugin_alert_email_smtp_security: str | None = None
162+
strategy_plugin_alert_sms_recipients: tuple[str, ...] = ()
163+
strategy_plugin_alert_sms_provider: str | None = None
164+
strategy_plugin_alert_sms_account_id: str | None = None
165+
strategy_plugin_alert_sms_auth_token: str | None = None
166+
strategy_plugin_alert_sms_sender: str | None = None
167+
strategy_plugin_alert_sms_messaging_service_id: str | None = None
168+
strategy_plugin_alert_sms_api_base_url: str | None = None
169+
strategy_plugin_alert_sms_body_max_chars: str | None = None
170+
strategy_plugin_alert_push_recipients: tuple[str, ...] = ()
171+
strategy_plugin_alert_push_provider: str | None = None
172+
strategy_plugin_alert_push_app_token: str | None = None
173+
strategy_plugin_alert_push_access_token: str | None = None
174+
strategy_plugin_alert_push_api_base_url: str | None = None
175+
strategy_plugin_alert_push_device: str | None = None
176+
strategy_plugin_alert_push_priority: str | None = None
177+
strategy_plugin_alert_push_tags: str | None = None
178+
strategy_plugin_alert_push_body_max_chars: str | None = None
179+
strategy_plugin_alert_telegram_chat_ids: tuple[str, ...] = ()
180+
strategy_plugin_alert_telegram_bot_token: str | None = None
181+
strategy_plugin_alert_telegram_api_base_url: str | None = None
182+
strategy_plugin_alert_telegram_parse_mode: str | None = None
183+
strategy_plugin_alert_telegram_disable_web_page_preview: str | None = None
184+
strategy_plugin_alert_telegram_body_max_chars: str | None = None
185185
runtime_target: RuntimeTarget | None = None
186186
execution_backend: str = EXECUTION_BACKEND_GATEWAY
187187

@@ -353,93 +353,93 @@ def load_platform_runtime_settings(
353353
quantconnect_version_id=group_config.quantconnect_version_id,
354354
quantconnect_credentials_secret_name=group_config.quantconnect_credentials_secret_name,
355355
quantconnect_brokerage_secret_name=group_config.quantconnect_brokerage_secret_name,
356-
crisis_alert_channels=split_env_list(os.getenv("CRISIS_ALERT_CHANNELS")),
357-
crisis_alert_email_recipients=split_env_list(
358-
os.getenv("CRISIS_ALERT_EMAIL_RECIPIENTS")
356+
strategy_plugin_alert_channels=split_env_list(os.getenv("STRATEGY_PLUGIN_ALERT_CHANNELS")),
357+
strategy_plugin_alert_email_recipients=split_env_list(
358+
os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS")
359359
),
360-
crisis_alert_email_sender_email=first_non_empty(
361-
os.getenv("CRISIS_ALERT_EMAIL_SENDER_EMAIL")
360+
strategy_plugin_alert_email_sender_email=first_non_empty(
361+
os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL")
362362
),
363-
crisis_alert_email_sender_password=first_non_empty(
364-
os.getenv("CRISIS_ALERT_EMAIL_SENDER_PASSWORD")
363+
strategy_plugin_alert_email_sender_password=first_non_empty(
364+
os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD")
365365
),
366-
crisis_alert_email_smtp_host=first_non_empty(
367-
os.getenv("CRISIS_ALERT_EMAIL_SMTP_HOST")
366+
strategy_plugin_alert_email_smtp_host=first_non_empty(
367+
os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST")
368368
),
369-
crisis_alert_email_smtp_port=first_non_empty(
370-
os.getenv("CRISIS_ALERT_EMAIL_SMTP_PORT")
369+
strategy_plugin_alert_email_smtp_port=first_non_empty(
370+
os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT")
371371
),
372-
crisis_alert_email_smtp_security=first_non_empty(
373-
os.getenv("CRISIS_ALERT_EMAIL_SMTP_SECURITY")
372+
strategy_plugin_alert_email_smtp_security=first_non_empty(
373+
os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY")
374374
),
375-
crisis_alert_sms_recipients=split_env_list(
376-
os.getenv("CRISIS_ALERT_SMS_RECIPIENTS")
375+
strategy_plugin_alert_sms_recipients=split_env_list(
376+
os.getenv("STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS")
377377
),
378-
crisis_alert_sms_provider=first_non_empty(
379-
os.getenv("CRISIS_ALERT_SMS_PROVIDER")
378+
strategy_plugin_alert_sms_provider=first_non_empty(
379+
os.getenv("STRATEGY_PLUGIN_ALERT_SMS_PROVIDER")
380380
),
381-
crisis_alert_sms_account_id=first_non_empty(
382-
os.getenv("CRISIS_ALERT_SMS_ACCOUNT_ID")
381+
strategy_plugin_alert_sms_account_id=first_non_empty(
382+
os.getenv("STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID")
383383
),
384-
crisis_alert_sms_auth_token=first_non_empty(
385-
os.getenv("CRISIS_ALERT_SMS_AUTH_TOKEN")
384+
strategy_plugin_alert_sms_auth_token=first_non_empty(
385+
os.getenv("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN")
386386
),
387-
crisis_alert_sms_sender=first_non_empty(
388-
os.getenv("CRISIS_ALERT_SMS_SENDER")
387+
strategy_plugin_alert_sms_sender=first_non_empty(
388+
os.getenv("STRATEGY_PLUGIN_ALERT_SMS_SENDER")
389389
),
390-
crisis_alert_sms_messaging_service_id=first_non_empty(
391-
os.getenv("CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID")
390+
strategy_plugin_alert_sms_messaging_service_id=first_non_empty(
391+
os.getenv("STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID")
392392
),
393-
crisis_alert_sms_api_base_url=first_non_empty(
394-
os.getenv("CRISIS_ALERT_SMS_API_BASE_URL")
393+
strategy_plugin_alert_sms_api_base_url=first_non_empty(
394+
os.getenv("STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL")
395395
),
396-
crisis_alert_sms_body_max_chars=first_non_empty(
397-
os.getenv("CRISIS_ALERT_SMS_BODY_MAX_CHARS")
396+
strategy_plugin_alert_sms_body_max_chars=first_non_empty(
397+
os.getenv("STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS")
398398
),
399-
crisis_alert_push_recipients=split_env_list(
400-
os.getenv("CRISIS_ALERT_PUSH_RECIPIENTS")
399+
strategy_plugin_alert_push_recipients=split_env_list(
400+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS")
401401
),
402-
crisis_alert_push_provider=first_non_empty(
403-
os.getenv("CRISIS_ALERT_PUSH_PROVIDER")
402+
strategy_plugin_alert_push_provider=first_non_empty(
403+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER")
404404
),
405-
crisis_alert_push_app_token=first_non_empty(
406-
os.getenv("CRISIS_ALERT_PUSH_APP_TOKEN")
405+
strategy_plugin_alert_push_app_token=first_non_empty(
406+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN")
407407
),
408-
crisis_alert_push_access_token=first_non_empty(
409-
os.getenv("CRISIS_ALERT_PUSH_ACCESS_TOKEN")
408+
strategy_plugin_alert_push_access_token=first_non_empty(
409+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN")
410410
),
411-
crisis_alert_push_api_base_url=first_non_empty(
412-
os.getenv("CRISIS_ALERT_PUSH_API_BASE_URL")
411+
strategy_plugin_alert_push_api_base_url=first_non_empty(
412+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL")
413413
),
414-
crisis_alert_push_device=first_non_empty(
415-
os.getenv("CRISIS_ALERT_PUSH_DEVICE")
414+
strategy_plugin_alert_push_device=first_non_empty(
415+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_DEVICE")
416416
),
417-
crisis_alert_push_priority=first_non_empty(
418-
os.getenv("CRISIS_ALERT_PUSH_PRIORITY")
417+
strategy_plugin_alert_push_priority=first_non_empty(
418+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY")
419419
),
420-
crisis_alert_push_tags=first_non_empty(
421-
os.getenv("CRISIS_ALERT_PUSH_TAGS")
420+
strategy_plugin_alert_push_tags=first_non_empty(
421+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_TAGS")
422422
),
423-
crisis_alert_push_body_max_chars=first_non_empty(
424-
os.getenv("CRISIS_ALERT_PUSH_BODY_MAX_CHARS")
423+
strategy_plugin_alert_push_body_max_chars=first_non_empty(
424+
os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS")
425425
),
426-
crisis_alert_telegram_chat_ids=split_env_list(
427-
os.getenv("CRISIS_ALERT_TELEGRAM_CHAT_IDS")
426+
strategy_plugin_alert_telegram_chat_ids=split_env_list(
427+
os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS")
428428
),
429-
crisis_alert_telegram_bot_token=first_non_empty(
430-
os.getenv("CRISIS_ALERT_TELEGRAM_BOT_TOKEN")
429+
strategy_plugin_alert_telegram_bot_token=first_non_empty(
430+
os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN")
431431
),
432-
crisis_alert_telegram_api_base_url=first_non_empty(
433-
os.getenv("CRISIS_ALERT_TELEGRAM_API_BASE_URL")
432+
strategy_plugin_alert_telegram_api_base_url=first_non_empty(
433+
os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL")
434434
),
435-
crisis_alert_telegram_parse_mode=first_non_empty(
436-
os.getenv("CRISIS_ALERT_TELEGRAM_PARSE_MODE")
435+
strategy_plugin_alert_telegram_parse_mode=first_non_empty(
436+
os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE")
437437
),
438-
crisis_alert_telegram_disable_web_page_preview=first_non_empty(
439-
os.getenv("CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW")
438+
strategy_plugin_alert_telegram_disable_web_page_preview=first_non_empty(
439+
os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW")
440440
),
441-
crisis_alert_telegram_body_max_chars=first_non_empty(
442-
os.getenv("CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS")
441+
strategy_plugin_alert_telegram_body_max_chars=first_non_empty(
442+
os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS")
443443
),
444444
runtime_target=runtime_target,
445445
)

scripts/cloud_run_runtime_guard.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,6 @@ def _summarize(entry: dict[str, Any]) -> str:
168168

169169
def _send_telegram(message: str) -> bool:
170170
targets: list[tuple[str, str]] = []
171-
crisis_token = os.environ.get("CRISIS_ALERT_TELEGRAM_BOT_TOKEN")
172-
for chat_id in _split_values(os.environ.get("CRISIS_ALERT_TELEGRAM_CHAT_IDS")):
173-
if crisis_token:
174-
targets.append((crisis_token, chat_id))
175171

176172
token = os.environ.get("TELEGRAM_TOKEN") or os.environ.get("TG_TOKEN")
177173
for chat_id in _split_values(os.environ.get("GLOBAL_TELEGRAM_CHAT_ID")):
@@ -184,7 +180,7 @@ def _send_telegram(message: str) -> bool:
184180
return False
185181

186182
ok = True
187-
base_url = os.environ.get("CRISIS_ALERT_TELEGRAM_API_BASE_URL") or "https://api.telegram.org"
183+
base_url = "https://api.telegram.org"
188184
for token_value, chat_id in unique_targets:
189185
body = urllib.parse.urlencode({"chat_id": chat_id, "text": message}).encode()
190186
request = urllib.request.Request(

scripts/execution_report_heartbeat.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -289,10 +289,6 @@ def _is_accepted_report(payload: dict[str, Any]) -> tuple[bool, str]:
289289

290290
def _send_telegram(message: str) -> bool:
291291
targets: list[tuple[str, str]] = []
292-
crisis_token = os.environ.get("CRISIS_ALERT_TELEGRAM_BOT_TOKEN")
293-
for chat_id in _split_values(os.environ.get("CRISIS_ALERT_TELEGRAM_CHAT_IDS")):
294-
if crisis_token:
295-
targets.append((crisis_token, chat_id))
296292
token = os.environ.get("TELEGRAM_TOKEN") or os.environ.get("TG_TOKEN")
297293
for chat_id in _split_values(os.environ.get("GLOBAL_TELEGRAM_CHAT_ID")):
298294
if token:
@@ -301,7 +297,7 @@ def _send_telegram(message: str) -> bool:
301297
if not unique_targets:
302298
print("No Telegram token/chat configured; unable to send heartbeat alert.", file=sys.stderr)
303299
return False
304-
base_url = os.environ.get("CRISIS_ALERT_TELEGRAM_API_BASE_URL") or "https://api.telegram.org"
300+
base_url = "https://api.telegram.org"
305301
ok = True
306302
for token_value, chat_id in unique_targets:
307303
body = urllib.parse.urlencode({"chat_id": chat_id, "text": message}).encode()

tests/conftest.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,28 @@ def load_strategy_module(**env_overrides):
3030
),
3131
"IB_ACCOUNT_GROUP_CONFIG_SECRET_NAME": None,
3232
"GLOBAL_TELEGRAM_CHAT_ID": None,
33-
"CRISIS_ALERT_CHANNELS": None,
34-
"CRISIS_ALERT_EMAIL_RECIPIENTS": None,
35-
"CRISIS_ALERT_EMAIL_SENDER_EMAIL": None,
36-
"CRISIS_ALERT_EMAIL_SENDER_PASSWORD": None,
37-
"CRISIS_ALERT_EMAIL_SMTP_HOST": None,
38-
"CRISIS_ALERT_EMAIL_SMTP_PORT": None,
39-
"CRISIS_ALERT_EMAIL_SMTP_SECURITY": None,
40-
"CRISIS_ALERT_PUSH_RECIPIENTS": None,
41-
"CRISIS_ALERT_PUSH_PROVIDER": None,
42-
"CRISIS_ALERT_PUSH_APP_TOKEN": None,
43-
"CRISIS_ALERT_PUSH_ACCESS_TOKEN": None,
44-
"CRISIS_ALERT_PUSH_API_BASE_URL": None,
45-
"CRISIS_ALERT_PUSH_DEVICE": None,
46-
"CRISIS_ALERT_PUSH_PRIORITY": None,
47-
"CRISIS_ALERT_PUSH_TAGS": None,
48-
"CRISIS_ALERT_PUSH_BODY_MAX_CHARS": None,
49-
"CRISIS_ALERT_TELEGRAM_CHAT_IDS": None,
50-
"CRISIS_ALERT_TELEGRAM_BOT_TOKEN": None,
51-
"CRISIS_ALERT_TELEGRAM_API_BASE_URL": None,
52-
"CRISIS_ALERT_TELEGRAM_PARSE_MODE": None,
53-
"CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW": None,
54-
"CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS": None,
33+
"STRATEGY_PLUGIN_ALERT_CHANNELS": None,
34+
"STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS": None,
35+
"STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL": None,
36+
"STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD": None,
37+
"STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST": None,
38+
"STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT": None,
39+
"STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY": None,
40+
"STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS": None,
41+
"STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER": None,
42+
"STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN": None,
43+
"STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN": None,
44+
"STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL": None,
45+
"STRATEGY_PLUGIN_ALERT_PUSH_DEVICE": None,
46+
"STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY": None,
47+
"STRATEGY_PLUGIN_ALERT_PUSH_TAGS": None,
48+
"STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS": None,
49+
"STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS": None,
50+
"STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN": None,
51+
"STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL": None,
52+
"STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE": None,
53+
"STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW": None,
54+
"STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS": None,
5555
}
5656
defaults.update(env_overrides)
5757
if "RUNTIME_TARGET_JSON" not in defaults:

tests/test_request_handling.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,8 @@ def fake_post(_url, *, json, timeout):
582582
monkeypatch.setattr(strategy_module, "_handle_request", lambda: (_ for _ in ()).throw(RuntimeError("boom")))
583583
monkeypatch.setattr(strategy_module, "TG_TOKEN", "token-1")
584584
monkeypatch.setattr(strategy_module, "TG_CHAT_ID", "chat-1")
585+
monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN", "plugin-token")
586+
monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS", "plugin-chat")
585587
monkeypatch.setattr(strategy_module.requests, "post", fake_post)
586588

587589
with strategy_module.app.test_request_context("/", method="POST"):

0 commit comments

Comments
 (0)