improve: exract Code Node provider for each supported scripting language (#4164)

This commit is contained in:
Bowen Liang
2024-05-17 11:58:12 +08:00
committed by GitHub
parent de3a7603ac
commit 083ef2e6fc
21 changed files with 174 additions and 97 deletions

View File

@@ -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):

View File

@@ -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

View File

@@ -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

View File

@@ -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