From 2ad6d0fce1d0287e5659fc4f3a1bb39f1ffa1076 Mon Sep 17 00:00:00 2001 From: cshadsy Date: Sun, 21 Sep 2025 15:55:30 -0400 Subject: [PATCH 1/5] Create pythonpm.js --- static/extensions/cshadsy/pythonpm.js | 177 ++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 static/extensions/cshadsy/pythonpm.js diff --git a/static/extensions/cshadsy/pythonpm.js b/static/extensions/cshadsy/pythonpm.js new file mode 100644 index 00000000..ce1664a7 --- /dev/null +++ b/static/extensions/cshadsy/pythonpm.js @@ -0,0 +1,177 @@ +class PythonRunnerExtension { + constructor(vm) { + this.vm = vm; + this.pyReady = false; + this._lastStdout = ''; + this._variables = {}; // store variable names + this.loadPython(); + } + + getStdout() { + return this._lastStdout ? this._lastStdout.toString() : ''; + } + + getInfo() { + return { + id: 'conipythonpm', + name: 'Python', + color1: '#306998', + blocks: [ + { + opcode: 'runPythonCommand', + blockType: 'command', + text: 'run python code [CODE]', + arguments: { CODE: { type: 'string', defaultValue: 'print("hello world")' } } + }, + { + opcode: 'getStdout', + blockType: 'reporter', + text: 'stdout', + arguments: {} + }, + { + opcode: 'runPython', + blockType: 'reporter', + text: 'run python code [CODE]', + arguments: { CODE: { type: 'string', defaultValue: '2+2' } } + }, + { + opcode: 'runPythonBoolean', + blockType: 'Boolean', + text: 'run python code [CODE]', + arguments: { CODE: { type: 'string', defaultValue: '5 > 2' } } + }, + { + opcode: 'setPythonVariable', + blockType: 'command', + text: 'set python variable [VAR] to [VAL]', + arguments: { + VAR: { type: 'string', defaultValue: 'x' }, + VAL: { type: 'string', defaultValue: '0' } + } + }, + { + opcode: 'getPythonVariable', + blockType: 'reporter', + text: 'value of python variable [VAR]', + arguments: { + VAR: { type: 'string', defaultValue: 'x' } + } + } + ] + }; + } + + async loadPython() { + if (typeof window !== 'undefined' && !window.loadPyodide) { + const script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = 'https://cdn.jsdelivr.net/pyodide/v0.23.4/full/pyodide.js'; + script.onload = async () => { + try { + this.pyodide = await loadPyodide(); + this.pyReady = true; + console.log('[PythonRunnerExtension] Pyodide loaded'); + } catch (e) { + console.error('[PythonRunnerExtension] Pyodide failed to initialize', e); + } + }; + script.onerror = () => { + console.error('[PythonRunnerExtension] Could not load Pyodide from CDN.'); + }; + document.head.appendChild(script); + } else if (window.pyodide) { + this.pyodide = window.pyodide; + this.pyReady = true; + } + } + + async runPythonCommand(args) { + if (!this.pyReady || !this.pyodide) return; + try { + let code = args.CODE; + let output = ''; + this.pyodide.runPython(` +import sys +from io import StringIO +sys.stdout = StringIO() +sys.stderr = StringIO() +`); + await this.pyodide.runPythonAsync(code); + output = this.pyodide.runPython('sys.stdout.getvalue()'); + this._lastStdout = output; + } catch (e) { + this._lastStdout = 'Python error: ' + e; + } + } + + async runPython(args) { + if (!this.pyReady || !this.pyodide) return 'Python not ready'; + try { + let code = args.CODE; + this.pyodide.runPython(` +import sys +from io import StringIO +sys.stdout = StringIO() +sys.stderr = StringIO() +`); + let result = await this.pyodide.runPythonAsync(code); + let output = this.pyodide.runPython('sys.stdout.getvalue()'); + if (result === undefined || result === null) return output || 'None'; + return output ? output : result.toString(); + } catch (e) { + return 'Python error: ' + e; + } + } + + async runPythonBoolean(args) { + if (!this.pyReady || !this.pyodide) return false; + try { + let code = args.CODE; + let result = await this.pyodide.runPythonAsync(code); + return result === true; + } catch (e) { + return false; + } + } + + async setPythonVariable(args) { + if (!this.pyReady || !this.pyodide) return; + try { + let varName = args.VAR; + let val = args.VAL; + // store variable in Python + await this.pyodide.runPythonAsync(`${varName} = ${val}`); + this._variables[varName] = true; + } catch (e) { + console.error('[PythonRunnerExtension] Error setting variable:', e); + } + } + + async getPythonVariable(args) { + if (!this.pyReady || !this.pyodide) return 'Python not ready'; + try { + let varName = args.VAR; + if (!this._variables[varName]) return 'undefined'; + let val = await this.pyodide.runPythonAsync(varName); + return val !== undefined && val !== null ? val.toString() : 'None'; + } catch (e) { + return 'Python error: ' + e; + } + } +} + +(function() { + if (typeof window !== 'undefined') { + if (window.TurboWarpExtensions && window.vm) { + // needs unsandbox xoxo + window.TurboWarpExtensions.register( + 'pythonRunner', + vm => new PythonRunnerExtension(vm), + { unsandboxed: true } + ); + } else if (window.vm && window.vm.extensionManager) { + window.vm.extensionManager._registerInternalExtension(new PythonRunnerExtension(window.vm)); + } + } +})(); From e3e572c0f594b2e2952dda23158b462d66c20d34 Mon Sep 17 00:00:00 2001 From: cshadsy Date: Sun, 21 Sep 2025 15:58:18 -0400 Subject: [PATCH 2/5] Create a --- static/images/cshadsy/a | 1 + 1 file changed, 1 insertion(+) create mode 100644 static/images/cshadsy/a diff --git a/static/images/cshadsy/a b/static/images/cshadsy/a new file mode 100644 index 00000000..38590737 --- /dev/null +++ b/static/images/cshadsy/a @@ -0,0 +1 @@ +buffer thingy so i can uplaod From 5270cbb2d64f7f088de3b82a44d6988f37715db6 Mon Sep 17 00:00:00 2001 From: cshadsy Date: Sun, 21 Sep 2025 15:59:22 -0400 Subject: [PATCH 3/5] Add files via upload --- static/images/cshadsy/costume1.png | Bin 0 -> 11871 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/images/cshadsy/costume1.png diff --git a/static/images/cshadsy/costume1.png b/static/images/cshadsy/costume1.png new file mode 100644 index 0000000000000000000000000000000000000000..44dc59de16209b2ea8ef262cff79601f5ec507b9 GIT binary patch literal 11871 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%0A-c~R?i8l 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 Date: Sun, 21 Sep 2025 15:59:59 -0400 Subject: [PATCH 4/5] Rename costume1.png to pythonpm.png --- .../images/cshadsy/{costume1.png => pythonpm.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename static/images/cshadsy/{costume1.png => pythonpm.png} (100%) diff --git a/static/images/cshadsy/costume1.png b/static/images/cshadsy/pythonpm.png similarity index 100% rename from static/images/cshadsy/costume1.png rename to static/images/cshadsy/pythonpm.png From 982384d50f9f8fc7a15cbd79f51a13e954f414be Mon Sep 17 00:00:00 2001 From: cshadsy Date: Sun, 21 Sep 2025 16:00:15 -0400 Subject: [PATCH 5/5] Delete static/images/cshadsy/a --- static/images/cshadsy/a | 1 - 1 file changed, 1 deletion(-) delete mode 100644 static/images/cshadsy/a diff --git a/static/images/cshadsy/a b/static/images/cshadsy/a deleted file mode 100644 index 38590737..00000000 --- a/static/images/cshadsy/a +++ /dev/null @@ -1 +0,0 @@ -buffer thingy so i can uplaod