Skip to content

Commit 4429f90

Browse files
committed
python literals via pyodide
1 parent ac4dfe2 commit 4429f90

File tree

5 files changed

+19
-0
lines changed

5 files changed

+19
-0
lines changed

bin/resolve-dependencies

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ const mains = ["unpkg", "jsdelivr", "browser", "main"];
8686
const package = await resolve("leaflet");
8787
console.log(`export const leaflet = dependency("${package.name}", "${package.version}", "${package.export.replace(/-src\.js$/, ".js")}");`);
8888
}
89+
{
90+
const package = await resolve("pyodide");
91+
console.log(`export const pyodide = {resolve: () => "https://cdn.jsdelivr.net/pyodide/v${package.version}/full/pyodide.js"};`);
92+
}
8993
})();
9094

9195
async function resolve(specifier) {

src/dependencies.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ export const topojson = dependency("topojson-client", "3.1.0", "dist/topojson-cl
1919
export const exceljs = dependency("exceljs", "4.3.0", "dist/exceljs.min.js");
2020
export const mermaid = dependency("mermaid", "9.1.1", "dist/mermaid.min.js");
2121
export const leaflet = dependency("leaflet", "1.8.0", "dist/leaflet.js");
22+
export const pyodide = {resolve: () => "https://cdn.jsdelivr.net/pyodide/v0.20.0/full/pyodide.js"};

src/library.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import mermaid from "./mermaid.js";
1010
import Mutable from "./mutable.js";
1111
import now from "./now.js";
1212
import Promises from "./promises/index.js";
13+
import py from "./py.js";
1314
import resolve from "./resolve.js";
1415
import requirer, {requireDefault, setDefaultRequire} from "./require.js";
1516
import SQLite, {SQLiteDatabaseClient} from "./sqlite.js";
@@ -44,6 +45,7 @@ export default Object.assign(Object.defineProperties(function Library(resolver)
4445
Inputs: () => require(inputs.resolve()).then(Inputs => ({...Inputs, file: Inputs.fileOf(AbstractFile)})),
4546
L: () => leaflet(require),
4647
mermaid: () => mermaid(require),
48+
py: () => py(require),
4749
Plot: () => require(plot.resolve()),
4850
require: () => require,
4951
resolve: () => resolve, // deprecated; use async require.resolve instead

src/py.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {pyodide as Pyodide} from "./dependencies.js";
2+
3+
export default async function py(require) {
4+
const pyodide = await (await require(Pyodide.resolve())).loadPyodide();
5+
return async function py() {
6+
const code = String.raw.apply(String, arguments);
7+
await pyodide.loadPackagesFromImports(code);
8+
const value = await pyodide.runPython(code);
9+
return pyodide.isPyProxy(value) ? value.toJs() : value;
10+
};
11+
}

test/index-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ test("new Library returns a library with the expected keys", async t => {
3434
"now",
3535
"olympians",
3636
"penguins",
37+
"py",
3738
"require",
3839
"resolve",
3940
"svg",

0 commit comments

Comments
 (0)