- secrets-loader.py: 按LOCAL-SECRETS-PATH.hdlp顺序统一加载所有密钥 - qwen-vision.py: 改用secrets-loader.get()获取密钥,删除重复的加载逻辑 - 所有工具脚本今后统一import secrets_loader → 一个入口管理所有密钥
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
||
"""视频AI系统 · 统一密钥加载器
|
||
所有工具脚本通过本模块获取密钥,不各自散落读取逻辑。
|
||
|
||
用法:
|
||
from tools.secrets_loader import secrets
|
||
key = secrets["JIMENG_API_KEY"]
|
||
|
||
密钥来源: video-ai-system/LOCAL-SECRETS-PATH.hdlp
|
||
读取顺序: 本地secrets文件 → 仓库.env → 环境变量 → 空值不覆盖
|
||
"""
|
||
|
||
import os
|
||
|
||
# 密钥文件路径(按优先级)
|
||
_SECRET_FILES = [
|
||
"/Users/bingshuolingdianyuanhe/Documents/guanghulab-local-secrets/video-ai-system.env",
|
||
os.path.expanduser("~/guanghulab/video-ai-system/.env"),
|
||
]
|
||
|
||
def _load():
|
||
"""加载所有密钥到 dict,高优先级文件的同名 key 不被低优先级覆盖"""
|
||
result = {}
|
||
|
||
# 先从低优先级加载
|
||
for path in reversed(_SECRET_FILES):
|
||
if os.path.exists(path):
|
||
with open(path) as f:
|
||
for line in f:
|
||
line = line.strip()
|
||
if not line or line.startswith("#") or "=" not in line:
|
||
continue
|
||
k, v = line.split("=", 1)
|
||
k, v = k.strip(), v.strip()
|
||
if k not in result:
|
||
result[k] = v
|
||
|
||
# 最后加载环境变量(最高优先级)
|
||
for key in list(result.keys()):
|
||
env_val = os.environ.get(key)
|
||
if env_val:
|
||
result[key] = env_val
|
||
|
||
return result
|
||
|
||
secrets = _load()
|
||
|
||
# 快速访问
|
||
def get(key, default=None):
|
||
return secrets.get(key, default)
|
||
|
||
if __name__ == "__main__":
|
||
# 诊断模式:列出所有已加载的密钥变量名(不显示值)
|
||
print("=== 已加载密钥变量 ===")
|
||
for k in sorted(secrets.keys()):
|
||
v = secrets[k]
|
||
masked = v[:8] + "..." + v[-4:] if len(v) > 12 else "***"
|
||
print(f" {k} = {masked}")
|