Nymbo/self-hosted-python
1
1importScripts("./pyodide.js");2 3onmessage = async function (e) {4 try {5 const data = e.data;6 for (let key of Object.keys(data)) {7 if (key !== "python") {8 // Keys other than python must be arguments for the python script.9 // Set them on self, so that `from js import key` works.10 self[key] = data[key];11 }12 }13 14 if (!loadPyodide.inProgress) {15 self.pyodide = await loadPyodide({ indexURL: "./" });16 }17 await self.pyodide.loadPackagesFromImports(data.python);18 let results = await self.pyodide.runPythonAsync(data.python);19 self.postMessage({ results });20 } catch (e) {21 // if you prefer messages with the error22 self.postMessage({ error: e.message + "\n" + e.stack });23 // if you prefer onerror events24 // setTimeout(() => { throw err; });25 }26};27 