Skip to content

Commit dc96dae

Browse files
committed
Add index_urls parsing for Pyodide
1 parent 4a9e039 commit dc96dae

File tree

12 files changed

+172
-122
lines changed

12 files changed

+172
-122
lines changed

docs/index.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/index.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/zip-Bf48tRr5.js

-2
This file was deleted.

docs/zip-Bf48tRr5.js.map

-1
This file was deleted.

docs/zip-CFEEYRfx.js

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/zip-CFEEYRfx.js.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

esm/interpreter/pyodide.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ const applyOverride = () => {
7878
};
7979

8080
const progress = createProgress('py');
81+
const indexURLs = new WeakMap();
8182

8283
export default {
8384
type,
@@ -88,7 +89,7 @@ export default {
8889
if (!RUNNING_IN_WORKER && config.experimental_create_proxy === 'auto')
8990
applyOverride();
9091
progress('Loading Pyodide');
91-
let { packages } = config;
92+
let { packages, index_urls } = config;
9293
progress('Loading Storage');
9394
const indexURL = url.slice(0, url.lastIndexOf('/'));
9495
// each pyodide version shares its own cache
@@ -123,6 +124,7 @@ export default {
123124
loadPyodide({ stderr, stdout, ...options }),
124125
);
125126
const py_imports = importPackages.bind(interpreter);
127+
if (index_urls) indexURLs.set(interpreter, index_urls);
126128
loader.set(interpreter, py_imports);
127129
await loadProgress(this, progress, interpreter, config, baseURL);
128130
// if cache wasn't know, import and freeze it for the next time
@@ -176,6 +178,7 @@ async function importPackages(packages, storage, save = false) {
176178
console.log = _log;
177179
await this.loadPackage('micropip');
178180
const micropip = this.pyimport('micropip');
181+
if (indexURLs.has(this)) micropip.set_index_urls(indexURLs.get(this));
179182
await micropip.install(packages, { keep_going: true });
180183
console.log = log;
181184
if (save && (storage instanceof IDBMapSync)) {

package-lock.json

+137-113
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"@playwright/test": "^1.48.2",
4545
"@rollup/plugin-node-resolve": "^15.3.0",
4646
"@rollup/plugin-terser": "^0.4.4",
47-
"@zip.js/zip.js": "^2.7.52",
47+
"@zip.js/zip.js": "^2.7.53",
4848
"c8": "^10.1.2",
4949
"chokidar": "^4.0.1",
5050
"eslint": "^9.13.0",
@@ -88,6 +88,6 @@
8888
"to-json-callback": "^0.1.1"
8989
},
9090
"worker": {
91-
"blob": "sha256-52erKRHjBwcn2bnRpQFvjQxkigDMnQm/sOQdyX/Bc08="
91+
"blob": "sha256-q3F8S0fpbtQrs9PkgOIbLQeYahmzu3z2eABsNHH1zMo="
9292
}
9393
}

test/integration.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
66
<title>polyscript integration tests</title>
77
</head>
8-
<body><ul><li><strong>micropython</strong><ul><li><a href="/test/integration/interpreter/micropython/bootstrap.html">bootstrap</a></li><li><a href="/test/integration/interpreter/micropython/config-json.html">config-json</a></li><li><a href="/test/integration/interpreter/micropython/config-object.html">config-object</a></li><li><a href="/test/integration/interpreter/micropython/current-script.html">current-script</a></li><li><a href="/test/integration/interpreter/micropython/custom-hooks.html">custom-hooks</a></li><li><a href="/test/integration/interpreter/micropython/fetch.html">fetch</a></li><li><a href="/test/integration/interpreter/micropython/interpreter-local.html">interpreter-local</a></li><li><a href="/test/integration/interpreter/micropython/mip.html">mip</a></li><li><a href="/test/integration/interpreter/micropython/no-type.html">no-type</a></li><li><a href="/test/integration/interpreter/micropython/ready-done.html">ready-done</a></li><li><a href="/test/integration/interpreter/micropython/storage.html">storage</a></li><li><a href="/test/integration/interpreter/micropython/worker-attribute.html">worker-attribute</a></li><li><a href="/test/integration/interpreter/micropython/worker-bad.html">worker-bad</a></li><li><a href="/test/integration/interpreter/micropython/worker-empty-attribute.html">worker-empty-attribute</a></li><li><a href="/test/integration/interpreter/micropython/worker-error.html">worker-error</a></li><li><a href="/test/integration/interpreter/micropython/worker-lua.html">worker-lua</a></li><li><a href="/test/integration/interpreter/micropython/worker-tag.html">worker-tag</a></li><li><a href="/test/integration/interpreter/micropython/worker-window.html">worker-window</a></li><li><a href="/test/integration/interpreter/micropython/worker.html">worker</a></li><li><a href="/test/integration/interpreter/micropython/workers.html">workers</a></li></ul><li><strong>pyodide</strong><ul><li><a href="/test/integration/interpreter/pyodide/bootstrap.html">bootstrap</a></li><li><a href="/test/integration/interpreter/pyodide/button.html">button</a></li><li><a href="/test/integration/interpreter/pyodide/config-json.html">config-json</a></li><li><a href="/test/integration/interpreter/pyodide/fetch.html">fetch</a></li><li><a href="/test/integration/interpreter/pyodide/sync.html">sync</a></li><li><a href="/test/integration/interpreter/pyodide/worker-error.html">worker-error</a></li><li><a href="/test/integration/interpreter/pyodide/worker-transform.html">worker-transform</a></li><li><a href="/test/integration/interpreter/pyodide/worker.html">worker</a></li></ul><li><strong>ruby-wasm-wasi</strong><ul><li><a href="/test/integration/interpreter/ruby-wasm-wasi/bootstrap.html">bootstrap</a></li></ul><li><strong>wasmoon</strong><ul><li><a href="/test/integration/interpreter/wasmoon/bootstrap.html">bootstrap</a></li><li><a href="/test/integration/interpreter/wasmoon/worker.html">worker</a></li></ul><li><strong>webr</strong><ul><li><a href="/test/integration/interpreter/webr/just-click.html">just-click</a></li></ul></ul></body>
8+
<body><ul><li><strong>micropython</strong><ul><li><a href="/test/integration/interpreter/micropython/bootstrap.html">bootstrap</a></li><li><a href="/test/integration/interpreter/micropython/config-json.html">config-json</a></li><li><a href="/test/integration/interpreter/micropython/config-object.html">config-object</a></li><li><a href="/test/integration/interpreter/micropython/current-script.html">current-script</a></li><li><a href="/test/integration/interpreter/micropython/custom-hooks.html">custom-hooks</a></li><li><a href="/test/integration/interpreter/micropython/fetch.html">fetch</a></li><li><a href="/test/integration/interpreter/micropython/interpreter-local.html">interpreter-local</a></li><li><a href="/test/integration/interpreter/micropython/mip.html">mip</a></li><li><a href="/test/integration/interpreter/micropython/no-type.html">no-type</a></li><li><a href="/test/integration/interpreter/micropython/ready-done.html">ready-done</a></li><li><a href="/test/integration/interpreter/micropython/storage.html">storage</a></li><li><a href="/test/integration/interpreter/micropython/worker-attribute.html">worker-attribute</a></li><li><a href="/test/integration/interpreter/micropython/worker-bad.html">worker-bad</a></li><li><a href="/test/integration/interpreter/micropython/worker-empty-attribute.html">worker-empty-attribute</a></li><li><a href="/test/integration/interpreter/micropython/worker-error.html">worker-error</a></li><li><a href="/test/integration/interpreter/micropython/worker-lua.html">worker-lua</a></li><li><a href="/test/integration/interpreter/micropython/worker-tag.html">worker-tag</a></li><li><a href="/test/integration/interpreter/micropython/worker-window.html">worker-window</a></li><li><a href="/test/integration/interpreter/micropython/worker.html">worker</a></li><li><a href="/test/integration/interpreter/micropython/workers.html">workers</a></li></ul><li><strong>pyodide</strong><ul><li><a href="/test/integration/interpreter/pyodide/bootstrap.html">bootstrap</a></li><li><a href="/test/integration/interpreter/pyodide/button.html">button</a></li><li><a href="/test/integration/interpreter/pyodide/config-json.html">config-json</a></li><li><a href="/test/integration/interpreter/pyodide/fetch.html">fetch</a></li><li><a href="/test/integration/interpreter/pyodide/index_urls.html">index_urls</a></li><li><a href="/test/integration/interpreter/pyodide/sync.html">sync</a></li><li><a href="/test/integration/interpreter/pyodide/worker-error.html">worker-error</a></li><li><a href="/test/integration/interpreter/pyodide/worker-transform.html">worker-transform</a></li><li><a href="/test/integration/interpreter/pyodide/worker.html">worker</a></li></ul><li><strong>ruby-wasm-wasi</strong><ul><li><a href="/test/integration/interpreter/ruby-wasm-wasi/bootstrap.html">bootstrap</a></li></ul><li><strong>wasmoon</strong><ul><li><a href="/test/integration/interpreter/wasmoon/bootstrap.html">bootstrap</a></li><li><a href="/test/integration/interpreter/wasmoon/worker.html">worker</a></li></ul><li><strong>webr</strong><ul><li><a href="/test/integration/interpreter/webr/just-click.html">just-click</a></li></ul></ul></body>
99
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<script type="module">
7+
import { init } from '../utils.js';
8+
init('pyodide');
9+
</script>
10+
</head>
11+
<body>
12+
<script type="pyodide" config='{"packages":["test_foo"],"index_urls":["https://test.pypi.org/simple"]}'>
13+
import js
14+
import test_foo
15+
js.document.documentElement.classList.add(test_foo.__name__)
16+
</script>
17+
</body>
18+
</html>

test/integration/pyodide.js

+5
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,9 @@ export default (playwright, baseURL) => {
3333
test('Pyodide transform', python.error(playwright, baseURL));
3434

3535
test('Pyodide events ready', python.disabledUntilReady(playwright, baseURL));
36+
37+
test('Pyodide index_urls', async ({ page }) => {
38+
await page.goto(`${baseURL}/index_urls.html`);
39+
await page.waitForSelector('html.test_foo');
40+
});
3641
};

0 commit comments

Comments
 (0)