feat: auto-delete node folder when deleting LocalAiNode

- Override delete method in LocalAiNode to delete corresponding node folder
- Add _delete_node_folder helper function to remove node directory
- Import shutil module for directory removal
- Node folder at ai/nodes/{node_type}/ will be automatically deleted when node record is deleted
This commit is contained in:
jingrow 2025-11-21 23:00:52 +08:00
parent 5066b09af6
commit 964f65dc1d

View File

@ -4,6 +4,7 @@
from typing import Dict, Any
from pathlib import Path
import json
import shutil
import jingrow
from jingrow.model.page import Page
from jingrow.utils.path import get_jingrow_root
@ -36,6 +37,20 @@ class LocalAiNode(Page):
if updated_data.get('node_type'):
_sync_node_to_json_file(updated_data)
return result
def delete(self, name: str) -> Dict[str, Any]:
"""删除节点记录,并删除对应的节点文件夹"""
# 在删除前获取节点数据,以便删除对应的文件夹
node_res = self.get(name)
if node_res.get('success'):
node_data = node_res.get('data', {})
node_type = node_data.get('node_type')
if node_type:
# 删除节点文件夹
_delete_node_folder(node_type)
# 调用父类的 delete 方法删除记录
return super().delete(name)
def _sync_node_to_json_file(node_data: Dict[str, Any]) -> bool:
@ -121,3 +136,35 @@ def _sync_node_to_json_file(node_data: Dict[str, Any]) -> bool:
# 静默失败,不影响主流程
jingrow.log_error("同步节点到 JSON 文件失败", str(e), exc=e)
return False
def _delete_node_folder(node_type: str) -> bool:
"""
删除节点文件夹LocalAiNode 类的辅助函数
当删除 Local Ai Node 自动删除对应的节点文件夹
Args:
node_type: 节点类型对应文件夹名称
Returns:
bool: 删除是否成功
"""
try:
if not node_type:
return False
# 获取节点目录路径
jingrow_root = get_jingrow_root()
nodes_root = jingrow_root / "ai" / "nodes"
node_dir = nodes_root / node_type
# 如果文件夹存在,则删除
if node_dir.exists() and node_dir.is_dir():
shutil.rmtree(node_dir)
return True
return False
except Exception as e:
# 静默失败,不影响主流程
jingrow.log_error("删除节点文件夹失败", str(e), exc=e)
return False