akg-factor-bridge/config.py

66 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""连接配置:全部从环境变量/.env 读取,不硬编码任何主机。
三处连接:
AKG_PG_* —— astock-kg 基座 PostgreSQL读四个只读视图只读账号即可
HEAT_MYSQL_* —— 153 代理 MySQL读 stock_fund_heat_scores 热度)
FACTOR_MYSQL_* —— 平台 PROXY_DB_URL 指向的 MySQL写 t_factor_* + factor_metadata
现价来源 PRICE_MYSQL_*upside 用)默认复用 FACTOR_MYSQL_* 同实例。
"""
import os
from dataclasses import dataclass
try:
from dotenv import load_dotenv
load_dotenv()
except Exception:
pass
def _req(k: str) -> str:
v = os.environ.get(k)
if not v:
raise RuntimeError(f".env 缺配置: {k}")
return v
def _opt(k: str, fallback: str) -> str:
return os.environ.get(k) or fallback
@dataclass(frozen=True)
class Conn:
host: str
port: int
user: str
password: str
db: str
def akg_pg() -> Conn:
return Conn(_req("AKG_PG_HOST"), int(os.environ.get("AKG_PG_PORT", 5432)),
_req("AKG_PG_USER"), os.environ.get("AKG_PG_PASSWORD", ""), _req("AKG_PG_DB"))
def heat_mysql() -> Conn:
return Conn(_req("HEAT_MYSQL_HOST"), int(os.environ.get("HEAT_MYSQL_PORT", 3306)),
_req("HEAT_MYSQL_USER"), os.environ.get("HEAT_MYSQL_PASSWORD", ""), _req("HEAT_MYSQL_DB"))
def factor_mysql() -> Conn:
return Conn(_req("FACTOR_MYSQL_HOST"), int(os.environ.get("FACTOR_MYSQL_PORT", 3306)),
_req("FACTOR_MYSQL_USER"), os.environ.get("FACTOR_MYSQL_PASSWORD", ""), _req("FACTOR_MYSQL_DB"))
def price_mysql() -> Conn:
"""现价gp_day_data来源默认与因子库同实例。"""
return Conn(_opt("PRICE_MYSQL_HOST", _req("FACTOR_MYSQL_HOST")),
int(_opt("PRICE_MYSQL_PORT", os.environ.get("FACTOR_MYSQL_PORT", "3306"))),
_opt("PRICE_MYSQL_USER", _req("FACTOR_MYSQL_USER")),
_opt("PRICE_MYSQL_PASSWORD", os.environ.get("FACTOR_MYSQL_PASSWORD", "")),
_opt("PRICE_MYSQL_DB", _req("FACTOR_MYSQL_DB")))
# gp_day_data 股票代码列名待实机核实ts_code 或 symbol
PRICE_CODE_COL = os.environ.get("PRICE_CODE_COL", "ts_code")
FACTOR_API_BASE = os.environ.get("FACTOR_API_BASE", "").rstrip("/")