feat: 添加飞书用户模块和订阅功能支持 - 新增feishu_users模块用于处理飞书用户身份验证和权限管理 - 新增subscriptions模块用于处理订阅相关功能 - 新增personalization模块用于个性化服务 - 在alembic迁移配置中注册新的模型模块 - 在API路由器中添加feishu_users和subscriptions路由 - 实现事件调度服务的改进,包括错误处理和状态更新优化 - 添加飞书命令处理的权限检查机制 - 实现飞书应用票据事件处理 - 改进审计日志记录功能 ```
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
import os
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
|
|
_database_file = tempfile.NamedTemporaryFile(
|
|
prefix="company-ai-platform-tests-",
|
|
suffix=".db",
|
|
delete=False,
|
|
)
|
|
_database_file.close()
|
|
_database_path = Path(_database_file.name)
|
|
|
|
# This module is loaded before test modules are imported. Keep every suite run isolated
|
|
# from a developer's local .env, database, queues, and external AI/Feishu credentials.
|
|
os.environ.update(
|
|
{
|
|
"COMPANY_AI_DISABLE_DOTENV": "true",
|
|
"APP_ENV": "test",
|
|
"DATABASE_URL": f"sqlite:///{_database_path.as_posix()}",
|
|
"LEGACY_DATABASE_URL": "",
|
|
"LEGACY_ALLOWED_QUERIES": "{}",
|
|
"LEGACY_PROJECT_QUERY": "",
|
|
"LEGACY_TASK_QUERY": "",
|
|
"API_KEY": "test-key",
|
|
"API_KEYS": "[]",
|
|
"AUDIT_API_KEY": "audit-key",
|
|
"AUDIT_API_KEYS": "[]",
|
|
"AUDIT_API_ACTOR": "audit-manager",
|
|
"MODEL_PROVIDER": "noop",
|
|
"DIRECT_LLM_API_KEY": "",
|
|
"HERMES_API_KEY": "",
|
|
"OPENCLAW_API_KEY": "",
|
|
"OPENCLAW_GATEWAY_TOKEN": "",
|
|
"FEISHU_APP_ID": "",
|
|
"FEISHU_APP_SECRET": "",
|
|
"FEISHU_ENCRYPT_KEY": "",
|
|
"FEISHU_DEFAULT_CHAT_ID": "",
|
|
"FEISHU_VERIFICATION_TOKEN": "test-feishu-token",
|
|
"FEISHU_ADMIN_IDENTITIES": "",
|
|
"FEISHU_USER_FEATURES_ENABLED": "false",
|
|
"MARKET_DATA_TOKEN": "",
|
|
"SCHEDULER_ENABLED": "false",
|
|
"TASK_QUEUE_ENABLED": "false",
|
|
"TASK_QUEUE_ALWAYS_EAGER": "false",
|
|
"LEGACY_SYNC_ENABLED": "false",
|
|
}
|
|
)
|
|
|
|
|
|
def pytest_sessionfinish() -> None:
|
|
"""Remove the suite database after every test module has finished."""
|
|
|
|
database_module = sys.modules.get("app.core.database.session")
|
|
if database_module is not None:
|
|
database_module.engine.dispose()
|
|
if database_module.legacy_engine is not None:
|
|
database_module.legacy_engine.dispose()
|
|
_database_path.unlink(missing_ok=True)
|