from __future__ import annotations import abc from collections.abc import Mapping from typing import Any, Protocol from sqlalchemy.orm import Session from dify_graph.enums import NodeType class DraftVariableSaver(Protocol): @abc.abstractmethod def save(self, process_data: Mapping[str, Any] | None, outputs: Mapping[str, Any] | None): pass class DraftVariableSaverFactory(Protocol): @abc.abstractmethod def __call__( self, session: Session, app_id: str, node_id: str, node_type: NodeType, node_execution_id: str, enclosing_node_id: str | None = None, ) -> DraftVariableSaver: pass class NoopDraftVariableSaver(DraftVariableSaver): def save(self, process_data: Mapping[str, Any] | None, outputs: Mapping[str, Any] | None): pass