From 418c9f4ebfd34be2e081d607f9520d0272154310 Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Sat, 17 Jan 2026 19:01:55 +0000 Subject: [PATCH] Generated by Spark: Fix all reported errors. --- src/components/PythonOutput.tsx | 2 +- src/lib/pyodide-runner.ts | 121 +++++++++++++++----------------- 2 files changed, 56 insertions(+), 67 deletions(-) diff --git a/src/components/PythonOutput.tsx b/src/components/PythonOutput.tsx index 0469171..f0f4ce3 100644 --- a/src/components/PythonOutput.tsx +++ b/src/components/PythonOutput.tsx @@ -44,7 +44,7 @@ export function PythonOutput({ code }: PythonOutputProps) { try { const result = await runPythonCode(code) - setOutput(result.output) + setOutput(result.output || '') if (result.error) { setError(result.error) } diff --git a/src/lib/pyodide-runner.ts b/src/lib/pyodide-runner.ts index bc0537d..6b35de8 100644 --- a/src/lib/pyodide-runner.ts +++ b/src/lib/pyodide-runner.ts @@ -1,66 +1,55 @@ -import { loadPyodide, PyodideInterface } from 'pyodide' - -let pyodideInstance: PyodideInterface | null = null -let pyodideLoading: Promise | null = null - - if (pyodideLoading) { - } - pyodideLoading = loadPyo - } - - if (pyodideLoading) { - return pyodideLoading - } - - pyodideLoading = loadPyodide({ - indexURL: 'https://cdn.jsdelivr.net/pyodide/v0.29.1/full/', - }).then((pyodide) => { - pyodideInstance = pyodide - return pyodide - }) - - output: stdout - - - - if - } - - return { - erro - } - - return pyodideInstanc - - - - - - - - - - output: stdout || '', - error: stderr || (err instanceof Error ? err.message : String(err)) - } - } - - const stdout = pyodide.runPython('sys.stdout.getvalue()') - - let output = stdout || '' - if (result !== undefined && result !== null) { - output += (output ? '\n' : '') + String(result) - } - - return { output: output || '(no output)' } - } catch (err) { - return { - output: '', - error: err instanceof Error ? err.message : String(err) - } - } -} - -export function isPyodideReady(): boolean { - return pyodideInstance !== null -} +import { loadPyodide, PyodideInterface } from 'pyodide' + +let pyodideInstance: PyodideInterface | null = null +let pyodideLoading: Promise | null = null + +export async function getPyodide(): Promise { + if (pyodideInstance) { + return pyodideInstance + } + + if (pyodideLoading) { + return pyodideLoading + } + + pyodideLoading = loadPyodide({ + indexURL: 'https://cdn.jsdelivr.net/pyodide/v0.29.1/full/', + }).then((pyodide) => { + pyodideInstance = pyodide + return pyodide + }) + + return pyodideLoading +} + +export async function runPythonCode(code: string): Promise<{ output?: string; error?: string }> { + try { + const pyodide = await getPyodide() + + pyodide.runPython(` +import sys +from io import StringIO +sys.stdout = StringIO() +sys.stderr = StringIO() +`) + + const result = pyodide.runPython(code) + const stdout = pyodide.runPython('sys.stdout.getvalue()') + + let output = stdout || '' + if (result !== undefined && result !== null) { + output += (output ? '\n' : '') + String(result) + } + + return { output: output || '(no output)' } + } catch (err) { + return { + output: '', + error: err instanceof Error ? err.message : String(err) + } + } +} + +export function isPyodideReady(): boolean { + return pyodideInstance !== null +}