|
@@ -1,10 +1,13 @@
|
|
|
import json
|
|
|
import re
|
|
|
+from base64 import b64encode
|
|
|
|
|
|
from core.helper.code_executor.template_transformer import TemplateTransformer
|
|
|
|
|
|
PYTHON_RUNNER = """
|
|
|
import jinja2
|
|
|
+from json import loads
|
|
|
+from base64 import b64decode
|
|
|
|
|
|
template = jinja2.Template('''{{code}}''')
|
|
|
|
|
@@ -12,7 +15,8 @@ def main(**inputs):
|
|
|
return template.render(**inputs)
|
|
|
|
|
|
# execute main function, and return the result
|
|
|
-output = main(**{{inputs}})
|
|
|
+inputs = b64decode('{{inputs}}').decode('utf-8')
|
|
|
+output = main(**loads(inputs))
|
|
|
|
|
|
result = f'''<<RESULT>>{output}<<RESULT>>'''
|
|
|
|
|
@@ -39,6 +43,7 @@ JINJA2_PRELOAD_TEMPLATE = """{% set fruits = ['Apple'] %}
|
|
|
|
|
|
JINJA2_PRELOAD = f"""
|
|
|
import jinja2
|
|
|
+from base64 import b64decode
|
|
|
|
|
|
def _jinja2_preload_():
|
|
|
# prepare jinja2 environment, load template and render before to avoid sandbox issue
|
|
@@ -60,9 +65,11 @@ class Jinja2TemplateTransformer(TemplateTransformer):
|
|
|
:return:
|
|
|
"""
|
|
|
|
|
|
+ inputs_str = b64encode(json.dumps(inputs, ensure_ascii=False).encode()).decode('utf-8')
|
|
|
+
|
|
|
# transform jinja2 template to python code
|
|
|
runner = PYTHON_RUNNER.replace('{{code}}', code)
|
|
|
- runner = runner.replace('{{inputs}}', json.dumps(inputs, indent=4, ensure_ascii=False))
|
|
|
+ runner = runner.replace('{{inputs}}', inputs_str)
|
|
|
|
|
|
return runner, JINJA2_PRELOAD
|
|
|
|