From 8d83adf1aaaba7c679241a773800bab04080a694 Mon Sep 17 00:00:00 2001 From: xiaozhu <2395895331@qq.com> Date: Wed, 12 Aug 2026 15:27:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=B7=AF=E7=94=B1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/backend/scripts.py | 102 ++++++++++++++++----------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/backend/src/backend/scripts.py b/backend/src/backend/scripts.py index 8673f39..1064caf 100644 --- a/backend/src/backend/scripts.py +++ b/backend/src/backend/scripts.py @@ -894,6 +894,57 @@ async def list_scripts( } +@router.get("/api/v1/scripts/{script_id}/content") +async def get_script_content( + script_id: str, + request: Request, + context: RequestContext = Depends(request_context), + session: AsyncSession = Depends(database_session), +) -> dict[str, Any]: + """获取脚本内容(用于只读预览)。 + + 适用于被锁定的脚本,非所有者只能查看内容,不能编辑。 + 该接口不检查锁状态,调用方需自行判断权限。 + """ + script = await session.scalar( + select(Scripts) + .where( + Scripts.script_id == script_id, + Scripts.workspace_id == context.workspace.workspace_id, + Scripts.status == "active", + ) + ) + if script is None: + raise HTTPException(status.HTTP_404_NOT_FOUND, "script not found") + + # 获取 Jupyter 路径 + jupyter_name = _jupyter_path(script.script_type, script.script_id) + + # 从 Jupyter 读取内容 + runtime_client = request.app.state.runtime_client + try: + content_data = await runtime_client.get_file( + context.workspace.workspace_id, + name=jupyter_name, + ) + except RuntimeClientError as exc: + raise HTTPException( + status_code=exc.status_code, + detail=exc.detail, + ) from exc + + return { + "request_id": context.request_id, + "data": { + "script_id": script.script_id, + "script_type": script.script_type, + "content": content_data.get("content"), + "format": content_data.get("format"), + }, + "meta": {}, + } + + @router.get("/api/v1/scripts/{script_id}") async def get_script( script_id: str, @@ -1360,54 +1411,3 @@ async def version_download_url( request, ) return {"request_id": context.request_id, "data": data["data"], "meta": {}} - - -@router.get("/api/v1/scripts/{script_id}/content") -async def get_script_content( - script_id: str, - request: Request, - context: RequestContext = Depends(request_context), - session: AsyncSession = Depends(database_session), -) -> dict[str, Any]: - """获取脚本内容(用于只读预览)。 - - 适用于被锁定的脚本,非所有者只能查看内容,不能编辑。 - 该接口不检查锁状态,调用方需自行判断权限。 - """ - script = await session.scalar( - select(Scripts) - .where( - Scripts.script_id == script_id, - Scripts.workspace_id == context.workspace.workspace_id, - Scripts.status == "active", - ) - ) - if script is None: - raise HTTPException(status.HTTP_404_NOT_FOUND, "script not found") - - # 获取 Jupyter 路径 - jupyter_name = _jupyter_path(script.script_type, script.script_id) - - # 从 Jupyter 读取内容 - runtime_client = request.app.state.runtime_client - try: - content_data = await runtime_client.get_file( - context.workspace.workspace_id, - name=jupyter_name, - ) - except RuntimeClientError as exc: - raise HTTPException( - status_code=exc.status_code, - detail=exc.detail, - ) from exc - - return { - "request_id": context.request_id, - "data": { - "script_id": script.script_id, - "script_type": script.script_type, - "content": content_data.get("content"), - "format": content_data.get("format"), - }, - "meta": {}, - }