From c4a8c449d8ca9f7af7b2c7fca5a9035befd338b6 Mon Sep 17 00:00:00 2001 From: FredericoFalcao Date: Sat, 7 Jun 2025 14:25:40 +0300 Subject: [PATCH] Add initialization script for PyPi table --- install/SYS_PRD_BND.PyPi.sql | 8 +++++ plt/generatePythonTriggerCode.inc.php | 51 +++++++++++++++++++++++++++ plt/runSandboxedPython.inc.php | 49 +++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 install/SYS_PRD_BND.PyPi.sql create mode 100644 plt/generatePythonTriggerCode.inc.php create mode 100644 plt/runSandboxedPython.inc.php diff --git a/install/SYS_PRD_BND.PyPi.sql b/install/SYS_PRD_BND.PyPi.sql new file mode 100644 index 0000000..625dac9 --- /dev/null +++ b/install/SYS_PRD_BND.PyPi.sql @@ -0,0 +1,8 @@ +USE SYS_PRD_BND; +CREATE TABLE `PyPi` ( + `LibName` varchar(255) NOT NULL, + `AliasName` varchar(255) DEFAULT NULL, + `LastUpdated` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + PRIMARY KEY (`LibName`) +); + diff --git a/plt/generatePythonTriggerCode.inc.php b/plt/generatePythonTriggerCode.inc.php new file mode 100644 index 0000000..f185cde --- /dev/null +++ b/plt/generatePythonTriggerCode.inc.php @@ -0,0 +1,51 @@ + ' ' . $line, explode("\n", $pyCode))); + + // Assemble complete Python script + $pythonCode = << ['pipe', 'w'], // stdout + 2 => ['pipe', 'w'], // stderr + ]; + + // Execute the Python code using proc_open + $process = proc_open($command, $descriptorspec, $pipes); + + if (!is_resource($process)) { + unlink($tempFile); + throw new Exception('Failed to execute sandboxed Python code.'); + } + + // Capture stdout and stderr + $stdout = stream_get_contents($pipes[1]); + fclose($pipes[1]); + + $stderr = stream_get_contents($pipes[2]); + fclose($pipes[2]); + + // Get the exit code + $exitCode = proc_close($process); + + // Cleanup temporary file + unlink($tempFile); + + return $exitCode; +}