From 964f65dc1d755e2f309209162edcafd0f10abea6 Mon Sep 17 00:00:00 2001 From: jingrow Date: Fri, 21 Nov 2025 23:00:52 +0800 Subject: [PATCH] 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 --- .../pagetype/local_ai_node/local_ai_node.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/apps/jingrow/jingrow/ai/pagetype/local_ai_node/local_ai_node.py b/apps/jingrow/jingrow/ai/pagetype/local_ai_node/local_ai_node.py index f20cb6b..b25de21 100644 --- a/apps/jingrow/jingrow/ai/pagetype/local_ai_node/local_ai_node.py +++ b/apps/jingrow/jingrow/ai/pagetype/local_ai_node/local_ai_node.py @@ -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