1
+ from enum import Enum
1
2
from typing import Literal , Optional
2
3
3
4
from httpx import post
@@ -28,7 +29,25 @@ class Data(BaseModel):
28
29
data : Data
29
30
30
31
32
+ class CodeLanguage (str , Enum ):
33
+ PYTHON3 = 'python3'
34
+ JINJA2 = 'jinja2'
35
+ JAVASCRIPT = 'javascript'
36
+
37
+
31
38
class CodeExecutor :
39
+ code_template_transformers = {
40
+ CodeLanguage .PYTHON3 : PythonTemplateTransformer ,
41
+ CodeLanguage .JINJA2 : Jinja2TemplateTransformer ,
42
+ CodeLanguage .JAVASCRIPT : NodeJsTemplateTransformer ,
43
+ }
44
+
45
+ code_language_to_running_language = {
46
+ CodeLanguage .JAVASCRIPT : 'nodejs' ,
47
+ CodeLanguage .JINJA2 : CodeLanguage .PYTHON3 ,
48
+ CodeLanguage .PYTHON3 : CodeLanguage .PYTHON3 ,
49
+ }
50
+
32
51
@classmethod
33
52
def execute_code (cls , language : Literal ['python3' , 'javascript' , 'jinja2' ], preload : str , code : str ) -> str :
34
53
"""
@@ -44,9 +63,7 @@ def execute_code(cls, language: Literal['python3', 'javascript', 'jinja2'], prel
44
63
}
45
64
46
65
data = {
47
- 'language' : 'python3' if language == 'jinja2' else
48
- 'nodejs' if language == 'javascript' else
49
- 'python3' if language == 'python3' else None ,
66
+ 'language' : cls .code_language_to_running_language .get (language ),
50
67
'code' : code ,
51
68
'preload' : preload
52
69
}
@@ -86,15 +103,9 @@ def execute_workflow_code_template(cls, language: Literal['python3', 'javascript
86
103
:param inputs: inputs
87
104
:return:
88
105
"""
89
- template_transformer = None
90
- if language == 'python3' :
91
- template_transformer = PythonTemplateTransformer
92
- elif language == 'jinja2' :
93
- template_transformer = Jinja2TemplateTransformer
94
- elif language == 'javascript' :
95
- template_transformer = NodeJsTemplateTransformer
96
- else :
97
- raise CodeExecutionException ('Unsupported language' )
106
+ template_transformer = cls .code_template_transformers .get (language )
107
+ if not template_transformer :
108
+ raise CodeExecutionException (f'Unsupported language { language } ' )
98
109
99
110
runner , preload = template_transformer .transform_caller (code , inputs )
100
111
0 commit comments