refactor(dify_graph): unify invoke and user enums source in workflow (#32873)

This commit is contained in:
99 2026-03-03 15:05:20 +08:00 committed by GitHub
parent 48c8aac092
commit c8688ec371
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
44 changed files with 124 additions and 157 deletions

View File

@ -119,9 +119,6 @@ ignore_imports =
dify_graph.nodes.tool.tool_node -> core.tools.tool_manager dify_graph.nodes.tool.tool_node -> core.tools.tool_manager
dify_graph.nodes.agent.agent_node -> core.agent.entities dify_graph.nodes.agent.agent_node -> core.agent.entities
dify_graph.nodes.agent.agent_node -> core.agent.plugin_entities dify_graph.nodes.agent.agent_node -> core.agent.plugin_entities
dify_graph.nodes.base.node -> core.app.entities.app_invoke_entities
dify_graph.nodes.human_input.human_input_node -> core.app.entities.app_invoke_entities
dify_graph.nodes.knowledge_index.knowledge_index_node -> core.app.entities.app_invoke_entities
dify_graph.nodes.knowledge_retrieval.knowledge_retrieval_node -> core.app.app_config.entities dify_graph.nodes.knowledge_retrieval.knowledge_retrieval_node -> core.app.app_config.entities
dify_graph.nodes.parameter_extractor.parameter_extractor_node -> core.prompt.advanced_prompt_transform dify_graph.nodes.parameter_extractor.parameter_extractor_node -> core.prompt.advanced_prompt_transform
dify_graph.nodes.parameter_extractor.parameter_extractor_node -> core.prompt.simple_prompt_transform dify_graph.nodes.parameter_extractor.parameter_extractor_node -> core.prompt.simple_prompt_transform
@ -159,7 +156,6 @@ ignore_imports =
dify_graph.nodes.human_input.human_input_node -> extensions.ext_database dify_graph.nodes.human_input.human_input_node -> extensions.ext_database
dify_graph.nodes.human_input.human_input_node -> core.repositories.human_input_repository dify_graph.nodes.human_input.human_input_node -> core.repositories.human_input_repository
dify_graph.nodes.agent.agent_node -> models dify_graph.nodes.agent.agent_node -> models
dify_graph.nodes.base.node -> models.enums
dify_graph.nodes.loop.loop_node -> core.app.workflow.layers.llm_quota dify_graph.nodes.loop.loop_node -> core.app.workflow.layers.llm_quota
dify_graph.nodes.llm.node -> models.model dify_graph.nodes.llm.node -> models.model
dify_graph.nodes.agent.agent_node -> services dify_graph.nodes.agent.agent_node -> services

View File

@ -13,7 +13,7 @@ from core.app.workflow.layers.persistence import PersistenceWorkflowInfo, Workfl
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from dify_graph.entities.graph_init_params import GraphInitParams from dify_graph.entities.graph_init_params import GraphInitParams
from dify_graph.enums import WorkflowType from dify_graph.enums import UserFrom, WorkflowType
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.graph_events import GraphEngineEvent, GraphRunFailedEvent from dify_graph.graph_events import GraphEngineEvent, GraphRunFailedEvent
from dify_graph.repositories.workflow_execution_repository import WorkflowExecutionRepository from dify_graph.repositories.workflow_execution_repository import WorkflowExecutionRepository
@ -24,7 +24,6 @@ from dify_graph.variable_loader import VariableLoader
from dify_graph.variables.variables import RAGPipelineVariable, RAGPipelineVariableInput from dify_graph.variables.variables import RAGPipelineVariable, RAGPipelineVariableInput
from extensions.ext_database import db from extensions.ext_database import db
from models.dataset import Document, Pipeline from models.dataset import Document, Pipeline
from models.enums import UserFrom
from models.model import EndUser from models.model import EndUser
from models.workflow import Workflow from models.workflow import Workflow

View File

@ -33,6 +33,7 @@ from core.workflow.node_factory import DifyNodeFactory
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.entities.pause_reason import HumanInputRequired from dify_graph.entities.pause_reason import HumanInputRequired
from dify_graph.enums import UserFrom
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.graph_engine.layers.base import GraphEngineLayer from dify_graph.graph_engine.layers.base import GraphEngineLayer
from dify_graph.graph_events import ( from dify_graph.graph_events import (
@ -67,7 +68,6 @@ from dify_graph.nodes.node_mapping import NODE_TYPE_CLASSES_MAPPING
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from dify_graph.variable_loader import DUMMY_VARIABLE_LOADER, VariableLoader, load_into_variable_pool from dify_graph.variable_loader import DUMMY_VARIABLE_LOADER, VariableLoader, load_into_variable_pool
from models.enums import UserFrom
from models.workflow import Workflow from models.workflow import Workflow
from tasks.mail_human_input_delivery_task import dispatch_human_input_email_task from tasks.mail_human_input_delivery_task import dispatch_human_input_email_task

View File

@ -1,5 +1,4 @@
from collections.abc import Mapping, Sequence from collections.abc import Mapping, Sequence
from enum import StrEnum
from typing import TYPE_CHECKING, Any, Optional from typing import TYPE_CHECKING, Any, Optional
from pydantic import BaseModel, ConfigDict, Field, ValidationInfo, field_validator from pydantic import BaseModel, ConfigDict, Field, ValidationInfo, field_validator
@ -7,6 +6,7 @@ from pydantic import BaseModel, ConfigDict, Field, ValidationInfo, field_validat
from constants import UUID_NIL from constants import UUID_NIL
from core.app.app_config.entities import EasyUIBasedAppConfig, WorkflowUIBasedAppConfig from core.app.app_config.entities import EasyUIBasedAppConfig, WorkflowUIBasedAppConfig
from core.entities.provider_configuration import ProviderModelBundle from core.entities.provider_configuration import ProviderModelBundle
from dify_graph.enums import InvokeFrom
from dify_graph.file import File, FileUploadConfig from dify_graph.file import File, FileUploadConfig
from dify_graph.model_runtime.entities.model_entities import AIModelEntity from dify_graph.model_runtime.entities.model_entities import AIModelEntity
@ -14,73 +14,6 @@ if TYPE_CHECKING:
from core.ops.ops_trace_manager import TraceQueueManager from core.ops.ops_trace_manager import TraceQueueManager
class InvokeFrom(StrEnum):
"""
Invoke From.
"""
# SERVICE_API indicates that this invocation is from an API call to Dify app.
#
# Description of service api in Dify docs:
# https://docs.dify.ai/en/guides/application-publishing/developing-with-apis
SERVICE_API = "service-api"
# WEB_APP indicates that this invocation is from
# the web app of the workflow (or chatflow).
#
# Description of web app in Dify docs:
# https://docs.dify.ai/en/guides/application-publishing/launch-your-webapp-quickly/README
WEB_APP = "web-app"
# TRIGGER indicates that this invocation is from a trigger.
# this is used for plugin trigger and webhook trigger.
TRIGGER = "trigger"
# EXPLORE indicates that this invocation is from
# the workflow (or chatflow) explore page.
EXPLORE = "explore"
# DEBUGGER indicates that this invocation is from
# the workflow (or chatflow) edit page.
DEBUGGER = "debugger"
# PUBLISHED_PIPELINE indicates that this invocation runs a published RAG pipeline workflow.
PUBLISHED_PIPELINE = "published"
# VALIDATION indicates that this invocation is from validation.
VALIDATION = "validation"
@classmethod
def value_of(cls, value: str):
"""
Get value of given mode.
:param value: mode value
:return: mode
"""
for mode in cls:
if mode.value == value:
return mode
raise ValueError(f"invalid invoke from value {value}")
def to_source(self) -> str:
"""
Get source of invoke from.
:return: source
"""
if self == InvokeFrom.WEB_APP:
return "web_app"
elif self == InvokeFrom.DEBUGGER:
return "dev"
elif self == InvokeFrom.EXPLORE:
return "explore_app"
elif self == InvokeFrom.TRIGGER:
return "trigger"
elif self == InvokeFrom.SERVICE_API:
return "api"
return "dev"
class ModelConfigWithCredentialsEntity(BaseModel): class ModelConfigWithCredentialsEntity(BaseModel):
""" """
Model Config With Credentials Entity. Model Config With Credentials Entity.

View File

@ -179,7 +179,6 @@ class ToolManager:
:return: the tool :return: the tool
""" """
if provider_type == ToolProviderType.BUILT_IN: if provider_type == ToolProviderType.BUILT_IN:
# check if the builtin tool need credentials # check if the builtin tool need credentials
provider_controller = cls.get_builtin_provider(provider_id, tenant_id) provider_controller = cls.get_builtin_provider(provider_id, tenant_id)
@ -628,9 +627,9 @@ class ToolManager:
# MySQL: Use window function to achieve same result # MySQL: Use window function to achieve same result
sql = """ sql = """
SELECT id FROM ( SELECT id FROM (
SELECT id, SELECT id,
ROW_NUMBER() OVER ( ROW_NUMBER() OVER (
PARTITION BY tenant_id, provider PARTITION BY tenant_id, provider
ORDER BY is_default DESC, created_at DESC ORDER BY is_default DESC, created_at DESC
) as rn ) as rn
FROM tool_builtin_providers FROM tool_builtin_providers

View File

@ -12,6 +12,7 @@ from core.workflow.node_factory import DifyNodeFactory
from dify_graph.constants import ENVIRONMENT_VARIABLE_NODE_ID from dify_graph.constants import ENVIRONMENT_VARIABLE_NODE_ID
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.entities.graph_config import NodeConfigData, NodeConfigDict from dify_graph.entities.graph_config import NodeConfigData, NodeConfigDict
from dify_graph.enums import UserFrom
from dify_graph.errors import WorkflowNodeRunFailedError from dify_graph.errors import WorkflowNodeRunFailedError
from dify_graph.file.models import File from dify_graph.file.models import File
from dify_graph.graph import Graph from dify_graph.graph import Graph
@ -28,7 +29,6 @@ from dify_graph.system_variable import SystemVariable
from dify_graph.variable_loader import DUMMY_VARIABLE_LOADER, VariableLoader, load_into_variable_pool from dify_graph.variable_loader import DUMMY_VARIABLE_LOADER, VariableLoader, load_into_variable_pool
from extensions.otel.runtime import is_instrument_flag_enabled from extensions.otel.runtime import is_instrument_flag_enabled
from factories import file_factory from factories import file_factory
from models.enums import UserFrom
from models.workflow import Workflow from models.workflow import Workflow
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -3,6 +3,8 @@ from typing import Any
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from dify_graph.enums import InvokeFrom, UserFrom
class GraphInitParams(BaseModel): class GraphInitParams(BaseModel):
"""GraphInitParams encapsulates the configurations and contextual information """GraphInitParams encapsulates the configurations and contextual information
@ -21,10 +23,6 @@ class GraphInitParams(BaseModel):
workflow_id: str = Field(..., description="workflow id") workflow_id: str = Field(..., description="workflow id")
graph_config: Mapping[str, Any] = Field(..., description="graph config") graph_config: Mapping[str, Any] = Field(..., description="graph config")
user_id: str = Field(..., description="user id") user_id: str = Field(..., description="user id")
user_from: str = Field( user_from: UserFrom = Field(..., description="user from, account or end-user")
..., description="user from, account or end-user" invoke_from: InvokeFrom = Field(..., description="invoke from, service-api, web-app, explore or debugger")
) # Should be UserFrom enum: 'account' | 'end-user'
invoke_from: str = Field(
..., description="invoke from, service-api, web-app, explore or debugger"
) # Should be InvokeFrom enum: 'service-api' | 'web-app' | 'explore' | 'debugger'
call_depth: int = Field(..., description="call depth") call_depth: int = Field(..., description="call depth")

View File

@ -33,6 +33,39 @@ class SystemVariableKey(StrEnum):
INVOKE_FROM = "invoke_from" INVOKE_FROM = "invoke_from"
class UserFrom(StrEnum):
ACCOUNT = "account"
END_USER = "end-user"
class InvokeFrom(StrEnum):
SERVICE_API = "service-api"
WEB_APP = "web-app"
TRIGGER = "trigger"
EXPLORE = "explore"
DEBUGGER = "debugger"
PUBLISHED_PIPELINE = "published"
VALIDATION = "validation"
@classmethod
def value_of(cls, value: str) -> "InvokeFrom":
return cls(value)
def to_source(self) -> str:
"""Get source of invoke from.
:return: source
"""
source_mapping = {
InvokeFrom.WEB_APP: "web_app",
InvokeFrom.DEBUGGER: "dev",
InvokeFrom.EXPLORE: "explore_app",
InvokeFrom.TRIGGER: "trigger",
InvokeFrom.SERVICE_API: "api",
}
return source_mapping.get(self, "dev")
class NodeType(StrEnum): class NodeType(StrEnum):
START = "start" START = "start"
END = "end" END = "end"

View File

@ -11,9 +11,14 @@ from types import MappingProxyType
from typing import Any, ClassVar, Generic, TypeVar, cast, get_args, get_origin from typing import Any, ClassVar, Generic, TypeVar, cast, get_args, get_origin
from uuid import uuid4 from uuid import uuid4
from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import AgentNodeStrategyInit, GraphInitParams from dify_graph.entities import AgentNodeStrategyInit, GraphInitParams
from dify_graph.enums import ErrorStrategy, NodeExecutionType, NodeState, NodeType, WorkflowNodeExecutionStatus from dify_graph.enums import (
ErrorStrategy,
NodeExecutionType,
NodeState,
NodeType,
WorkflowNodeExecutionStatus,
)
from dify_graph.graph_events import ( from dify_graph.graph_events import (
GraphNodeEventBase, GraphNodeEventBase,
NodeRunAgentLogEvent, NodeRunAgentLogEvent,
@ -55,7 +60,6 @@ from dify_graph.node_events import (
) )
from dify_graph.runtime import GraphRuntimeState from dify_graph.runtime import GraphRuntimeState
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
from models.enums import UserFrom
from .entities import BaseNodeData, RetryConfig from .entities import BaseNodeData, RetryConfig
@ -229,8 +233,8 @@ class Node(Generic[NodeDataT]):
self.workflow_id = graph_init_params.workflow_id self.workflow_id = graph_init_params.workflow_id
self.graph_config = graph_init_params.graph_config self.graph_config = graph_init_params.graph_config
self.user_id = graph_init_params.user_id self.user_id = graph_init_params.user_id
self.user_from = UserFrom(graph_init_params.user_from) self.user_from = graph_init_params.user_from
self.invoke_from = InvokeFrom(graph_init_params.invoke_from) self.invoke_from = graph_init_params.invoke_from
self.workflow_call_depth = graph_init_params.call_depth self.workflow_call_depth = graph_init_params.call_depth
self.graph_runtime_state = graph_runtime_state self.graph_runtime_state = graph_runtime_state
self.state: NodeState = NodeState.UNKNOWN # node execution state self.state: NodeState = NodeState.UNKNOWN # node execution state

View File

@ -3,10 +3,9 @@ import logging
from collections.abc import Generator, Mapping, Sequence from collections.abc import Generator, Mapping, Sequence
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
from core.app.entities.app_invoke_entities import InvokeFrom
from core.repositories.human_input_repository import HumanInputFormRepositoryImpl from core.repositories.human_input_repository import HumanInputFormRepositoryImpl
from dify_graph.entities.pause_reason import HumanInputRequired from dify_graph.entities.pause_reason import HumanInputRequired
from dify_graph.enums import NodeExecutionType, NodeType, WorkflowNodeExecutionStatus from dify_graph.enums import InvokeFrom, NodeExecutionType, NodeType, WorkflowNodeExecutionStatus
from dify_graph.node_events import ( from dify_graph.node_events import (
HumanInputFormFilledEvent, HumanInputFormFilledEvent,
HumanInputFormTimeoutEvent, HumanInputFormTimeoutEvent,

View File

@ -603,8 +603,8 @@ class IterationNode(LLMUsageTrackingMixin, Node[IterationNodeData]):
workflow_id=self.workflow_id, workflow_id=self.workflow_id,
graph_config=self.graph_config, graph_config=self.graph_config,
user_id=self.user_id, user_id=self.user_id,
user_from=self.user_from.value, user_from=self.user_from,
invoke_from=self.invoke_from.value, invoke_from=self.invoke_from,
call_depth=self.workflow_call_depth, call_depth=self.workflow_call_depth,
) )
# Create a deep copy of the variable pool for each iteration # Create a deep copy of the variable pool for each iteration

View File

@ -2,9 +2,8 @@ import logging
from collections.abc import Mapping from collections.abc import Mapping
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities.workflow_node_execution import WorkflowNodeExecutionStatus from dify_graph.entities.workflow_node_execution import WorkflowNodeExecutionStatus
from dify_graph.enums import NodeExecutionType, NodeType, SystemVariableKey from dify_graph.enums import InvokeFrom, NodeExecutionType, NodeType, SystemVariableKey
from dify_graph.node_events import NodeRunResult from dify_graph.node_events import NodeRunResult
from dify_graph.nodes.base.node import Node from dify_graph.nodes.base.node import Node
from dify_graph.nodes.base.template import Template from dify_graph.nodes.base.template import Template

View File

@ -428,8 +428,8 @@ class LoopNode(LLMUsageTrackingMixin, Node[LoopNodeData]):
workflow_id=self.workflow_id, workflow_id=self.workflow_id,
graph_config=self.graph_config, graph_config=self.graph_config,
user_id=self.user_id, user_id=self.user_id,
user_from=self.user_from.value, user_from=self.user_from,
invoke_from=self.invoke_from.value, invoke_from=self.invoke_from,
call_depth=self.workflow_call_depth, call_depth=self.workflow_call_depth,
) )

View File

@ -30,7 +30,6 @@ from .enums import (
AppTriggerStatus, AppTriggerStatus,
AppTriggerType, AppTriggerType,
CreatorUserRole, CreatorUserRole,
UserFrom,
WorkflowRunTriggeredFrom, WorkflowRunTriggeredFrom,
WorkflowTriggerStatus, WorkflowTriggerStatus,
) )
@ -204,7 +203,6 @@ __all__ = [
"TriggerOAuthTenantClient", "TriggerOAuthTenantClient",
"TriggerSubscription", "TriggerSubscription",
"UploadFile", "UploadFile",
"UserFrom",
"Whitelist", "Whitelist",
"Workflow", "Workflow",
"WorkflowAppLog", "WorkflowAppLog",

View File

@ -8,11 +8,6 @@ class CreatorUserRole(StrEnum):
END_USER = "end_user" END_USER = "end_user"
class UserFrom(StrEnum):
ACCOUNT = "account"
END_USER = "end-user"
class WorkflowRunTriggeredFrom(StrEnum): class WorkflowRunTriggeredFrom(StrEnum):
DEBUGGING = "debugging" DEBUGGING = "debugging"
APP_RUN = "app-run" # webapp / service api APP_RUN = "app-run" # webapp / service api

View File

@ -17,7 +17,7 @@ from core.repositories.human_input_repository import HumanInputFormRepositoryImp
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from dify_graph.entities import GraphInitParams, WorkflowNodeExecution from dify_graph.entities import GraphInitParams, WorkflowNodeExecution
from dify_graph.entities.pause_reason import HumanInputRequired from dify_graph.entities.pause_reason import HumanInputRequired
from dify_graph.enums import ErrorStrategy, WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus from dify_graph.enums import ErrorStrategy, UserFrom, WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus
from dify_graph.errors import WorkflowNodeRunFailedError from dify_graph.errors import WorkflowNodeRunFailedError
from dify_graph.file import File from dify_graph.file import File
from dify_graph.graph_events import GraphNodeEventBase, NodeRunFailedEvent, NodeRunSucceededEvent from dify_graph.graph_events import GraphNodeEventBase, NodeRunFailedEvent, NodeRunSucceededEvent
@ -49,7 +49,6 @@ from extensions.ext_storage import storage
from factories.file_factory import build_from_mapping, build_from_mappings from factories.file_factory import build_from_mapping, build_from_mappings
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
from models import Account from models import Account
from models.enums import UserFrom
from models.human_input import HumanInputFormRecipient, RecipientType from models.human_input import HumanInputFormRecipient, RecipientType
from models.model import App, AppMode from models.model import App, AppMode
from models.tools import WorkflowToolProvider from models.tools import WorkflowToolProvider
@ -1069,8 +1068,8 @@ class WorkflowService:
workflow_id=workflow.id, workflow_id=workflow.id,
graph_config=workflow.graph_dict, graph_config=workflow.graph_dict,
user_id=account.id, user_id=account.id,
user_from=UserFrom.ACCOUNT.value, user_from=UserFrom.ACCOUNT,
invoke_from=InvokeFrom.DEBUGGER.value, invoke_from=InvokeFrom.DEBUGGER,
call_depth=0, call_depth=0,
) )
graph_runtime_state = GraphRuntimeState( graph_runtime_state = GraphRuntimeState(

View File

@ -7,14 +7,13 @@ from configs import dify_config
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.node_events import NodeRunResult from dify_graph.node_events import NodeRunResult
from dify_graph.nodes.code.code_node import CodeNode from dify_graph.nodes.code.code_node import CodeNode
from dify_graph.nodes.code.limits import CodeNodeLimits from dify_graph.nodes.code.limits import CodeNodeLimits
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
from tests.integration_tests.workflow.nodes.__mock.code_executor import setup_code_executor_mock from tests.integration_tests.workflow.nodes.__mock.code_executor import setup_code_executor_mock
CODE_MAX_STRING_LENGTH = dify_config.CODE_MAX_STRING_LENGTH CODE_MAX_STRING_LENGTH = dify_config.CODE_MAX_STRING_LENGTH

View File

@ -10,13 +10,12 @@ from core.helper.ssrf_proxy import ssrf_proxy
from core.tools.tool_file_manager import ToolFileManager from core.tools.tool_file_manager import ToolFileManager
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.file.file_manager import file_manager from dify_graph.file.file_manager import file_manager
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.nodes.http_request import HttpRequestNode, HttpRequestNodeConfig from dify_graph.nodes.http_request import HttpRequestNode, HttpRequestNodeConfig
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
from tests.integration_tests.workflow.nodes.__mock.http import setup_http_mock from tests.integration_tests.workflow.nodes.__mock.http import setup_http_mock
HTTP_REQUEST_CONFIG = HttpRequestNodeConfig( HTTP_REQUEST_CONFIG = HttpRequestNodeConfig(

View File

@ -8,14 +8,13 @@ from core.app.entities.app_invoke_entities import InvokeFrom
from core.llm_generator.output_parser.structured_output import _parse_structured_output from core.llm_generator.output_parser.structured_output import _parse_structured_output
from core.model_manager import ModelInstance from core.model_manager import ModelInstance
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.node_events import StreamCompletedEvent from dify_graph.node_events import StreamCompletedEvent
from dify_graph.nodes.llm.node import LLMNode from dify_graph.nodes.llm.node import LLMNode
from dify_graph.nodes.llm.protocols import CredentialsProvider, ModelFactory from dify_graph.nodes.llm.protocols import CredentialsProvider, ModelFactory
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from extensions.ext_database import db from extensions.ext_database import db
from models.enums import UserFrom
"""FOR MOCK FIXTURES, DO NOT REMOVE""" """FOR MOCK FIXTURES, DO NOT REMOVE"""

View File

@ -6,14 +6,13 @@ from unittest.mock import MagicMock
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.model_manager import ModelInstance from core.model_manager import ModelInstance
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.model_runtime.entities import AssistantPromptMessage, UserPromptMessage from dify_graph.model_runtime.entities import AssistantPromptMessage, UserPromptMessage
from dify_graph.nodes.llm.protocols import CredentialsProvider, ModelFactory from dify_graph.nodes.llm.protocols import CredentialsProvider, ModelFactory
from dify_graph.nodes.parameter_extractor.parameter_extractor_node import ParameterExtractorNode from dify_graph.nodes.parameter_extractor.parameter_extractor_node import ParameterExtractorNode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from extensions.ext_database import db from extensions.ext_database import db
from models.enums import UserFrom
from tests.integration_tests.workflow.nodes.__mock.model import get_mocked_fetch_model_instance from tests.integration_tests.workflow.nodes.__mock.model import get_mocked_fetch_model_instance
"""FOR MOCK FIXTURES, DO NOT REMOVE""" """FOR MOCK FIXTURES, DO NOT REMOVE"""

View File

@ -4,13 +4,12 @@ import uuid
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.nodes.template_transform.template_renderer import TemplateRenderError from dify_graph.nodes.template_transform.template_renderer import TemplateRenderError
from dify_graph.nodes.template_transform.template_transform_node import TemplateTransformNode from dify_graph.nodes.template_transform.template_transform_node import TemplateTransformNode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
class _SimpleJinja2Renderer: class _SimpleJinja2Renderer:

View File

@ -6,13 +6,12 @@ from core.app.entities.app_invoke_entities import InvokeFrom
from core.tools.utils.configuration import ToolParameterConfigurationManager from core.tools.utils.configuration import ToolParameterConfigurationManager
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.node_events import StreamCompletedEvent from dify_graph.node_events import StreamCompletedEvent
from dify_graph.nodes.tool.tool_node import ToolNode from dify_graph.nodes.tool.tool_node import ToolNode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
def init_tool_node(config: dict): def init_tool_node(config: dict):

View File

@ -7,12 +7,12 @@ import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.graph.validation import GraphValidationError from dify_graph.graph.validation import GraphValidationError
from dify_graph.nodes import NodeType from dify_graph.nodes import NodeType
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
def _build_iteration_graph(node_id: str) -> dict[str, Any]: def _build_iteration_graph(node_id: str) -> dict[str, Any]:

View File

@ -8,14 +8,13 @@ import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import ErrorStrategy, NodeExecutionType, NodeType from dify_graph.enums import ErrorStrategy, NodeExecutionType, NodeType, UserFrom
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.graph.validation import GraphValidationError from dify_graph.graph.validation import GraphValidationError
from dify_graph.nodes.base.entities import BaseNodeData from dify_graph.nodes.base.entities import BaseNodeData
from dify_graph.nodes.base.node import Node from dify_graph.nodes.base.node import Node
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
class _TestNodeData(BaseNodeData): class _TestNodeData(BaseNodeData):

View File

@ -201,8 +201,8 @@ def test_mock_factory_node_type_detection():
"""Test that MockNodeFactory correctly identifies nodes to mock.""" """Test that MockNodeFactory correctly identifies nodes to mock."""
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from models.enums import UserFrom
from .test_mock_factory import MockNodeFactory from .test_mock_factory import MockNodeFactory
@ -311,9 +311,9 @@ def test_register_custom_mock_node():
"""Test registering a custom mock implementation for a node type.""" """Test registering a custom mock implementation for a node type."""
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.nodes.template_transform import TemplateTransformNode from dify_graph.nodes.template_transform import TemplateTransformNode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from models.enums import UserFrom
from .test_mock_factory import MockNodeFactory from .test_mock_factory import MockNodeFactory

View File

@ -6,6 +6,7 @@ from unittest.mock import MagicMock
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities.graph_init_params import GraphInitParams from dify_graph.entities.graph_init_params import GraphInitParams
from dify_graph.entities.pause_reason import SchedulingPause from dify_graph.entities.pause_reason import SchedulingPause
from dify_graph.enums import UserFrom
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.graph_engine import GraphEngine, GraphEngineConfig from dify_graph.graph_engine import GraphEngine, GraphEngineConfig
from dify_graph.graph_engine.command_channels import InMemoryChannel from dify_graph.graph_engine.command_channels import InMemoryChannel
@ -20,7 +21,6 @@ from dify_graph.graph_events import GraphRunAbortedEvent, GraphRunPausedEvent, G
from dify_graph.nodes.start.start_node import StartNode from dify_graph.nodes.start.start_node import StartNode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.variables import IntegerVariable, StringVariable from dify_graph.variables import IntegerVariable, StringVariable
from models.enums import UserFrom
def test_abort_command(): def test_abort_command():

View File

@ -18,8 +18,8 @@ def test_mock_factory_registers_iteration_node():
"""Test that MockNodeFactory has iteration node registered.""" """Test that MockNodeFactory has iteration node registered."""
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from models.enums import UserFrom
# Create a MockNodeFactory instance # Create a MockNodeFactory instance
graph_init_params = GraphInitParams( graph_init_params = GraphInitParams(
@ -67,8 +67,8 @@ def test_mock_iteration_node_preserves_config():
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from models.enums import UserFrom
from tests.unit_tests.core.workflow.graph_engine.test_mock_nodes import MockIterationNode from tests.unit_tests.core.workflow.graph_engine.test_mock_nodes import MockIterationNode
# Create mock config # Create mock config
@ -129,8 +129,8 @@ def test_mock_loop_node_preserves_config():
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from models.enums import UserFrom
from tests.unit_tests.core.workflow.graph_engine.test_mock_nodes import MockLoopNode from tests.unit_tests.core.workflow.graph_engine.test_mock_nodes import MockLoopNode
# Create mock config # Create mock config

View File

@ -103,8 +103,8 @@ def test_mock_factory_detection():
"""Test MockNodeFactory node type detection.""" """Test MockNodeFactory node type detection."""
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from models.enums import UserFrom
print("Testing MockNodeFactory detection...") print("Testing MockNodeFactory detection...")
@ -156,8 +156,8 @@ def test_mock_factory_registration():
"""Test registering and unregistering mock node types.""" """Test registering and unregistering mock node types."""
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from models.enums import UserFrom
print("Testing MockNodeFactory registration...") print("Testing MockNodeFactory registration...")

View File

@ -16,7 +16,7 @@ from core.app.entities.app_invoke_entities import InvokeFrom
from core.model_manager import ModelInstance from core.model_manager import ModelInstance
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import NodeType, WorkflowNodeExecutionStatus from dify_graph.enums import NodeType, UserFrom, WorkflowNodeExecutionStatus
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.graph_engine import GraphEngine, GraphEngineConfig from dify_graph.graph_engine import GraphEngine, GraphEngineConfig
from dify_graph.graph_engine.command_channels import InMemoryChannel from dify_graph.graph_engine.command_channels import InMemoryChannel
@ -30,7 +30,6 @@ from dify_graph.node_events import NodeRunResult, StreamCompletedEvent
from dify_graph.nodes.llm.node import LLMNode from dify_graph.nodes.llm.node import LLMNode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
from .test_table_runner import TableTestRunner from .test_table_runner import TableTestRunner

View File

@ -5,13 +5,12 @@ from unittest.mock import MagicMock
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.nodes.answer.answer_node import AnswerNode from dify_graph.nodes.answer.answer_node import AnswerNode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from extensions.ext_database import db from extensions.ext_database import db
from models.enums import UserFrom
def test_execute_answer(): def test_execute_answer():

View File

@ -8,13 +8,12 @@ from core.app.entities.app_invoke_entities import InvokeFrom
from core.helper.ssrf_proxy import ssrf_proxy from core.helper.ssrf_proxy import ssrf_proxy
from core.tools.tool_file_manager import ToolFileManager from core.tools.tool_file_manager import ToolFileManager
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.file.file_manager import file_manager from dify_graph.file.file_manager import file_manager
from dify_graph.nodes.http_request import HTTP_REQUEST_CONFIG_FILTER_KEY, HttpRequestNode, HttpRequestNodeConfig from dify_graph.nodes.http_request import HTTP_REQUEST_CONFIG_FILTER_KEY, HttpRequestNode, HttpRequestNodeConfig
from dify_graph.nodes.http_request.entities import HttpRequestNodeTimeout, Response from dify_graph.nodes.http_request.entities import HttpRequestNodeTimeout, Response
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
HTTP_REQUEST_CONFIG = HttpRequestNodeConfig( HTTP_REQUEST_CONFIG = HttpRequestNodeConfig(
max_connect_timeout=10, max_connect_timeout=10,

View File

@ -3,7 +3,7 @@ from types import SimpleNamespace
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities.graph_init_params import GraphInitParams from dify_graph.entities.graph_init_params import GraphInitParams
from dify_graph.enums import NodeType from dify_graph.enums import NodeType, UserFrom
from dify_graph.graph_events import ( from dify_graph.graph_events import (
NodeRunHumanInputFormFilledEvent, NodeRunHumanInputFormFilledEvent,
NodeRunHumanInputFormTimeoutEvent, NodeRunHumanInputFormTimeoutEvent,
@ -14,7 +14,6 @@ from dify_graph.nodes.human_input.human_input_node import HumanInputNode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
from models.enums import UserFrom
class _FakeFormRepository: class _FakeFormRepository:

View File

@ -6,7 +6,7 @@ import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import SystemVariableKey, WorkflowNodeExecutionStatus from dify_graph.enums import SystemVariableKey, UserFrom, WorkflowNodeExecutionStatus
from dify_graph.nodes.knowledge_index.entities import KnowledgeIndexNodeData from dify_graph.nodes.knowledge_index.entities import KnowledgeIndexNodeData
from dify_graph.nodes.knowledge_index.exc import KnowledgeIndexNodeError from dify_graph.nodes.knowledge_index.exc import KnowledgeIndexNodeError
from dify_graph.nodes.knowledge_index.knowledge_index_node import KnowledgeIndexNode from dify_graph.nodes.knowledge_index.knowledge_index_node import KnowledgeIndexNode
@ -15,7 +15,6 @@ from dify_graph.repositories.summary_index_service_protocol import SummaryIndexS
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from dify_graph.variables.segments import StringSegment from dify_graph.variables.segments import StringSegment
from models.enums import UserFrom
@pytest.fixture @pytest.fixture

View File

@ -6,7 +6,7 @@ import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.model_runtime.entities.llm_entities import LLMUsage from dify_graph.model_runtime.entities.llm_entities import LLMUsage
from dify_graph.nodes.knowledge_retrieval.entities import ( from dify_graph.nodes.knowledge_retrieval.entities import (
KnowledgeRetrievalNodeData, KnowledgeRetrievalNodeData,
@ -20,7 +20,6 @@ from dify_graph.repositories.rag_retrieval_protocol import RAGRetrievalProtocol,
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from dify_graph.variables import StringSegment from dify_graph.variables import StringSegment
from models.enums import UserFrom
@pytest.fixture @pytest.fixture

View File

@ -12,6 +12,7 @@ from core.entities.provider_entities import CustomConfiguration, SystemConfigura
from core.model_manager import ModelInstance from core.model_manager import ModelInstance
from core.prompt.entities.advanced_prompt_entities import MemoryConfig from core.prompt.entities.advanced_prompt_entities import MemoryConfig
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.file import File, FileTransferMethod, FileType from dify_graph.file import File, FileTransferMethod, FileType
from dify_graph.model_runtime.entities.common_entities import I18nObject from dify_graph.model_runtime.entities.common_entities import I18nObject
from dify_graph.model_runtime.entities.message_entities import ( from dify_graph.model_runtime.entities.message_entities import (
@ -39,7 +40,6 @@ from dify_graph.nodes.llm.protocols import CredentialsProvider, ModelFactory
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from dify_graph.variables import ArrayAnySegment, ArrayFileSegment, NoneSegment from dify_graph.variables import ArrayAnySegment, ArrayFileSegment, NoneSegment
from models.enums import UserFrom
from models.provider import ProviderType from models.provider import ProviderType

View File

@ -2,8 +2,9 @@ from collections.abc import Mapping
import pytest import pytest
from core.app.entities.app_invoke_entities import InvokeFrom as LegacyInvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import NodeType from dify_graph.enums import InvokeFrom, NodeType, UserFrom
from dify_graph.nodes.base.entities import BaseNodeData from dify_graph.nodes.base.entities import BaseNodeData
from dify_graph.nodes.base.node import Node from dify_graph.nodes.base.node import Node
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
@ -56,6 +57,36 @@ def test_node_hydrates_data_during_initialization():
assert node.node_data.foo == "bar" assert node.node_data.foo == "bar"
assert node.title == "Sample" assert node.title == "Sample"
assert node.user_from == UserFrom.ACCOUNT
assert node.invoke_from == InvokeFrom.DEBUGGER
def test_node_normalizes_legacy_invoke_from_enum():
graph_config: dict[str, object] = {}
init_params = GraphInitParams(
tenant_id="tenant",
app_id="app",
workflow_id="workflow",
graph_config=graph_config,
user_id="user",
user_from=UserFrom.ACCOUNT,
invoke_from=LegacyInvokeFrom.DEBUGGER,
call_depth=0,
)
runtime_state = GraphRuntimeState(
variable_pool=VariablePool(system_variables=SystemVariable(user_id="user", files=[]), user_inputs={}),
start_at=0.0,
)
node = _SampleNode(
id="node-1",
config={"id": "node-1", "data": {"title": "Sample", "foo": "bar"}},
graph_init_params=init_params,
graph_runtime_state=runtime_state,
)
assert node.user_from == UserFrom.ACCOUNT
assert node.invoke_from == InvokeFrom.DEBUGGER
def test_missing_generic_argument_raises_type_error(): def test_missing_generic_argument_raises_type_error():

View File

@ -7,7 +7,7 @@ from docx.oxml.text.paragraph import CT_P
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import NodeType, WorkflowNodeExecutionStatus from dify_graph.enums import NodeType, UserFrom, WorkflowNodeExecutionStatus
from dify_graph.file import File, FileTransferMethod from dify_graph.file import File, FileTransferMethod
from dify_graph.node_events import NodeRunResult from dify_graph.node_events import NodeRunResult
from dify_graph.nodes.document_extractor import DocumentExtractorNode, DocumentExtractorNodeData from dify_graph.nodes.document_extractor import DocumentExtractorNode, DocumentExtractorNodeData
@ -20,7 +20,6 @@ from dify_graph.nodes.document_extractor.node import (
from dify_graph.variables import ArrayFileSegment from dify_graph.variables import ArrayFileSegment
from dify_graph.variables.segments import ArrayStringSegment from dify_graph.variables.segments import ArrayStringSegment
from dify_graph.variables.variables import StringVariable from dify_graph.variables.variables import StringVariable
from models.enums import UserFrom
@pytest.fixture @pytest.fixture

View File

@ -7,7 +7,7 @@ import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.file import File, FileTransferMethod, FileType from dify_graph.file import File, FileTransferMethod, FileType
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.nodes.if_else.entities import IfElseNodeData from dify_graph.nodes.if_else.entities import IfElseNodeData
@ -17,7 +17,6 @@ from dify_graph.system_variable import SystemVariable
from dify_graph.utils.condition.entities import Condition, SubCondition, SubVariableCondition from dify_graph.utils.condition.entities import Condition, SubCondition, SubVariableCondition
from dify_graph.variables import ArrayFileSegment from dify_graph.variables import ArrayFileSegment
from extensions.ext_database import db from extensions.ext_database import db
from models.enums import UserFrom
def test_execute_if_else_result_true(): def test_execute_if_else_result_true():

View File

@ -3,7 +3,7 @@ from unittest.mock import MagicMock
import pytest import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.enums import UserFrom, WorkflowNodeExecutionStatus
from dify_graph.file import File, FileTransferMethod, FileType from dify_graph.file import File, FileTransferMethod, FileType
from dify_graph.nodes.list_operator.entities import ( from dify_graph.nodes.list_operator.entities import (
ExtractConfig, ExtractConfig,
@ -17,7 +17,6 @@ from dify_graph.nodes.list_operator.entities import (
from dify_graph.nodes.list_operator.exc import InvalidKeyError from dify_graph.nodes.list_operator.exc import InvalidKeyError
from dify_graph.nodes.list_operator.node import ListOperatorNode, _get_file_extract_string_func from dify_graph.nodes.list_operator.node import ListOperatorNode, _get_file_extract_string_func
from dify_graph.variables import ArrayFileSegment from dify_graph.variables import ArrayFileSegment
from models.enums import UserFrom
@pytest.fixture @pytest.fixture

View File

@ -5,6 +5,7 @@ from uuid import uuid4
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.graph_events.node import NodeRunSucceededEvent from dify_graph.graph_events.node import NodeRunSucceededEvent
from dify_graph.nodes.variable_assigner.common import helpers as common_helpers from dify_graph.nodes.variable_assigner.common import helpers as common_helpers
@ -13,7 +14,6 @@ from dify_graph.nodes.variable_assigner.v1.node_data import WriteMode
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from dify_graph.variables import ArrayStringVariable, StringVariable from dify_graph.variables import ArrayStringVariable, StringVariable
from models.enums import UserFrom
DEFAULT_NODE_ID = "node_id" DEFAULT_NODE_ID = "node_id"

View File

@ -5,13 +5,13 @@ from uuid import uuid4
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.node_factory import DifyNodeFactory from core.workflow.node_factory import DifyNodeFactory
from dify_graph.entities import GraphInitParams from dify_graph.entities import GraphInitParams
from dify_graph.enums import UserFrom
from dify_graph.graph import Graph from dify_graph.graph import Graph
from dify_graph.nodes.variable_assigner.v2 import VariableAssignerNode from dify_graph.nodes.variable_assigner.v2 import VariableAssignerNode
from dify_graph.nodes.variable_assigner.v2.enums import InputType, Operation from dify_graph.nodes.variable_assigner.v2.enums import InputType, Operation
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from dify_graph.variables import ArrayStringVariable from dify_graph.variables import ArrayStringVariable
from models.enums import UserFrom
DEFAULT_NODE_ID = "node_id" DEFAULT_NODE_ID = "node_id"

View File

@ -11,6 +11,7 @@ from unittest.mock import Mock, patch
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities.graph_init_params import GraphInitParams from dify_graph.entities.graph_init_params import GraphInitParams
from dify_graph.entities.workflow_node_execution import WorkflowNodeExecutionStatus from dify_graph.entities.workflow_node_execution import WorkflowNodeExecutionStatus
from dify_graph.enums import UserFrom
from dify_graph.nodes.trigger_webhook.entities import ( from dify_graph.nodes.trigger_webhook.entities import (
ContentType, ContentType,
Method, Method,
@ -21,7 +22,6 @@ from dify_graph.nodes.trigger_webhook.node import TriggerWebhookNode
from dify_graph.runtime.graph_runtime_state import GraphRuntimeState from dify_graph.runtime.graph_runtime_state import GraphRuntimeState
from dify_graph.runtime.variable_pool import VariablePool from dify_graph.runtime.variable_pool import VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from models.enums import UserFrom
from models.workflow import WorkflowType from models.workflow import WorkflowType

View File

@ -5,6 +5,7 @@ import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from dify_graph.entities.graph_init_params import GraphInitParams from dify_graph.entities.graph_init_params import GraphInitParams
from dify_graph.entities.workflow_node_execution import WorkflowNodeExecutionStatus from dify_graph.entities.workflow_node_execution import WorkflowNodeExecutionStatus
from dify_graph.enums import UserFrom
from dify_graph.file import File, FileTransferMethod, FileType from dify_graph.file import File, FileTransferMethod, FileType
from dify_graph.nodes.trigger_webhook.entities import ( from dify_graph.nodes.trigger_webhook.entities import (
ContentType, ContentType,
@ -18,7 +19,6 @@ from dify_graph.runtime.graph_runtime_state import GraphRuntimeState
from dify_graph.runtime.variable_pool import VariablePool from dify_graph.runtime.variable_pool import VariablePool
from dify_graph.system_variable import SystemVariable from dify_graph.system_variable import SystemVariable
from dify_graph.variables import FileVariable, StringVariable from dify_graph.variables import FileVariable, StringVariable
from models.enums import UserFrom
from models.workflow import WorkflowType from models.workflow import WorkflowType

View File

@ -4,9 +4,9 @@ from unittest.mock import MagicMock, patch
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from dify_graph.enums import UserFrom
from dify_graph.graph_engine.command_channels.redis_channel import RedisChannel from dify_graph.graph_engine.command_channels.redis_channel import RedisChannel
from dify_graph.runtime import GraphRuntimeState, VariablePool from dify_graph.runtime import GraphRuntimeState, VariablePool
from models.enums import UserFrom
class TestWorkflowEntryRedisChannel: class TestWorkflowEntryRedisChannel: