mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 09:36:44 +00:00
refactor(core): Replace pickle with JSON serialization in native Python runner (#19123)
This commit is contained in:
@@ -6,7 +6,6 @@ import json
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import pickle
|
||||
|
||||
from src.errors import (
|
||||
TaskResultMissingError,
|
||||
@@ -27,7 +26,7 @@ from typing import Any, Set
|
||||
from multiprocessing.context import SpawnProcess
|
||||
|
||||
MULTIPROCESSING_CONTEXT = multiprocessing.get_context("spawn")
|
||||
MAX_PRINT_STATEMENTS_ALLOWED = 100
|
||||
MAX_PRINT_ARGS_ALLOWED = 100
|
||||
|
||||
PrintArgs = list[list[Any]] # Args to all `print()` calls in a Python code task
|
||||
|
||||
@@ -105,8 +104,8 @@ class TaskExecutor:
|
||||
|
||||
result_file = returned["result_file"]
|
||||
try:
|
||||
with open(result_file, "rb") as f:
|
||||
result = pickle.load(f)
|
||||
with open(result_file, "r", encoding="utf-8") as f:
|
||||
result = json.load(f)
|
||||
finally:
|
||||
os.unlink(result_file)
|
||||
|
||||
@@ -227,9 +226,13 @@ class TaskExecutor:
|
||||
queue: multiprocessing.Queue, result: list[Any], print_args: PrintArgs
|
||||
):
|
||||
with tempfile.NamedTemporaryFile(
|
||||
mode="wb", delete=False, prefix="n8n_result_"
|
||||
mode="w",
|
||||
delete=False,
|
||||
prefix="n8n_result_",
|
||||
suffix=".json",
|
||||
encoding="utf-8",
|
||||
) as f:
|
||||
pickle.dump(result, f)
|
||||
json.dump(result, f, default=str, ensure_ascii=False)
|
||||
result_file = f.name
|
||||
|
||||
print_args_to_send = TaskExecutor._truncate_print_args(print_args)
|
||||
@@ -302,13 +305,13 @@ class TaskExecutor:
|
||||
def _truncate_print_args(print_args: PrintArgs) -> PrintArgs:
|
||||
"""Truncate print_args to prevent pipe buffer overflow."""
|
||||
|
||||
if not print_args or len(print_args) <= MAX_PRINT_STATEMENTS_ALLOWED:
|
||||
if not print_args or len(print_args) <= MAX_PRINT_ARGS_ALLOWED:
|
||||
return print_args
|
||||
|
||||
truncated = print_args[:MAX_PRINT_STATEMENTS_ALLOWED]
|
||||
truncated = print_args[:MAX_PRINT_ARGS_ALLOWED]
|
||||
truncated.append(
|
||||
[
|
||||
f"[Output truncated - {len(print_args) - MAX_PRINT_STATEMENTS_ALLOWED} more print statements]"
|
||||
f"[Output truncated - {len(print_args) - MAX_PRINT_ARGS_ALLOWED} more print statements]"
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user