Files
MemoryBear/api/app/utils/config_utils.py
2026-02-09 21:02:41 +08:00

75 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.
"""
Configuration utility functions
Shared utilities for configuration handling to avoid circular imports.
"""
from uuid import UUID
from sqlalchemy.orm import Session
import uuid as uuid_module
def resolve_config_id(config_id: UUID | int | str, db: Session) -> UUID:
"""
解析 config_id支持 UUID、UUID字符串、整数等多种格式
Args:
config_id: 配置IDUUID、UUID字符串 或 整数)
db: 数据库会话
Returns:
UUID: 解析后的配置ID
Raises:
ValueError: 当找不到对应的配置时或格式无效时
"""
from app.models.memory_config_model import MemoryConfig
# 1. 如果已经是 UUID 类型,直接返回
if isinstance(config_id, UUID):
return config_id
# 2. 如果是整数类型,通过 config_id_old 查找
if isinstance(config_id, int):
if config_id <= 0:
raise ValueError(f"config_id 必须是正整数: {config_id}")
memory_config = db.query(MemoryConfig).filter(
MemoryConfig.config_id_old == config_id
).first()
if not memory_config:
raise ValueError(f"未找到 config_id_old={config_id} 对应的配置")
return memory_config.config_id
# 3. 如果是字符串类型
if isinstance(config_id, str):
config_id_stripped = config_id.strip()
# 3.1 先尝试解析为整数(用于查询 config_id_old
# 这样可以处理 "17" 这样的字符串
try:
old_id = int(config_id_stripped)
if old_id > 0:
memory_config = db.query(MemoryConfig).filter(
MemoryConfig.config_id_old == old_id
).first()
if not memory_config:
raise ValueError(f"未找到 config_id_old={old_id} 对应的配置")
return memory_config.config_id
except ValueError:
# 不是整数,继续尝试 UUID
pass
# 3.2 尝试解析为 UUID
try:
return uuid_module.UUID(config_id_stripped)
except ValueError:
pass
# 3.3 无法解析的字符串格式
raise ValueError(f"无效的 config_id 格式: '{config_id}'(必须是 UUID 或正整数)")
# 4. 不支持的类型
raise ValueError(f"不支持的 config_id 类型: {type(config_id).__name__}")