mirror of
http://112.124.100.131/huang.ze/ebiz-dify-ai.git
synced 2025-12-10 03:16:51 +08:00
improve: exract Code Node provider for each supported scripting language (#4164)
This commit is contained in:
@@ -5,7 +5,7 @@ import pytest
|
||||
from _pytest.monkeypatch import MonkeyPatch
|
||||
from jinja2 import Template
|
||||
|
||||
from core.helper.code_executor.code_executor import CodeExecutor
|
||||
from core.helper.code_executor.code_executor import CodeExecutor, CodeLanguage
|
||||
from core.helper.code_executor.entities import CodeDependency
|
||||
|
||||
MOCK = os.getenv('MOCK_SWITCH', 'false') == 'true'
|
||||
@@ -15,14 +15,15 @@ class MockedCodeExecutor:
|
||||
def invoke(cls, language: Literal['python3', 'javascript', 'jinja2'],
|
||||
code: str, inputs: dict, dependencies: Optional[list[CodeDependency]] = None) -> dict:
|
||||
# invoke directly
|
||||
if language == 'python3':
|
||||
return {
|
||||
"result": 3
|
||||
}
|
||||
elif language == 'jinja2':
|
||||
return {
|
||||
"result": Template(code).render(inputs)
|
||||
}
|
||||
match language:
|
||||
case CodeLanguage.PYTHON3:
|
||||
return {
|
||||
"result": 3
|
||||
}
|
||||
case CodeLanguage.JINJA2:
|
||||
return {
|
||||
"result": Template(code).render(inputs)
|
||||
}
|
||||
|
||||
@pytest.fixture
|
||||
def setup_code_executor_mock(request, monkeypatch: MonkeyPatch):
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from textwrap import dedent
|
||||
|
||||
from core.helper.code_executor.code_executor import CodeExecutor, CodeLanguage
|
||||
from core.workflow.nodes.code.code_node import JAVASCRIPT_DEFAULT_CODE
|
||||
from core.helper.code_executor.javascript.javascript_code_provider import JavascriptCodeProvider
|
||||
|
||||
CODE_LANGUAGE = CodeLanguage.JAVASCRIPT
|
||||
|
||||
@@ -23,5 +23,12 @@ def test_javascript_json():
|
||||
|
||||
def test_javascript_with_code_template():
|
||||
result = CodeExecutor.execute_workflow_code_template(
|
||||
language=CODE_LANGUAGE, code=JAVASCRIPT_DEFAULT_CODE, inputs={'arg1': 'Hello', 'arg2': 'World'})
|
||||
language=CODE_LANGUAGE, code=JavascriptCodeProvider.get_default_code(), inputs={'arg1': 'Hello', 'arg2': 'World'})
|
||||
assert result == {'result': 'HelloWorld'}
|
||||
|
||||
|
||||
def test_javascript_list_default_available_packages():
|
||||
packages = JavascriptCodeProvider.get_default_available_packages()
|
||||
|
||||
# no default packages available for javascript
|
||||
assert len(packages) == 0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import base64
|
||||
|
||||
from core.helper.code_executor.code_executor import CodeExecutor, CodeLanguage
|
||||
from core.helper.code_executor.jinja2_transformer import JINJA2_PRELOAD, PYTHON_RUNNER
|
||||
from core.helper.code_executor.jinja2.jinja2_transformer import JINJA2_PRELOAD, PYTHON_RUNNER
|
||||
|
||||
CODE_LANGUAGE = CodeLanguage.JINJA2
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import json
|
||||
from textwrap import dedent
|
||||
|
||||
from core.helper.code_executor.code_executor import CodeExecutor, CodeLanguage
|
||||
from core.workflow.nodes.code.code_node import PYTHON_DEFAULT_CODE
|
||||
from core.helper.code_executor.python3.python3_code_provider import Python3CodeProvider
|
||||
|
||||
CODE_LANGUAGE = CodeLanguage.PYTHON3
|
||||
|
||||
@@ -23,5 +24,14 @@ def test_python3_json():
|
||||
|
||||
def test_python3_with_code_template():
|
||||
result = CodeExecutor.execute_workflow_code_template(
|
||||
language=CODE_LANGUAGE, code=PYTHON_DEFAULT_CODE, inputs={'arg1': 'Hello', 'arg2': 'World'})
|
||||
language=CODE_LANGUAGE, code=Python3CodeProvider.get_default_code(), inputs={'arg1': 'Hello', 'arg2': 'World'})
|
||||
assert result == {'result': 'HelloWorld'}
|
||||
|
||||
|
||||
def test_python3_list_default_available_packages():
|
||||
packages = Python3CodeProvider.get_default_available_packages()
|
||||
assert len(packages) > 0
|
||||
assert {'requests', 'httpx'}.issubset(p['name'] for p in packages)
|
||||
|
||||
# check JSON serializable
|
||||
assert len(str(json.dumps(packages))) > 0
|
||||
|
||||
Reference in New Issue
Block a user