铁律合规: - P0: 移除三处硬编码API密钥 → lib/secrets.py 三层查找 - P0: 统一LIB/engines调用关系(tts复用音色表,composer桥接editor) - P0: batch支持参数+batch-resume断点续传 - P0: Seed一致性(seed_value/lock_seed字段+gen --lock-seed) - P0: 跨集资产继承(inherit命令)+A/B对比(compare命令) - P1: concat逻辑修复/滤镜崩溃修复/FFmpeg路径统一/成本追踪 - P2: 状态判断修复/CLI --help+--version+模糊匹配 - 新增: 65条命令(原17条)覆盖全链路 - 新增: deps/info/note/history/report/flow/director等 - 语法OK 零重复函数 零密钥泄露
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
# LIB · 密钥管理模块
|
|
# D181 · 2026-07-10
|
|
"""统一密钥入口 · 永不硬编码 · 铁律①"""
|
|
import os
|
|
|
|
def get_ark_key():
|
|
"""获取火山方舟 ARK API Key
|
|
|
|
查找顺序:
|
|
1. 环境变量 ARK_API_KEY
|
|
2. tools/secrets_loader.py 的 SC-001
|
|
3. 项目根 .env 文件
|
|
"""
|
|
# 1. 直接环境变量
|
|
key = os.environ.get("ARK_API_KEY")
|
|
if key:
|
|
return key
|
|
|
|
# 2. 通过 secrets_loader 的编号体系
|
|
try:
|
|
import sys
|
|
tools_dir = os.path.join(
|
|
os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
|
|
"tools"
|
|
)
|
|
if tools_dir not in sys.path:
|
|
sys.path.insert(0, tools_dir)
|
|
from secrets_loader import secret
|
|
key = secret("SC-001")
|
|
if key:
|
|
return key
|
|
except Exception:
|
|
pass
|
|
|
|
# 3. .env 文件兜底
|
|
for env_path in [
|
|
os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), ".env"),
|
|
os.path.expanduser("~/guanghulab/video-ai-system/.env"),
|
|
]:
|
|
if os.path.exists(env_path):
|
|
try:
|
|
with open(env_path, "r", encoding="utf-8") as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if "=" in line and not line.startswith("#"):
|
|
k, v = line.split("=", 1)
|
|
if k.strip() == "ARK_API_KEY":
|
|
return v.strip()
|
|
except Exception:
|
|
continue
|
|
|
|
raise RuntimeError(
|
|
"🔑 ARK_API_KEY 未找到。\n"
|
|
" 请设置环境变量: export ARK_API_KEY=ark-xxx\n"
|
|
" 或配置 SC-001: tools/secrets_loader.py\n"
|
|
" 或在项目根目录创建 .env 文件: ARK_API_KEY=ark-xxx\n"
|
|
" ⊢ 铁律① · 密钥永远不放代码仓库"
|
|
)
|