From 31eff0757e9cf54e23fe32423e79b8bdd2741eeb Mon Sep 17 00:00:00 2001 From: ymq Date: Sat, 29 Aug 2026 15:00:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20get=5Fproject=5Fdir=5Fpl=E4=BA=A7?= =?UTF-8?q?=E7=BA=BF=E9=9A=94=E7=A6=BB=E7=89=88=E2=80=94=E2=80=94=E8=B7=A8?= =?UTF-8?q?=E4=BA=A7=E7=BA=BF=E9=A1=B9=E7=9B=AE=E8=A7=86=E4=B8=BA=E6=97=A0?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE(=E5=95=86=E6=9C=BA=E7=A9=BA=E9=97=B4?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=BC=80=E5=8F=91=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipeline_service/workspace.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pipeline_service/workspace.py b/pipeline_service/workspace.py index 8090e92..f82be1e 100644 --- a/pipeline_service/workspace.py +++ b/pipeline_service/workspace.py @@ -275,6 +275,31 @@ async def get_project_dir(sor, uid, session_id=''): return os.path.join(space_dir, 'projects', dname), workspace_base +async def get_project_dir_pl(sor, uid, session_id='', pipeline_id=''): + """产线隔离版:会话项目与指定产线不一致时视为无项目(返回空目录)。 + + 商机/投标产线入口的工作空间不能显示开发产线项目的空间—— + 会话里残留的跨产线项目(如元景项目)不应劫持本产线的工作空间。 + pipeline_id 为空时不做隔离(向后兼容旧调用)。 + """ + if not pipeline_id: + return await get_project_dir(sor, uid, session_id) + pid = await get_session_project_id(sor, uid, session_id) + if pid: + try: + r = await sor.sqlExe( + "SELECT pipeline_id FROM sd_projects WHERE id=${p}$ LIMIT 1", + {"p": pid}) + if r: + proj_pl = getattr(r[0], 'pipeline_id', '') or '' + if proj_pl != pipeline_id: + # 跨产线项目:视为本产线无项目(与 gateway 的隔离一致) + return '', await get_workspace_base(sor) + except Exception: + pass + return await get_project_dir(sor, uid, session_id) + + async def get_project_apps_modules(sor, uid, session_id=''): """读项目目录下 {应用名}_spec.json,返回 (apps, modules)。 @@ -488,6 +513,7 @@ def load_workspace(): g.get_workspace_path = get_workspace_path g.get_space_dir = get_space_dir g.get_project_dir = get_project_dir + g.get_project_dir_pl = get_project_dir_pl g.get_project_apps_modules = get_project_apps_modules g.get_session_project_id = get_session_project_id g.get_session_context = get_session_context