Expose pyscript.py_import and js_import for lazy Python/JS modules (#2091)

* Expose pyscript.py_modules for lazy Python modules

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Andrea Giammarchi
2024-06-04 19:08:52 +02:00
committed by GitHub
parent ac56f82c6d
commit 1c675307e1
6 changed files with 54 additions and 20 deletions

View File

@@ -157,6 +157,7 @@ for (const [TYPE, interpreter] of TYPES) {
// enrich the Python env with some JS utility for main
interpreter.registerJsModule("_pyscript", {
PyWorker,
js_import: (...urls) => Promise.all(urls.map((url) => import(url))),
get target() {
return isScript(currentElement)
? currentElement.target.id

View File

@@ -29,6 +29,7 @@
# pyscript.magic_js. This is the blessed way to access them from pyscript,
# as it works transparently in both the main thread and worker cases.
from polyscript import lazy_py_modules as py_import
from pyscript.display import HTML, display
from pyscript.fetch import fetch
from pyscript.magic_js import (
@@ -37,6 +38,7 @@ from pyscript.magic_js import (
config,
current_target,
document,
js_import,
js_modules,
sync,
window,

View File

@@ -42,6 +42,10 @@ if RUNNING_IN_WORKER:
window = polyscript.xworker.window
document = window.document
js.document = document
# this is the same as js_import on main and it lands modules on main
js_import = window.Function(
"return (...urls) => Promise.all(urls.map((url) => import(url)))"
)()
except:
globalThis.console.debug("SharedArrayBuffer is not available")
# in this scenario none of the utilities would work
@@ -64,7 +68,7 @@ if RUNNING_IN_WORKER:
else:
import _pyscript
from _pyscript import PyWorker
from _pyscript import PyWorker, js_import
window = globalThis
document = globalThis.document