Files
wecom_it_smart_desk/backend/app/integrations/lianruan/config.py
T

78 lines
2.4 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.
# 联软LV7000配置管理
"""
从system_configs表读取联软API配置,构建LianruanClient实例。
联软配置键(前缀 integration_lianruan_):
- integration_lianruan_base_url: 联软API地址(如 http://192.168.x.x:30098
- integration_lianruan_api_account: API账号
- integration_lianruan_api_password: API密码
- integration_lianruan_validate_key: 验证密钥(可选)
配置方式:管理后台 → 系统集成 → 联软LV7000 → 填入账号密码
"""
import logging
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.integrations.lianruan.client import LianruanClient
from app.integrations.lianruan.exceptions import LianruanConfigError
from app.models.system_config import SystemConfig
logger = logging.getLogger(__name__)
# 联软配置在 system_configs 表中的 key 前缀
LIANRUAN_CONFIG_PREFIX = "integration_lianruan_"
async def get_lianruan_client(db: AsyncSession) -> LianruanClient:
"""从系统配置表构建联软API客户端。
读取 integration_lianruan_ 前缀的配置项,构建 LianruanClient 实例。
如果任何必填配置缺失,抛出 LianruanConfigError。
Args:
db: 数据库会话
Returns:
LianruanClient: 已配置的联软API客户端实例
Raises:
LianruanConfigError: 缺少必填配置
"""
# 读取四个配置
result = await db.execute(
select(SystemConfig).where(
SystemConfig.config_key.startswith(LIANRUAN_CONFIG_PREFIX)
)
)
configs = list(result.scalars().all())
# 构建 key→value 映射
config_map = {cfg.config_key: cfg.config_value for cfg in configs}
base_url = config_map.get(f"{LIANRUAN_CONFIG_PREFIX}base_url", "")
api_account = config_map.get(f"{LIANRUAN_CONFIG_PREFIX}api_account", "")
api_password = config_map.get(f"{LIANRUAN_CONFIG_PREFIX}api_password", "")
validate_key = config_map.get(f"{LIANRUAN_CONFIG_PREFIX}validate_key", "")
# 校验必填项
missing = []
if not base_url:
missing.append("Base URL")
if not api_account:
missing.append("API账号")
if not api_password:
missing.append("API密码")
if missing:
raise LianruanConfigError(f"联软API未配置:缺少{', '.join(missing)}")
return LianruanClient(
base_url=base_url,
api_account=api_account,
api_password=api_password,
validate_key=validate_key or None,
)