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 typing import Dict, Any
from pathlib import Path from pathlib import Path
import json import json
import shutil
import jingrow import jingrow
from jingrow.model.page import Page from jingrow.model.page import Page
from jingrow.utils.path import get_jingrow_root from jingrow.utils.path import get_jingrow_root
@ -36,6 +37,20 @@ class LocalAiNode(Page):
if updated_data.get('node_type'): if updated_data.get('node_type'):
_sync_node_to_json_file(updated_data) _sync_node_to_json_file(updated_data)
return result 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: 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) jingrow.log_error("同步节点到 JSON 文件失败", str(e), exc=e)
return False 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