Files
dify/api/core/workflow/template_rendering.py
-LAN- 56593f20b0 refactor(api): continue decoupling dify_graph from API concerns (#33580)
Signed-off-by: -LAN- <laipz8200@outlook.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: WH-2099 <wh2099@pm.me>
2026-03-25 20:32:24 +08:00

30 lines
1.1 KiB
Python

from __future__ import annotations
from collections.abc import Mapping
from typing import Any
from core.helper.code_executor.code_executor import CodeExecutionError, CodeExecutor
from dify_graph.nodes.code.entities import CodeLanguage
from dify_graph.template_rendering import Jinja2TemplateRenderer, TemplateRenderError
class CodeExecutorJinja2TemplateRenderer(Jinja2TemplateRenderer):
"""Sandbox-backed Jinja2 renderer for workflow-owned node composition."""
def render_template(self, template: str, variables: Mapping[str, Any]) -> str:
try:
result = CodeExecutor.execute_workflow_code_template(
language=CodeLanguage.JINJA2,
code=template,
inputs=variables,
)
except Exception as exc:
if isinstance(exc, CodeExecutionError):
raise TemplateRenderError(str(exc)) from exc
raise
rendered = result.get("result")
if not isinstance(rendered, str):
raise TemplateRenderError("Template render result must be a string.")
return rendered