refactor(api): migrate tools, account, workflow and plugin services to SQLAlchemy 2.0 (#34966)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
wdeveloper16
2026-04-12 03:45:27 +02:00
committed by GitHub
parent 440602f52a
commit 0841b4c663
9 changed files with 111 additions and 102 deletions

View File

@ -247,10 +247,11 @@ workflow:
dataset_mock = Mock()
dataset_mock.id = "d1"
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.Dataset", return_value=dataset_mock)
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.select", return_value=MagicMock())
session = cast(MagicMock, Mock())
service = RagPipelineDslService(session=cast(Session, session))
session.query.return_value.filter_by.return_value.all.return_value = []
session.scalars.return_value.all.return_value = []
account = Mock(current_tenant_id="t1")
result = service.import_rag_pipeline(account=account, import_mode="yaml-content", yaml_content=yaml_content)
@ -320,6 +321,7 @@ workflow:
dataset_mock.id = "d1"
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.Dataset", return_value=dataset_mock)
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.DatasetCollectionBinding", return_value=Mock(id="b1"))
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.select", return_value=MagicMock())
service = RagPipelineDslService(session=Mock())
# Mocking self._session.scalar for the pipeline lookup
@ -406,12 +408,14 @@ def test_create_or_update_pipeline_create_new(mocker) -> None:
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.current_user", SimpleNamespace(id="u1"))
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.Workflow", return_value=Mock())
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.select", return_value=MagicMock())
pipeline_cls = mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.Pipeline")
pipeline_instance = pipeline_cls.return_value
pipeline_instance.tenant_id = "t1"
pipeline_instance.id = "p1"
pipeline_instance.name = "P"
pipeline_instance.is_published = False
session.scalar.return_value = None
result = service._create_or_update_pipeline(pipeline=None, data=data, account=account, dependencies=[])
@ -447,8 +451,7 @@ def test_export_rag_pipeline_dsl_with_workflow(mocker) -> None:
workflow.rag_pipeline_variables = []
workflow.to_dict.return_value = {"graph": {"nodes": []}}
# Mocking single .where() call
session.query.return_value.where.return_value.first.return_value = workflow
session.scalar.return_value = workflow
mocker.patch(
"services.rag_pipeline.rag_pipeline_dsl_service.DependenciesAnalysisService.generate_dependencies",
return_value=[],
@ -550,7 +553,7 @@ def test_append_workflow_export_data_filters_credentials(mocker) -> None:
]
}
}
session.query.return_value.where.return_value.first.return_value = workflow
session.scalar.return_value = workflow
mocker.patch(
"services.rag_pipeline.rag_pipeline_dsl_service.DependenciesAnalysisService.generate_dependencies",
return_value=[],
@ -568,7 +571,7 @@ def test_append_workflow_export_data_filters_credentials(mocker) -> None:
def test_create_rag_pipeline_dataset_raises_when_name_conflicts(mocker) -> None:
session = cast(MagicMock, Mock())
service = RagPipelineDslService(session=cast(Session, session))
session.query.return_value.filter_by.return_value.first.return_value = Mock()
session.scalar.return_value = Mock()
create_entity = RagPipelineDatasetCreateEntity(
name="Existing Name",
description="",
@ -584,8 +587,8 @@ def test_create_rag_pipeline_dataset_raises_when_name_conflicts(mocker) -> None:
def test_create_rag_pipeline_dataset_generates_name_when_missing(mocker) -> None:
session = cast(MagicMock, Mock())
service = RagPipelineDslService(session=cast(Session, session))
session.query.return_value.filter_by.return_value.first.return_value = None
session.query.return_value.filter_by.return_value.all.return_value = [Mock(name="Untitled")]
session.scalar.return_value = None
session.scalars.return_value.all.return_value = [Mock(name="Untitled")]
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.generate_incremental_name", return_value="Untitled 2")
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.current_user", Mock(id="u1", current_tenant_id="t1"))
mocker.patch.object(
@ -632,7 +635,7 @@ def test_append_workflow_export_data_encrypts_knowledge_retrieval_dataset_ids(mo
]
}
}
session.query.return_value.where.return_value.first.return_value = workflow
session.scalar.return_value = workflow
mocker.patch.object(service, "encrypt_dataset_id", side_effect=lambda dataset_id, tenant_id: f"enc-{dataset_id}")
mocker.patch(
"services.rag_pipeline.rag_pipeline_dsl_service.DependenciesAnalysisService.generate_dependencies",
@ -727,7 +730,7 @@ def test_create_or_update_pipeline_decrypts_knowledge_retrieval_dataset_ids(mock
},
}
draft_workflow = Mock(id="wf1")
session.query.return_value.where.return_value.first.return_value = draft_workflow
session.scalar.return_value = draft_workflow
mocker.patch.object(service, "decrypt_dataset_id", side_effect=["d1", None])
result = service._create_or_update_pipeline(pipeline=pipeline, data=data, account=account)
@ -743,7 +746,8 @@ def test_create_or_update_pipeline_creates_draft_when_missing(mocker) -> None:
account = Mock(id="u1", current_tenant_id="t1")
pipeline = Mock(id="p1", tenant_id="t1", name="N", description="D")
data = {"rag_pipeline": {"name": "N2", "description": "D2"}, "workflow": {"graph": {"nodes": []}}}
session.query.return_value.where.return_value.first.return_value = None
session.scalar.return_value = None
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.select", return_value=MagicMock())
workflow_cls = mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.Workflow")
workflow_cls.return_value.id = "wf-new"
@ -817,7 +821,7 @@ def test_import_rag_pipeline_fails_for_non_string_version_type() -> None:
def test_append_workflow_export_data_raises_when_draft_workflow_missing() -> None:
session = cast(MagicMock, Mock())
service = RagPipelineDslService(session=cast(Session, session))
session.query.return_value.where.return_value.first.return_value = None
session.scalar.return_value = None
with pytest.raises(ValueError, match="Missing draft workflow configuration"):
service._append_workflow_export_data(export_data={}, pipeline=Mock(tenant_id="t1"), include_secret=False)
@ -841,7 +845,7 @@ def test_append_workflow_export_data_keeps_secret_fields_when_include_secret_tru
]
}
}
session.query.return_value.where.return_value.first.return_value = workflow
session.scalar.return_value = workflow
mocker.patch(
"services.rag_pipeline.rag_pipeline_dsl_service.DependenciesAnalysisService.generate_dependencies",
return_value=[],
@ -1003,7 +1007,8 @@ def test_import_rag_pipeline_sets_default_version_and_kind(mocker) -> None:
)
dataset = Mock(id="d1")
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.Dataset", return_value=dataset)
session.query.return_value.filter_by.return_value.all.return_value = []
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.select", return_value=MagicMock())
session.scalars.return_value.all.return_value = []
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.generate_incremental_name", return_value="P")
result = service.import_rag_pipeline(
@ -1061,7 +1066,7 @@ def test_append_workflow_export_data_skips_empty_node_data(mocker) -> None:
workflow = Mock()
workflow.graph_dict = {"nodes": []}
workflow.to_dict.return_value = {"graph": {"nodes": [{"data": {}}, {}]}}
session.query.return_value.where.return_value.first.return_value = workflow
session.scalar.return_value = workflow
mocker.patch(
"services.rag_pipeline.rag_pipeline_dsl_service.DependenciesAnalysisService.generate_dependencies",
return_value=[],
@ -1246,11 +1251,12 @@ def test_create_or_update_pipeline_saves_dependencies_to_redis(mocker) -> None:
account = Mock(id="u1", current_tenant_id="t1")
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.current_user", SimpleNamespace(id="u1"))
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.Workflow", return_value=Mock(id="wf-1"))
mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.select", return_value=MagicMock())
pipeline_cls = mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.Pipeline")
pipeline = pipeline_cls.return_value
pipeline.tenant_id = "t1"
pipeline.id = "p1"
session.query.return_value.where.return_value.first.return_value = None
session.scalar.return_value = None
setex = mocker.patch("services.rag_pipeline.rag_pipeline_dsl_service.redis_client.setex")
dependency = PluginDependency(
type=PluginDependency.Type.Marketplace,

View File

@ -969,8 +969,7 @@ class TestWorkflowService:
# 1. Workflow exists
# 2. No app is currently using it
# 3. Not published as a tool
mock_session.scalar.side_effect = [mock_workflow, None] # workflow exists, no app using it
mock_session.query.return_value.where.return_value.first.return_value = None # no tool provider
mock_session.scalar.side_effect = [mock_workflow, None, None] # workflow, no app using it, no tool provider
with patch("services.workflow_service.select") as mock_select:
mock_stmt = MagicMock()
@ -1045,8 +1044,7 @@ class TestWorkflowService:
mock_tool_provider = MagicMock()
mock_session = MagicMock()
mock_session.scalar.side_effect = [mock_workflow, None] # workflow exists, no app using it
mock_session.query.return_value.where.return_value.first.return_value = mock_tool_provider
mock_session.scalar.side_effect = [mock_workflow, None, mock_tool_provider] # workflow, no app, tool provider
with patch("services.workflow_service.select") as mock_select:
mock_stmt = MagicMock()