75b9bffe96
Desktop can auto-pull stop to open+/-1 after a 3$ favorable move; hub pushes open/close events and a 23:00 BJT daily summary via webhook. Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
load_dotenv(ROOT / ".env")
|
|
|
|
DATA_DIR = ROOT / "data"
|
|
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
|
RELEASES_DIR = ROOT / "releases"
|
|
RELEASES_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
class Config:
|
|
SECRET_KEY = os.getenv("FLASK_SECRET_KEY", "gold-monitor-dev-secret-change-me")
|
|
ADMIN_USER = os.getenv("ADMIN_USER", "admin")
|
|
ADMIN_PASSWORD = os.getenv("ADMIN_PASSWORD", "admin123")
|
|
HOST = os.getenv("HOST", "0.0.0.0")
|
|
PORT = int(os.getenv("PORT", "5800"))
|
|
PUBLIC_BASE_URL = os.getenv("PUBLIC_BASE_URL", "http://127.0.0.1:5800").rstrip("/")
|
|
|
|
# 企业微信群机器人(也可在网页「系统设置」覆盖)
|
|
WECOM_WEBHOOK_URL = os.getenv("WECOM_WEBHOOK_URL", "").strip()
|
|
WECOM_DAILY_HOUR = int(os.getenv("WECOM_DAILY_HOUR", "23"))
|
|
WECOM_DAILY_MINUTE = int(os.getenv("WECOM_DAILY_MINUTE", "0"))
|
|
|
|
_db = os.getenv("DATABASE_URL", f"sqlite:///{DATA_DIR / 'gold_monitor.db'}")
|
|
if _db.startswith("sqlite:///"):
|
|
# 相对路径转到仓库根
|
|
rel = _db.replace("sqlite:///", "", 1)
|
|
p = Path(rel)
|
|
if not p.is_absolute():
|
|
p = ROOT / p
|
|
DATABASE_PATH = p
|
|
else:
|
|
DATABASE_PATH = DATA_DIR / "gold_monitor.db"
|