Files
soul-yongping/scripts/test/config.py
Alex-larget d4ba905ee5 通过自动提及和标签创建功能,增强文章编辑功能
- 在文章编辑过程中,实现了自动创建不存在的@提及和#标签的功能,确保它们被添加到相应的数据库中。
- 更新了内容处理逻辑,以利用新创建的提及和标签,从而改善用户体验和内容管理。
- 增强了人物和链接标签创建的后端处理能力,使文章编辑过程中能够实现无缝集成。
2026-03-16 11:09:26 +08:00

120 lines
4.0 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.

# -*- coding: utf-8 -*-
"""
测试配置。从项目 soul-api/.env* 或 scripts/test/.env.test 或环境变量读取。
必须明确指定测试环境,避免误测正式库。
"""
import os
from pathlib import Path
# 项目根目录scripts/test 的上级的上级)
PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
SOUL_API_ENV = PROJECT_ROOT / "soul-api"
TEST_DIR = Path(__file__).resolve().parent
def _apply_env_file(path: Path) -> None:
"""将 .env 文件中的变量加载到 os.environ仅当未设置时"""
if not path.exists():
return
for line in path.read_text(encoding="utf-8", errors="ignore").splitlines():
line = line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
k, v = line.split("=", 1)
k = k.strip()
v = v.strip().strip('"').strip("'")
if k and k not in os.environ:
os.environ[k] = v
# 优先加载 scripts/test/.env.test本地覆盖
_apply_env_file(TEST_DIR / ".env.test")
# 环境与 API 地址映射(与 miniprogram/app.js、soul-api/.env* 一致)
ENV_PROFILES = {
"local": "http://localhost:8080",
"souldev": "https://souldev.quwanzhi.com",
"soulapi": "https://soulapi.quwanzhi.com",
}
# 环境中文名(用于提示)
ENV_LABELS = {
"local": "本地",
"souldev": "测试",
"soulapi": "正式",
}
def _load_env_file(path: Path) -> dict:
"""解析 .env 文件为 dict"""
out = {}
if not path.exists():
return out
for line in path.read_text(encoding="utf-8", errors="ignore").splitlines():
line = line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
k, v = line.split("=", 1)
out[k.strip()] = v.strip().strip('"').strip("'")
return out
def _resolve_api_base() -> tuple[str, str]:
"""
解析 API 地址与当前环境标签。
优先级SOUL_TEST_ENV > SOUL_API_BASE > 从 soul-api/.env 读取 > 默认 local
"""
env_val = os.environ.get("SOUL_TEST_ENV", "").strip().lower()
explicit_base = os.environ.get("SOUL_API_BASE", "").strip().rstrip("/")
if explicit_base:
# 显式指定了地址,根据地址推断环境标签
label = "自定义"
for k, v in ENV_PROFILES.items():
if v.rstrip("/") == explicit_base:
label = ENV_LABELS.get(k, k)
break
return explicit_base, label
if env_val in ENV_PROFILES:
return ENV_PROFILES[env_val], ENV_LABELS.get(env_val, env_val)
# 尝试从 soul-api/.env 读取 API_BASE_URL
env_path = SOUL_API_ENV / ".env"
env_dev = SOUL_API_ENV / ".env.development"
env_prod = SOUL_API_ENV / ".env.production"
for p in [env_path, env_dev, env_prod]:
loaded = _load_env_file(p)
if loaded.get("API_BASE_URL"):
base = loaded["API_BASE_URL"].rstrip("/")
for k, v in ENV_PROFILES.items():
if v.rstrip("/") == base:
return base, ENV_LABELS.get(k, k)
return base, "项目配置"
# 默认本地,并提示未显式指定
return ENV_PROFILES["local"], ENV_LABELS["local"]
API_BASE, ENV_LABEL = _resolve_api_base()
# 管理端登录(与 scripts/本地启动.sh 一致;不同环境账号可能不同)
ADMIN_USERNAME = os.environ.get("SOUL_ADMIN_USERNAME", "admin")
ADMIN_PASSWORD = os.environ.get("SOUL_ADMIN_PASSWORD", "admin123")
# 小程序开发环境登录用 userId仅 local/souldev 且 APP_ENV=development 时可用)
MINIAPP_DEV_USER_ID = os.environ.get("SOUL_MINIPROGRAM_DEV_USER_ID", "")
def get_env_banner() -> str:
"""返回测试环境提示横幅"""
return (
"\n"
"========================================\n"
f" 测试环境: {ENV_LABEL} ({API_BASE})\n"
"========================================\n"
" 若需切换,请设置: SOUL_TEST_ENV=local|souldev|soulapi\n"
" 或: SOUL_API_BASE=<完整 API 地址>\n"
"========================================\n"
)