mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-04-01 01:41:59 +08:00
- ExecuteCommandTool: 执行命令行 - DeleteDownloadHistoryTool: 删除下载历史 - EditFileTool: 编辑文件 - WriteFileTool: 写入文件 - TransferFileTool: 传输文件 - UpdateSiteTool: 更新站点 - UpdateSiteCookieTool: 更新站点Cookie - UpdateSubscribeTool: 更新订阅 - DeleteSubscribeTool: 删除订阅 - DeleteDownloadTool: 删除下载 - ModifyDownloadTool: 修改下载 - RunSchedulerTool: 运行定时任务 - RunWorkflowTool: 运行工作流 - RunPluginCommandTool: 运行插件命令 - SendMessageTool: 发送消息
55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
"""文件写入工具"""
|
|
|
|
from pathlib import Path
|
|
from typing import Optional, Type
|
|
|
|
from anyio import Path as AsyncPath
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.agent.tools.base import MoviePilotTool
|
|
from app.log import logger
|
|
|
|
|
|
class WriteFileInput(BaseModel):
|
|
"""Input parameters for write file tool"""
|
|
|
|
file_path: str = Field(..., description="The absolute path of the file to write")
|
|
content: str = Field(..., description="The content to write into the file")
|
|
|
|
|
|
class WriteFileTool(MoviePilotTool):
|
|
name: str = "write_file"
|
|
description: str = "Write full content to a file. If the file already exists, it will be overwritten. Automatically creates parent directories if they don't exist."
|
|
args_schema: Type[BaseModel] = WriteFileInput
|
|
require_admin: bool = True
|
|
|
|
def get_tool_message(self, **kwargs) -> Optional[str]:
|
|
"""根据参数生成友好的提示消息"""
|
|
file_path = kwargs.get("file_path", "")
|
|
file_name = Path(file_path).name if file_path else "未知文件"
|
|
return f"正在写入文件: {file_name}"
|
|
|
|
async def run(self, file_path: str, content: str, **kwargs) -> str:
|
|
logger.info(f"执行工具: {self.name}, 参数: file_path={file_path}")
|
|
|
|
try:
|
|
path = AsyncPath(file_path)
|
|
|
|
if await path.exists() and not await path.is_file():
|
|
return f"错误:{file_path} 路径已存在但不是一个文件"
|
|
|
|
# 自动创建父目录
|
|
await path.parent.mkdir(parents=True, exist_ok=True)
|
|
|
|
# 写入文件
|
|
await path.write_text(content, encoding="utf-8")
|
|
|
|
logger.info(f"成功写入文件 {file_path}")
|
|
return f"成功写入文件 {file_path}"
|
|
|
|
except PermissionError:
|
|
return f"错误:没有权限写入 {file_path}"
|
|
except Exception as e:
|
|
logger.error(f"写入文件 {file_path} 时发生错误: {str(e)}", exc_info=True)
|
|
return f"操作失败: {str(e)}"
|