chore: dep inject for model in agent app sandbox upload (#40153)

This commit is contained in:
Likalikali
2026-08-07 21:28:31 +08:00
committed by GitHub
parent c6b1311aa3
commit c094117ca2
2 changed files with 34 additions and 28 deletions
@@ -11,7 +11,6 @@ from typing import Literal
from uuid import UUID
from dify_agent.client import DifyAgentClientError, DifyAgentHTTPError, DifyAgentTimeoutError
from flask import request
from flask_restx import Resource
from pydantic import BaseModel, Field
from sqlalchemy.orm import Session
@@ -28,6 +27,7 @@ from controllers.console.agent.app_helpers import resolve_agent_runtime_app_mode
from controllers.console.app.wraps import get_app_model
from controllers.console.wraps import (
account_initialization_required,
model_validate,
setup_required,
with_current_tenant_id,
with_current_user,
@@ -242,18 +242,25 @@ class AgentAppSandboxUploadResource(Resource):
@with_current_tenant_id
@with_current_user
@with_session(write=False)
def post(self, session: Session, current_user: Account, tenant_id: str, agent_id: UUID):
@model_validate(AgentSandboxUploadPayload)
def post(
self,
req_data: AgentSandboxUploadPayload,
session: Session,
current_user: Account,
tenant_id: str,
agent_id: UUID,
):
app_model = resolve_agent_runtime_app_model(session=session, tenant_id=tenant_id, agent_id=agent_id)
payload = AgentSandboxUploadPayload.model_validate(request.get_json(silent=True) or {})
try:
result = AgentAppSandboxService().upload_file(
tenant_id=tenant_id,
app_id=app_model.id,
agent_id=str(agent_id),
caller_type=payload.caller_type,
caller_id=payload.caller_id,
caller_type=req_data.caller_type,
caller_id=req_data.caller_id,
account_id=current_user.id,
path=payload.path,
path=req_data.path,
)
except Exception as exc:
return _handle(exc)
@@ -345,16 +352,23 @@ class WorkflowAgentSandboxUploadResource(Resource):
@account_initialization_required
@get_app_model(mode=[AppMode.ADVANCED_CHAT, AppMode.WORKFLOW])
@with_current_tenant_id
def post(self, tenant_id: str, app_model: App, workflow_run_id: UUID, node_id: str):
payload = WorkflowAgentSandboxUploadPayload.model_validate(request.get_json(silent=True) or {})
@model_validate(WorkflowAgentSandboxUploadPayload)
def post(
self,
req_data: WorkflowAgentSandboxUploadPayload,
tenant_id: str,
app_model: App,
workflow_run_id: UUID,
node_id: str,
):
try:
result = WorkflowAgentSandboxService().upload_file(
tenant_id=tenant_id,
app_id=app_model.id,
workflow_run_id=str(workflow_run_id),
node_id=node_id,
node_execution_id=payload.node_execution_id,
path=payload.path,
node_execution_id=req_data.node_execution_id,
path=req_data.path,
session=db.session(),
)
except Exception as exc:
@@ -172,22 +172,16 @@ def test_agent_app_sandbox_resources_proxy_service(monkeypatch: pytest.MonkeyPat
"query_params_from_request",
lambda model: SimpleNamespace(caller_type="build_draft", caller_id="build-1", path="sub/report.txt"),
)
monkeypatch.setattr(
module,
"request",
SimpleNamespace(
get_json=lambda silent=True: {
"caller_type": "build_draft",
"caller_id": "build-1",
"path": "report.txt",
}
),
)
info = unwrap(module.AgentAppSandboxInfoResource.get)(object(), session, account, "tenant-1", "agent-1")
listing = unwrap(module.AgentAppSandboxListResource.get)(object(), session, account, "tenant-1", "agent-1")
preview = unwrap(module.AgentAppSandboxReadResource.get)(object(), session, account, "tenant-1", "agent-1")
upload = unwrap(module.AgentAppSandboxUploadResource.post)(object(), session, account, "tenant-1", "agent-1")
req_data = module.AgentSandboxUploadPayload.model_validate(
{"caller_type": "build_draft", "caller_id": "build-1", "path": "report.txt"}
)
upload = unwrap(module.AgentAppSandboxUploadResource.post)(
object(), req_data, session, account, "tenant-1", "agent-1"
)
assert info == {"workspace_cwd": "."}
assert listing["path"] == "sub/report.txt"
@@ -240,11 +234,6 @@ def test_workflow_agent_sandbox_resources_proxy_service(monkeypatch: pytest.Monk
"query_params_from_request",
lambda model: SimpleNamespace(node_execution_id="execution-1", path="out.txt"),
)
monkeypatch.setattr(
module,
"request",
SimpleNamespace(get_json=lambda silent=True: {"node_execution_id": "execution-1", "path": "upload.txt"}),
)
app_model = _app_model()
listing = unwrap(module.WorkflowAgentSandboxListResource.get)(
@@ -253,8 +242,11 @@ def test_workflow_agent_sandbox_resources_proxy_service(monkeypatch: pytest.Monk
preview = unwrap(module.WorkflowAgentSandboxReadResource.get)(
object(), "tenant-1", app_model, "run-1", "agent-node"
)
req_data = module.WorkflowAgentSandboxUploadPayload.model_validate(
{"node_execution_id": "execution-1", "path": "upload.txt"}
)
upload = unwrap(module.WorkflowAgentSandboxUploadResource.post)(
object(), "tenant-1", app_model, "run-1", "agent-node"
object(), req_data, "tenant-1", app_model, "run-1", "agent-node"
)
assert listing["path"] == "out.txt"