mirror of
https://github.com/langgenius/dify.git
synced 2026-04-19 21:37:50 +08:00
fix: open restore version panel raise 500 (#35240)
This commit is contained in:
parent
7a880ae60c
commit
76af80e332
@ -4,7 +4,7 @@ from collections.abc import Sequence
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from flask import abort, request
|
from flask import abort, request
|
||||||
from flask_restx import Resource, fields, marshal_with
|
from flask_restx import Resource, fields, marshal, marshal_with
|
||||||
from graphon.enums import NodeType
|
from graphon.enums import NodeType
|
||||||
from graphon.file import File
|
from graphon.file import File
|
||||||
from graphon.graph_engine.manager import GraphEngineManager
|
from graphon.graph_engine.manager import GraphEngineManager
|
||||||
@ -942,7 +942,6 @@ class PublishedAllWorkflowApi(Resource):
|
|||||||
@login_required
|
@login_required
|
||||||
@account_initialization_required
|
@account_initialization_required
|
||||||
@get_app_model(mode=[AppMode.ADVANCED_CHAT, AppMode.WORKFLOW])
|
@get_app_model(mode=[AppMode.ADVANCED_CHAT, AppMode.WORKFLOW])
|
||||||
@marshal_with(workflow_pagination_model)
|
|
||||||
@edit_permission_required
|
@edit_permission_required
|
||||||
def get(self, app_model: App):
|
def get(self, app_model: App):
|
||||||
"""
|
"""
|
||||||
@ -970,9 +969,10 @@ class PublishedAllWorkflowApi(Resource):
|
|||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
named_only=named_only,
|
named_only=named_only,
|
||||||
)
|
)
|
||||||
|
serialized_workflows = marshal(workflows, workflow_fields_copy)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"items": workflows,
|
"items": serialized_workflows,
|
||||||
"page": page,
|
"page": page,
|
||||||
"limit": limit,
|
"limit": limit,
|
||||||
"has_more": has_more,
|
"has_more": has_more,
|
||||||
|
|||||||
@ -258,6 +258,63 @@ def test_restore_published_workflow_to_draft_returns_400_for_invalid_structure(
|
|||||||
assert exc.value.description == "invalid workflow graph"
|
assert exc.value.description == "invalid workflow graph"
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_published_workflows_marshals_items_before_session_closes(app, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||||
|
api = workflow_module.PublishedAllWorkflowApi()
|
||||||
|
handler = _unwrap(api.get)
|
||||||
|
|
||||||
|
session_state = {"open": False}
|
||||||
|
|
||||||
|
class _SessionContext:
|
||||||
|
def __enter__(self):
|
||||||
|
session_state["open"] = True
|
||||||
|
return object()
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc, tb):
|
||||||
|
session_state["open"] = False
|
||||||
|
return False
|
||||||
|
|
||||||
|
class _SessionMaker:
|
||||||
|
def begin(self):
|
||||||
|
return _SessionContext()
|
||||||
|
|
||||||
|
class _Workflow:
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
assert session_state["open"] is True
|
||||||
|
return "w1"
|
||||||
|
|
||||||
|
monkeypatch.setattr(workflow_module, "db", SimpleNamespace(engine=object()))
|
||||||
|
monkeypatch.setattr(workflow_module, "sessionmaker", lambda *_args, **_kwargs: _SessionMaker())
|
||||||
|
monkeypatch.setattr(workflow_module, "current_account_with_tenant", lambda: (SimpleNamespace(id="u1"), "t1"))
|
||||||
|
monkeypatch.setattr(
|
||||||
|
workflow_module,
|
||||||
|
"WorkflowService",
|
||||||
|
lambda: SimpleNamespace(
|
||||||
|
get_all_published_workflow=lambda **_kwargs: ([_Workflow()], False),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
def _fake_marshal(items, fields):
|
||||||
|
assert session_state["open"] is True
|
||||||
|
return [{"id": item.id} for item in items]
|
||||||
|
|
||||||
|
monkeypatch.setattr(workflow_module, "marshal", _fake_marshal)
|
||||||
|
|
||||||
|
with app.test_request_context(
|
||||||
|
"/apps/app/workflows",
|
||||||
|
method="GET",
|
||||||
|
query_string={"page": 1, "limit": 10, "user_id": "", "named_only": "false"},
|
||||||
|
):
|
||||||
|
response = handler(api, app_model=SimpleNamespace(id="app", workflow_id="wf-1"))
|
||||||
|
|
||||||
|
assert response == {
|
||||||
|
"items": [{"id": "w1"}],
|
||||||
|
"page": 1,
|
||||||
|
"limit": 10,
|
||||||
|
"has_more": False,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_draft_workflow_get_not_found(monkeypatch: pytest.MonkeyPatch) -> None:
|
def test_draft_workflow_get_not_found(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
workflow_module, "WorkflowService", lambda: SimpleNamespace(get_draft_workflow=lambda **_k: None)
|
workflow_module, "WorkflowService", lambda: SimpleNamespace(get_draft_workflow=lambda **_k: None)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user