diff --git a/pyscript.core/package-lock.json b/pyscript.core/package-lock.json index 6db70a3d..bd395b4d 100644 --- a/pyscript.core/package-lock.json +++ b/pyscript.core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@pyscript/core", - "version": "0.4.9", + "version": "0.4.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@pyscript/core", - "version": "0.4.9", + "version": "0.4.10", "license": "APACHE-2.0", "dependencies": { "@ungap/with-resolvers": "^0.1.0", diff --git a/pyscript.core/package.json b/pyscript.core/package.json index 7adf1130..691f4c86 100644 --- a/pyscript.core/package.json +++ b/pyscript.core/package.json @@ -1,6 +1,6 @@ { "name": "@pyscript/core", - "version": "0.4.9", + "version": "0.4.10", "type": "module", "description": "PyScript", "module": "./index.js", diff --git a/pyscript.core/src/stdlib/pyscript/ffi.py b/pyscript.core/src/stdlib/pyscript/ffi.py new file mode 100644 index 00000000..fd6ae658 --- /dev/null +++ b/pyscript.core/src/stdlib/pyscript/ffi.py @@ -0,0 +1,18 @@ +try: + import js + from pyodide.ffi import create_proxy as _cp + from pyodide.ffi import to_js as _py_tjs + + from_entries = js.Object.fromEntries + + def _tjs(value, **kw): + if not hasattr(kw, "dict_converter"): + kw["dict_converter"] = from_entries + return _py_tjs(value, **kw) + +except: + from jsffi import create_proxy as _cp + from jsffi import to_js as _tjs + +create_proxy = _cp +to_js = _tjs diff --git a/pyscript.core/test/ffi.html b/pyscript.core/test/ffi.html new file mode 100644 index 00000000..1c29ccb8 --- /dev/null +++ b/pyscript.core/test/ffi.html @@ -0,0 +1,26 @@ + + + + + + PyScript FFI + + + + + + + + diff --git a/pyscript.core/test/mpy.spec.js b/pyscript.core/test/mpy.spec.js index c1efc70b..fe94019c 100644 --- a/pyscript.core/test/mpy.spec.js +++ b/pyscript.core/test/mpy.spec.js @@ -83,3 +83,8 @@ test('MicroPython + Pyodide fetch', async ({ page }) => { await page.goto('http://localhost:8080/test/fetch.html'); await page.waitForSelector('html.mpy.py'); }); + +test('MicroPython + Pyodide ffi', async ({ page }) => { + await page.goto('http://localhost:8080/test/ffi.html'); + await page.waitForSelector('html.mpy.py'); +}); diff --git a/pyscript.core/types/stdlib/pyscript.d.ts b/pyscript.core/types/stdlib/pyscript.d.ts index 47116fa5..648b493e 100644 --- a/pyscript.core/types/stdlib/pyscript.d.ts +++ b/pyscript.core/types/stdlib/pyscript.d.ts @@ -4,6 +4,7 @@ declare namespace _default { "display.py": string; "event_handling.py": string; "fetch.py": string; + "ffi.py": string; "magic_js.py": string; "util.py": string; };