Signed-off-by: -LAN- <laipz8200@outlook.com>tags/1.3.1
| from core.model_runtime.errors.invoke import InvokeAuthorizationError | from core.model_runtime.errors.invoke import InvokeAuthorizationError | ||||
| from core.ops.ops_trace_manager import TraceQueueManager | from core.ops.ops_trace_manager import TraceQueueManager | ||||
| from core.prompt.utils.get_thread_messages_length import get_thread_messages_length | from core.prompt.utils.get_thread_messages_length import get_thread_messages_length | ||||
| from core.repository import RepositoryFactory | |||||
| from core.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from core.workflow.repository import RepositoryFactory | |||||
| from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from factories import file_factory | from factories import file_factory | ||||
| from models.account import Account | from models.account import Account |
| from core.model_runtime.entities.llm_entities import LLMUsage | from core.model_runtime.entities.llm_entities import LLMUsage | ||||
| from core.model_runtime.utils.encoders import jsonable_encoder | from core.model_runtime.utils.encoders import jsonable_encoder | ||||
| from core.ops.ops_trace_manager import TraceQueueManager | from core.ops.ops_trace_manager import TraceQueueManager | ||||
| from core.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from core.workflow.enums import SystemVariableKey | from core.workflow.enums import SystemVariableKey | ||||
| from core.workflow.graph_engine.entities.graph_runtime_state import GraphRuntimeState | from core.workflow.graph_engine.entities.graph_runtime_state import GraphRuntimeState | ||||
| from core.workflow.nodes import NodeType | from core.workflow.nodes import NodeType | ||||
| from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from events.message_event import message_was_created | from events.message_event import message_was_created | ||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from models import Conversation, EndUser, Message, MessageFile | from models import Conversation, EndUser, Message, MessageFile |
| from core.app.entities.task_entities import WorkflowAppBlockingResponse, WorkflowAppStreamResponse | from core.app.entities.task_entities import WorkflowAppBlockingResponse, WorkflowAppStreamResponse | ||||
| from core.model_runtime.errors.invoke import InvokeAuthorizationError | from core.model_runtime.errors.invoke import InvokeAuthorizationError | ||||
| from core.ops.ops_trace_manager import TraceQueueManager | from core.ops.ops_trace_manager import TraceQueueManager | ||||
| from core.repository import RepositoryFactory | |||||
| from core.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from core.workflow.repository import RepositoryFactory | |||||
| from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from factories import file_factory | from factories import file_factory | ||||
| from models import Account, App, EndUser, Workflow | from models import Account, App, EndUser, Workflow |
| from core.app.task_pipeline.based_generate_task_pipeline import BasedGenerateTaskPipeline | from core.app.task_pipeline.based_generate_task_pipeline import BasedGenerateTaskPipeline | ||||
| from core.app.task_pipeline.workflow_cycle_manage import WorkflowCycleManage | from core.app.task_pipeline.workflow_cycle_manage import WorkflowCycleManage | ||||
| from core.ops.ops_trace_manager import TraceQueueManager | from core.ops.ops_trace_manager import TraceQueueManager | ||||
| from core.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from core.workflow.enums import SystemVariableKey | from core.workflow.enums import SystemVariableKey | ||||
| from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from models.account import Account | from models.account import Account | ||||
| from models.enums import CreatedByRole | from models.enums import CreatedByRole |
| from core.model_runtime.utils.encoders import jsonable_encoder | from core.model_runtime.utils.encoders import jsonable_encoder | ||||
| from core.ops.entities.trace_entity import TraceTaskName | from core.ops.entities.trace_entity import TraceTaskName | ||||
| from core.ops.ops_trace_manager import TraceQueueManager, TraceTask | from core.ops.ops_trace_manager import TraceQueueManager, TraceTask | ||||
| from core.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from core.tools.tool_manager import ToolManager | from core.tools.tool_manager import ToolManager | ||||
| from core.workflow.entities.node_entities import NodeRunMetadataKey | from core.workflow.entities.node_entities import NodeRunMetadataKey | ||||
| from core.workflow.enums import SystemVariableKey | from core.workflow.enums import SystemVariableKey | ||||
| from core.workflow.nodes import NodeType | from core.workflow.nodes import NodeType | ||||
| from core.workflow.nodes.tool.entities import ToolNodeData | from core.workflow.nodes.tool.entities import ToolNodeData | ||||
| from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from core.workflow.workflow_entry import WorkflowEntry | from core.workflow.workflow_entry import WorkflowEntry | ||||
| from models.account import Account | from models.account import Account | ||||
| from models.enums import CreatedByRole, WorkflowRunTriggeredFrom | from models.enums import CreatedByRole, WorkflowRunTriggeredFrom |
| UnitEnum, | UnitEnum, | ||||
| ) | ) | ||||
| from core.ops.utils import filter_none_values | from core.ops.utils import filter_none_values | ||||
| from core.repository.repository_factory import RepositoryFactory | |||||
| from core.workflow.repository.repository_factory import RepositoryFactory | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from models.model import EndUser | from models.model import EndUser | ||||
| LangSmithRunUpdateModel, | LangSmithRunUpdateModel, | ||||
| ) | ) | ||||
| from core.ops.utils import filter_none_values, generate_dotted_order | from core.ops.utils import filter_none_values, generate_dotted_order | ||||
| from core.repository.repository_factory import RepositoryFactory | |||||
| from core.workflow.repository.repository_factory import RepositoryFactory | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from models.model import EndUser, MessageFile | from models.model import EndUser, MessageFile | ||||
| TraceTaskName, | TraceTaskName, | ||||
| WorkflowTraceInfo, | WorkflowTraceInfo, | ||||
| ) | ) | ||||
| from core.repository.repository_factory import RepositoryFactory | |||||
| from core.workflow.repository.repository_factory import RepositoryFactory | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from models.model import EndUser, MessageFile | from models.model import EndUser, MessageFile | ||||
| Repository implementations for data access. | Repository implementations for data access. | ||||
| This package contains concrete implementations of the repository interfaces | This package contains concrete implementations of the repository interfaces | ||||
| defined in the core.repository package. | |||||
| defined in the core.workflow.repository package. | |||||
| """ | """ |
| from sqlalchemy.orm import sessionmaker | from sqlalchemy.orm import sessionmaker | ||||
| from configs import dify_config | from configs import dify_config | ||||
| from core.repository.repository_factory import RepositoryFactory | |||||
| from core.repositories.workflow_node_execution import SQLAlchemyWorkflowNodeExecutionRepository | |||||
| from core.workflow.repository.repository_factory import RepositoryFactory | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from repositories.workflow_node_execution import SQLAlchemyWorkflowNodeExecutionRepository | |||||
| logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||
| WorkflowNodeExecution repository implementations. | WorkflowNodeExecution repository implementations. | ||||
| """ | """ | ||||
| from repositories.workflow_node_execution.sqlalchemy_repository import SQLAlchemyWorkflowNodeExecutionRepository | |||||
| from core.repositories.workflow_node_execution.sqlalchemy_repository import SQLAlchemyWorkflowNodeExecutionRepository | |||||
| __all__ = [ | __all__ = [ | ||||
| "SQLAlchemyWorkflowNodeExecutionRepository", | "SQLAlchemyWorkflowNodeExecutionRepository", |
| from sqlalchemy.engine import Engine | from sqlalchemy.engine import Engine | ||||
| from sqlalchemy.orm import sessionmaker | from sqlalchemy.orm import sessionmaker | ||||
| from core.repository.workflow_node_execution_repository import OrderConfig | |||||
| from core.workflow.repository.workflow_node_execution_repository import OrderConfig | |||||
| from models.workflow import WorkflowNodeExecution, WorkflowNodeExecutionStatus, WorkflowNodeExecutionTriggeredFrom | from models.workflow import WorkflowNodeExecution, WorkflowNodeExecutionStatus, WorkflowNodeExecutionTriggeredFrom | ||||
| logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) |
| storage mechanism. | storage mechanism. | ||||
| """ | """ | ||||
| from core.repository.repository_factory import RepositoryFactory | |||||
| from core.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from core.workflow.repository.repository_factory import RepositoryFactory | |||||
| from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| __all__ = [ | __all__ = [ | ||||
| "RepositoryFactory", | "RepositoryFactory", |
| from collections.abc import Callable, Mapping | from collections.abc import Callable, Mapping | ||||
| from typing import Any, Literal, Optional, cast | from typing import Any, Literal, Optional, cast | ||||
| from core.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository | |||||
| # Type for factory functions - takes a dict of parameters and returns any repository type | # Type for factory functions - takes a dict of parameters and returns any repository type | ||||
| RepositoryFactoryFunc = Callable[[Mapping[str, Any]], Any] | RepositoryFactoryFunc = Callable[[Mapping[str, Any]], Any] |
| This extension registers repository implementations with the RepositoryFactory. | This extension registers repository implementations with the RepositoryFactory. | ||||
| """ | """ | ||||
| from core.repositories.repository_registry import register_repositories | |||||
| from dify_app import DifyApp | from dify_app import DifyApp | ||||
| from repositories.repository_registry import register_repositories | |||||
| def init_app(_app: DifyApp) -> None: | def init_app(_app: DifyApp) -> None: |
| from typing import Optional | from typing import Optional | ||||
| import contexts | import contexts | ||||
| from core.repository import RepositoryFactory | |||||
| from core.repository.workflow_node_execution_repository import OrderConfig | |||||
| from core.workflow.repository import RepositoryFactory | |||||
| from core.workflow.repository.workflow_node_execution_repository import OrderConfig | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from libs.infinite_scroll_pagination import InfiniteScrollPagination | from libs.infinite_scroll_pagination import InfiniteScrollPagination | ||||
| from models.enums import WorkflowRunTriggeredFrom | from models.enums import WorkflowRunTriggeredFrom |
| from core.app.apps.advanced_chat.app_config_manager import AdvancedChatAppConfigManager | from core.app.apps.advanced_chat.app_config_manager import AdvancedChatAppConfigManager | ||||
| from core.app.apps.workflow.app_config_manager import WorkflowAppConfigManager | from core.app.apps.workflow.app_config_manager import WorkflowAppConfigManager | ||||
| from core.model_runtime.utils.encoders import jsonable_encoder | from core.model_runtime.utils.encoders import jsonable_encoder | ||||
| from core.repository import RepositoryFactory | |||||
| from core.variables import Variable | from core.variables import Variable | ||||
| from core.workflow.entities.node_entities import NodeRunResult | from core.workflow.entities.node_entities import NodeRunResult | ||||
| from core.workflow.errors import WorkflowNodeRunFailedError | from core.workflow.errors import WorkflowNodeRunFailedError | ||||
| from core.workflow.nodes.event import RunCompletedEvent | from core.workflow.nodes.event import RunCompletedEvent | ||||
| from core.workflow.nodes.event.types import NodeEvent | from core.workflow.nodes.event.types import NodeEvent | ||||
| from core.workflow.nodes.node_mapping import LATEST_VERSION, NODE_TYPE_CLASSES_MAPPING | from core.workflow.nodes.node_mapping import LATEST_VERSION, NODE_TYPE_CLASSES_MAPPING | ||||
| from core.workflow.repository import RepositoryFactory | |||||
| from core.workflow.workflow_entry import WorkflowEntry | from core.workflow.workflow_entry import WorkflowEntry | ||||
| from events.app_event import app_draft_workflow_was_synced, app_published_workflow_was_updated | from events.app_event import app_draft_workflow_was_synced, app_published_workflow_was_updated | ||||
| from extensions.ext_database import db | from extensions.ext_database import db |
| from sqlalchemy import delete | from sqlalchemy import delete | ||||
| from sqlalchemy.exc import SQLAlchemyError | from sqlalchemy.exc import SQLAlchemyError | ||||
| from core.repository import RepositoryFactory | |||||
| from core.workflow.repository import RepositoryFactory | |||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from models.dataset import AppDatasetJoin | from models.dataset import AppDatasetJoin | ||||
| from models.model import ( | from models.model import ( |
| from pytest_mock import MockerFixture | from pytest_mock import MockerFixture | ||||
| from sqlalchemy.orm import Session, sessionmaker | from sqlalchemy.orm import Session, sessionmaker | ||||
| from core.repository.workflow_node_execution_repository import OrderConfig | |||||
| from core.repositories.workflow_node_execution.sqlalchemy_repository import SQLAlchemyWorkflowNodeExecutionRepository | |||||
| from core.workflow.repository.workflow_node_execution_repository import OrderConfig | |||||
| from models.workflow import WorkflowNodeExecution | from models.workflow import WorkflowNodeExecution | ||||
| from repositories.workflow_node_execution.sqlalchemy_repository import SQLAlchemyWorkflowNodeExecutionRepository | |||||
| @pytest.fixture | @pytest.fixture | ||||
| """Test get_by_node_execution_id method.""" | """Test get_by_node_execution_id method.""" | ||||
| session_obj, _ = session | session_obj, _ = session | ||||
| # Set up mock | # Set up mock | ||||
| mock_select = mocker.patch("repositories.workflow_node_execution.sqlalchemy_repository.select") | |||||
| mock_select = mocker.patch("core.repositories.workflow_node_execution.sqlalchemy_repository.select") | |||||
| mock_stmt = mocker.MagicMock() | mock_stmt = mocker.MagicMock() | ||||
| mock_select.return_value = mock_stmt | mock_select.return_value = mock_stmt | ||||
| mock_stmt.where.return_value = mock_stmt | mock_stmt.where.return_value = mock_stmt | ||||
| """Test get_by_workflow_run method.""" | """Test get_by_workflow_run method.""" | ||||
| session_obj, _ = session | session_obj, _ = session | ||||
| # Set up mock | # Set up mock | ||||
| mock_select = mocker.patch("repositories.workflow_node_execution.sqlalchemy_repository.select") | |||||
| mock_select = mocker.patch("core.repositories.workflow_node_execution.sqlalchemy_repository.select") | |||||
| mock_stmt = mocker.MagicMock() | mock_stmt = mocker.MagicMock() | ||||
| mock_select.return_value = mock_stmt | mock_select.return_value = mock_stmt | ||||
| mock_stmt.where.return_value = mock_stmt | mock_stmt.where.return_value = mock_stmt | ||||
| """Test get_running_executions method.""" | """Test get_running_executions method.""" | ||||
| session_obj, _ = session | session_obj, _ = session | ||||
| # Set up mock | # Set up mock | ||||
| mock_select = mocker.patch("repositories.workflow_node_execution.sqlalchemy_repository.select") | |||||
| mock_select = mocker.patch("core.repositories.workflow_node_execution.sqlalchemy_repository.select") | |||||
| mock_stmt = mocker.MagicMock() | mock_stmt = mocker.MagicMock() | ||||
| mock_select.return_value = mock_stmt | mock_select.return_value = mock_stmt | ||||
| mock_stmt.where.return_value = mock_stmt | mock_stmt.where.return_value = mock_stmt | ||||
| """Test clear method.""" | """Test clear method.""" | ||||
| session_obj, _ = session | session_obj, _ = session | ||||
| # Set up mock | # Set up mock | ||||
| mock_delete = mocker.patch("repositories.workflow_node_execution.sqlalchemy_repository.delete") | |||||
| mock_delete = mocker.patch("core.repositories.workflow_node_execution.sqlalchemy_repository.delete") | |||||
| mock_stmt = mocker.MagicMock() | mock_stmt = mocker.MagicMock() | ||||
| mock_delete.return_value = mock_stmt | mock_delete.return_value = mock_stmt | ||||
| mock_stmt.where.return_value = mock_stmt | mock_stmt.where.return_value = mock_stmt |