ForcePilot/server/utils/common_utils.py
Wenjie Zhang 63da8d9733 feat(chatbot): 添加MCP工具支持并优化工具管理逻辑
实现MCP服务器工具的动态加载和管理功能
重构工具获取逻辑以支持MCP工具和本地工具的混合使用
优化前端工具调用结果显示样式
移除未使用的工具相关代码
添加工具序列化转换工具函数
2025-09-01 03:38:46 +08:00

66 lines
1.9 KiB
Python

"""通用工具函数"""
import logging
from sqlalchemy.orm import Session
from fastapi import Request
from server.models.user_model import User, OperationLog
def setup_logging():
"""配置应用程序日志格式"""
# 配置日志格式
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s: %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
force=True
)
# 确保uvicorn的日志也使用相同格式
uvicorn_logger = logging.getLogger("uvicorn")
uvicorn_access_logger = logging.getLogger("uvicorn.access")
# 创建格式化器
formatter = logging.Formatter(
fmt="%(asctime)s %(levelname)s: %(message)s",
datefmt="%m-%d %H:%M:%S"
)
# 为所有处理器设置格式化器
for handler in uvicorn_logger.handlers:
handler.setFormatter(formatter)
for handler in uvicorn_access_logger.handlers:
handler.setFormatter(formatter)
def log_operation(db: Session, user_id: int, operation: str, details: str = None, request: Request = None):
"""记录用户操作日志"""
ip_address = None
if request:
ip_address = request.client.host if request.client else None
log = OperationLog(
user_id=user_id,
operation=operation,
details=details,
ip_address=ip_address
)
db.add(log)
db.commit()
def get_user_dict(user: User, include_password: bool = False) -> dict:
"""获取用户字典表示"""
return user.to_dict(include_password)
def convert_serializable(obj):
"""将对象转换为可序列化的格式"""
if isinstance(obj, list | tuple):
return [convert_serializable(item) for item in obj]
if isinstance(obj, dict):
return {k: convert_serializable(v) for k, v in obj.items()}
if hasattr(obj, '__dict__'):
return convert_serializable(vars(obj))
return obj