From a964723dd293a21928455714df5e3af8f9a5f1c2 Mon Sep 17 00:00:00 2001 From: jingrow Date: Mon, 3 Nov 2025 03:21:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0get=5Fjingrow=5Froot=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jingrow/jingrow/api/node_management.py | 16 ++++++++-------- apps/jingrow/jingrow/utils/path.py | 5 +++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/apps/jingrow/jingrow/api/node_management.py b/apps/jingrow/jingrow/api/node_management.py index ecf84ab..35fed8b 100644 --- a/apps/jingrow/jingrow/api/node_management.py +++ b/apps/jingrow/jingrow/api/node_management.py @@ -13,7 +13,7 @@ from jingrow.utils.fs import atomic_write_json from jingrow.utils.jingrow_api import get_record_id, create_record, update_record, get_record_list from jingrow.utils.auth import get_jingrow_cloud_url, get_jingrow_cloud_api_headers from jingrow.config import Config -from jingrow.utils.path import get_root_path, get_apps_path +from jingrow.utils.path import get_root_path, get_jingrow_root logger = logging.getLogger(__name__) @@ -34,7 +34,7 @@ async def export_node_definition(payload: Dict[str, Any]): export_data = {"metadata": metadata, **(schema or {})} - jingrow_root = get_apps_path() / "jingrow" / "jingrow" + jingrow_root = get_jingrow_root() new_root = jingrow_root / "ai" / "nodes" target = new_root / node_type / f"{node_type}.json" atomic_write_json(target, export_data) @@ -49,7 +49,7 @@ async def import_local_node_definitions(): 扫描本地节点定义目录,按 metadata 去重后导入到 Local Ai Node。 """ try: - jingrow_root = get_apps_path() / "jingrow" / "jingrow" + jingrow_root = get_jingrow_root() nodes_root = jingrow_root / "ai" / "nodes" if not nodes_root.exists(): return {"success": True, "matched": 0, "imported": 0, "skipped_existing": 0} @@ -127,7 +127,7 @@ async def get_all_node_metadata(): 获取所有节点的元数据,用于流程编排界面 """ try: - jingrow_root = get_apps_path() / "jingrow" / "jingrow" + jingrow_root = get_jingrow_root() nodes_root = jingrow_root / "ai" / "nodes" if not nodes_root.exists(): @@ -175,7 +175,7 @@ async def get_node_schema(node_type: str): 获取指定节点类型的Schema配置 """ try: - jingrow_root = get_apps_path() / "jingrow" / "jingrow" + jingrow_root = get_jingrow_root() nodes_root = jingrow_root / "ai" / "nodes" json_file = nodes_root / node_type / f"{node_type}.json" @@ -306,7 +306,7 @@ async def get_installed_node_types(): """ try: # 确定节点目录路径:apps/jingrow/jingrow/ai/nodes - jingrow_root = get_apps_path() / "jingrow" / "jingrow" + jingrow_root = get_jingrow_root() nodes_root = jingrow_root / "ai" / "nodes" node_types = [] @@ -527,7 +527,7 @@ def _install_single_node_directory(node_dir: str) -> Dict[str, Any]: return {'success': False, 'error': '节点定义中缺少 metadata.type'} # 确定目标目录:apps/jingrow/jingrow/ai/nodes - jingrow_root = get_apps_path() / "jingrow" / "jingrow" + jingrow_root = get_jingrow_root() nodes_root = jingrow_root / "ai" / "nodes" nodes_root.mkdir(parents=True, exist_ok=True) @@ -589,7 +589,7 @@ async def package_node(node_type: str): try: from datetime import datetime - jingrow_root = get_apps_path() / "jingrow" / "jingrow" + jingrow_root = get_jingrow_root() nodes_root = jingrow_root / "ai" / "nodes" node_dir = nodes_root / node_type diff --git a/apps/jingrow/jingrow/utils/path.py b/apps/jingrow/jingrow/utils/path.py index 17258df..23fbf87 100644 --- a/apps/jingrow/jingrow/utils/path.py +++ b/apps/jingrow/jingrow/utils/path.py @@ -16,3 +16,8 @@ def get_apps_path() -> Path: return get_root_path() / "apps" +@lru_cache(maxsize=1) +def get_jingrow_root() -> Path: + """返回 jingrow 模块根目录路径:apps/jingrow/jingrow""" + return get_root_path() / "apps" / "jingrow" / "jingrow" +