@jupyterlite/pyodide-kernel 0.4.0-beta.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_pypi.d.ts +2 -2
- package/lib/_pypi.js +2 -2
- package/lib/coincident.worker.d.ts +1 -1
- package/lib/coincident.worker.js +4 -4
- package/lib/coincident.worker.js.map +3 -3
- package/lib/comlink.worker.d.ts +8 -0
- package/lib/comlink.worker.js +22 -0
- package/lib/comlink.worker.js.map +7 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/kernel.d.ts +7 -1
- package/lib/kernel.js +39 -19
- package/lib/tokens.d.ts +9 -0
- package/lib/worker.d.ts +6 -0
- package/lib/worker.js +16 -8
- package/package.json +11 -8
- package/pypi/all.json +36 -36
- package/pypi/ipykernel-6.9.2-py3-none-any.whl +0 -0
- package/pypi/{piplite-0.4.0b0-py3-none-any.whl → piplite-0.4.0-py3-none-any.whl} +0 -0
- package/pypi/{pyodide_kernel-0.4.0b0-py3-none-any.whl → pyodide_kernel-0.4.0-py3-none-any.whl} +0 -0
- package/pypi/widgetsnbextension-3.6.6-py3-none-any.whl +0 -0
- package/pypi/widgetsnbextension-4.0.11-py3-none-any.whl +0 -0
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/kernel.d.ts
CHANGED
|
@@ -11,7 +11,6 @@ export declare class PyodideKernel extends BaseKernel implements IKernel {
|
|
|
11
11
|
* @param options The instantiation options for a new PyodideKernel
|
|
12
12
|
*/
|
|
13
13
|
constructor(options: PyodideKernel.IOptions);
|
|
14
|
-
private setupFilesystemAPIs;
|
|
15
14
|
/**
|
|
16
15
|
* Load the worker.
|
|
17
16
|
*
|
|
@@ -21,6 +20,13 @@ export declare class PyodideKernel extends BaseKernel implements IKernel {
|
|
|
21
20
|
* webpack to find it.
|
|
22
21
|
*/
|
|
23
22
|
protected initWorker(options: PyodideKernel.IOptions): Worker;
|
|
23
|
+
/**
|
|
24
|
+
* Initialize the remote kernel.
|
|
25
|
+
* Use coincident if crossOriginIsolated, comlink otherwise
|
|
26
|
+
* See the two following issues for more context:
|
|
27
|
+
* - https://github.com/jupyterlite/jupyterlite/issues/1424
|
|
28
|
+
* - https://github.com/jupyterlite/pyodide-kernel/pull/126
|
|
29
|
+
*/
|
|
24
30
|
protected initRemote(options: PyodideKernel.IOptions): IPyodideWorkerKernel;
|
|
25
31
|
protected initRemoteOptions(options: PyodideKernel.IOptions): IPyodideWorkerKernel.IOptions;
|
|
26
32
|
/**
|
package/lib/kernel.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import coincident from 'coincident';
|
|
2
|
+
import { proxy, wrap } from 'comlink';
|
|
2
3
|
import { PromiseDelegate } from '@lumino/coreutils';
|
|
3
4
|
import { PageConfig } from '@jupyterlab/coreutils';
|
|
4
5
|
import { BaseKernel } from '@jupyterlite/kernel';
|
|
@@ -17,23 +18,8 @@ export class PyodideKernel extends BaseKernel {
|
|
|
17
18
|
super(options);
|
|
18
19
|
this._ready = new PromiseDelegate();
|
|
19
20
|
this._worker = this.initWorker(options);
|
|
20
|
-
this._worker.onmessage = (e) => this._processWorkerMessage(e.data);
|
|
21
21
|
this._remoteKernel = this.initRemote(options);
|
|
22
22
|
this._contentsManager = options.contentsManager;
|
|
23
|
-
this.setupFilesystemAPIs();
|
|
24
|
-
}
|
|
25
|
-
setupFilesystemAPIs() {
|
|
26
|
-
this._remoteKernel.processDriveRequest = async (data) => {
|
|
27
|
-
if (!DriveContentsProcessor) {
|
|
28
|
-
throw new Error('File system calls over Atomics.wait is only supported with jupyterlite>=0.4.0a3');
|
|
29
|
-
}
|
|
30
|
-
if (this._contentsProcessor === undefined) {
|
|
31
|
-
this._contentsProcessor = new DriveContentsProcessor({
|
|
32
|
-
contentsManager: this._contentsManager,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
return await this._contentsProcessor.processDriveRequest(data);
|
|
36
|
-
};
|
|
37
23
|
}
|
|
38
24
|
/**
|
|
39
25
|
* Load the worker.
|
|
@@ -44,12 +30,46 @@ export class PyodideKernel extends BaseKernel {
|
|
|
44
30
|
* webpack to find it.
|
|
45
31
|
*/
|
|
46
32
|
initWorker(options) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
33
|
+
if (crossOriginIsolated) {
|
|
34
|
+
return new Worker(new URL('./coincident.worker.js', import.meta.url), {
|
|
35
|
+
type: 'module',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return new Worker(new URL('./comlink.worker.js', import.meta.url), {
|
|
40
|
+
type: 'module',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
50
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the remote kernel.
|
|
46
|
+
* Use coincident if crossOriginIsolated, comlink otherwise
|
|
47
|
+
* See the two following issues for more context:
|
|
48
|
+
* - https://github.com/jupyterlite/jupyterlite/issues/1424
|
|
49
|
+
* - https://github.com/jupyterlite/pyodide-kernel/pull/126
|
|
50
|
+
*/
|
|
51
51
|
initRemote(options) {
|
|
52
|
-
|
|
52
|
+
let remote;
|
|
53
|
+
if (crossOriginIsolated) {
|
|
54
|
+
remote = coincident(this._worker);
|
|
55
|
+
remote.processWorkerMessage = this._processWorkerMessage.bind(this);
|
|
56
|
+
// The coincident worker uses its own filesystem API:
|
|
57
|
+
remote.processDriveRequest = async (data) => {
|
|
58
|
+
if (!DriveContentsProcessor) {
|
|
59
|
+
throw new Error('File system calls over Atomics.wait is only supported with jupyterlite>=0.4.0a3');
|
|
60
|
+
}
|
|
61
|
+
if (this._contentsProcessor === undefined) {
|
|
62
|
+
this._contentsProcessor = new DriveContentsProcessor({
|
|
63
|
+
contentsManager: this._contentsManager,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return await this._contentsProcessor.processDriveRequest(data);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
remote = wrap(this._worker);
|
|
71
|
+
remote.registerCallback(proxy(this._processWorkerMessage.bind(this)));
|
|
72
|
+
}
|
|
53
73
|
const remoteOptions = this.initRemoteOptions(options);
|
|
54
74
|
remote.initialize(remoteOptions).then(this._ready.resolve.bind(this._ready));
|
|
55
75
|
return remote;
|
package/lib/tokens.d.ts
CHANGED
|
@@ -20,6 +20,15 @@ export interface IPyodideWorkerKernel extends IWorkerKernel {
|
|
|
20
20
|
* @param data
|
|
21
21
|
*/
|
|
22
22
|
processDriveRequest<T extends TDriveMethod>(data: TDriveRequest<T>): TDriveResponse<T>;
|
|
23
|
+
/**
|
|
24
|
+
* Process worker message
|
|
25
|
+
* @param msg
|
|
26
|
+
*/
|
|
27
|
+
processWorkerMessage(msg: any): void;
|
|
28
|
+
/**
|
|
29
|
+
* Register a callback for handling messages from the worker.
|
|
30
|
+
*/
|
|
31
|
+
registerCallback(callback: (msg: any) => void): void;
|
|
23
32
|
}
|
|
24
33
|
/**
|
|
25
34
|
* Deprecated.
|
package/lib/worker.d.ts
CHANGED
|
@@ -27,6 +27,11 @@ export declare class PyodideRemoteKernel {
|
|
|
27
27
|
* @param res The result object from the Pyodide evaluation
|
|
28
28
|
*/
|
|
29
29
|
formatResult(res: any): any;
|
|
30
|
+
/**
|
|
31
|
+
* Register the callback function to send messages from the worker back to the main thread.
|
|
32
|
+
* @param callback the callback to register
|
|
33
|
+
*/
|
|
34
|
+
registerCallback(callback: (msg: any) => void): void;
|
|
30
35
|
/**
|
|
31
36
|
* Makes sure pyodide is ready before continuing, and cache the parent message.
|
|
32
37
|
*/
|
|
@@ -129,4 +134,5 @@ export declare class PyodideRemoteKernel {
|
|
|
129
134
|
protected _stderr_stream: any;
|
|
130
135
|
protected _resolveInputReply: any;
|
|
131
136
|
protected _driveFS: DriveFS | null;
|
|
137
|
+
protected _sendWorkerMessage: (msg: any) => void;
|
|
132
138
|
}
|
package/lib/worker.js
CHANGED
|
@@ -12,6 +12,7 @@ export class PyodideRemoteKernel {
|
|
|
12
12
|
this._localPath = '';
|
|
13
13
|
this._driveName = '';
|
|
14
14
|
this._driveFS = null;
|
|
15
|
+
this._sendWorkerMessage = () => { };
|
|
15
16
|
this._initialized = new Promise((resolve, reject) => {
|
|
16
17
|
this._initializer = { resolve, reject };
|
|
17
18
|
});
|
|
@@ -156,6 +157,13 @@ export class PyodideRemoteKernel {
|
|
|
156
157
|
const results = this.mapToObject(m);
|
|
157
158
|
return results;
|
|
158
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Register the callback function to send messages from the worker back to the main thread.
|
|
162
|
+
* @param callback the callback to register
|
|
163
|
+
*/
|
|
164
|
+
registerCallback(callback) {
|
|
165
|
+
this._sendWorkerMessage = callback;
|
|
166
|
+
}
|
|
159
167
|
/**
|
|
160
168
|
* Makes sure pyodide is ready before continuing, and cache the parent message.
|
|
161
169
|
*/
|
|
@@ -176,7 +184,7 @@ export class PyodideRemoteKernel {
|
|
|
176
184
|
data: this.formatResult(data),
|
|
177
185
|
metadata: this.formatResult(metadata),
|
|
178
186
|
};
|
|
179
|
-
|
|
187
|
+
this._sendWorkerMessage({
|
|
180
188
|
parentHeader: this.formatResult(this._kernel._parent_header)['header'],
|
|
181
189
|
bundle,
|
|
182
190
|
type: 'execute_result',
|
|
@@ -188,7 +196,7 @@ export class PyodideRemoteKernel {
|
|
|
188
196
|
evalue: evalue,
|
|
189
197
|
traceback: traceback,
|
|
190
198
|
};
|
|
191
|
-
|
|
199
|
+
this._sendWorkerMessage({
|
|
192
200
|
parentHeader: this.formatResult(this._kernel._parent_header)['header'],
|
|
193
201
|
bundle,
|
|
194
202
|
type: 'execute_error',
|
|
@@ -198,7 +206,7 @@ export class PyodideRemoteKernel {
|
|
|
198
206
|
const bundle = {
|
|
199
207
|
wait: this.formatResult(wait),
|
|
200
208
|
};
|
|
201
|
-
|
|
209
|
+
this._sendWorkerMessage({
|
|
202
210
|
parentHeader: this.formatResult(this._kernel._parent_header)['header'],
|
|
203
211
|
bundle,
|
|
204
212
|
type: 'clear_output',
|
|
@@ -210,7 +218,7 @@ export class PyodideRemoteKernel {
|
|
|
210
218
|
metadata: this.formatResult(metadata),
|
|
211
219
|
transient: this.formatResult(transient),
|
|
212
220
|
};
|
|
213
|
-
|
|
221
|
+
this._sendWorkerMessage({
|
|
214
222
|
parentHeader: this.formatResult(this._kernel._parent_header)['header'],
|
|
215
223
|
bundle,
|
|
216
224
|
type: 'display_data',
|
|
@@ -222,7 +230,7 @@ export class PyodideRemoteKernel {
|
|
|
222
230
|
metadata: this.formatResult(metadata),
|
|
223
231
|
transient: this.formatResult(transient),
|
|
224
232
|
};
|
|
225
|
-
|
|
233
|
+
this._sendWorkerMessage({
|
|
226
234
|
parentHeader: this.formatResult(this._kernel._parent_header)['header'],
|
|
227
235
|
bundle,
|
|
228
236
|
type: 'update_display_data',
|
|
@@ -233,7 +241,7 @@ export class PyodideRemoteKernel {
|
|
|
233
241
|
name: this.formatResult(name),
|
|
234
242
|
text: this.formatResult(text),
|
|
235
243
|
};
|
|
236
|
-
|
|
244
|
+
this._sendWorkerMessage({
|
|
237
245
|
parentHeader: this.formatResult(this._kernel._parent_header)['header'],
|
|
238
246
|
bundle,
|
|
239
247
|
type: 'stream',
|
|
@@ -355,7 +363,7 @@ export class PyodideRemoteKernel {
|
|
|
355
363
|
prompt,
|
|
356
364
|
password,
|
|
357
365
|
};
|
|
358
|
-
|
|
366
|
+
this._sendWorkerMessage({
|
|
359
367
|
type: 'input_request',
|
|
360
368
|
parentHeader: this.formatResult(this._kernel._parent_header)['header'],
|
|
361
369
|
content,
|
|
@@ -389,7 +397,7 @@ export class PyodideRemoteKernel {
|
|
|
389
397
|
* @param buffers The binary buffers.
|
|
390
398
|
*/
|
|
391
399
|
async sendComm(type, content, metadata, ident, buffers) {
|
|
392
|
-
|
|
400
|
+
this._sendWorkerMessage({
|
|
393
401
|
type: type,
|
|
394
402
|
content: this.formatResult(content),
|
|
395
403
|
metadata: this.formatResult(metadata),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlite/pyodide-kernel",
|
|
3
|
-
"version": "0.4.0
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "JupyterLite - Pyodide Kernel",
|
|
5
5
|
"homepage": "https://github.com/jupyterlite/pyodide-kernel",
|
|
6
6
|
"bugs": {
|
|
@@ -33,11 +33,13 @@
|
|
|
33
33
|
"schema/*.json"
|
|
34
34
|
],
|
|
35
35
|
"scripts": {
|
|
36
|
-
"build": "jlpm build:lib && jlpm build:
|
|
36
|
+
"build": "jlpm build:lib && jlpm build:workers",
|
|
37
37
|
"build:lib": "tsc -b",
|
|
38
38
|
"build:prod": "jlpm build",
|
|
39
39
|
"build:py": "python scripts/generate-wheels-js.py",
|
|
40
|
-
"build:worker": "esbuild --bundle --minify --sourcemap --target=es2019 --format=esm --outfile=lib/coincident.worker.js src/coincident.worker.ts",
|
|
40
|
+
"build:coincident:worker": "esbuild --bundle --minify --sourcemap --target=es2019 --format=esm --outfile=lib/coincident.worker.js src/coincident.worker.ts",
|
|
41
|
+
"build:comlink:worker": "esbuild --bundle --minify --sourcemap --target=es2019 --format=esm --outfile=lib/comlink.worker.js src/comlink.worker.ts",
|
|
42
|
+
"build:workers": "jlpm build:coincident:worker && jlpm build:comlink:worker",
|
|
41
43
|
"dist": "cd ../../dist && npm pack ../packages/pyodide-kernel",
|
|
42
44
|
"clean": "jlpm clean:lib && jlpm clean:py",
|
|
43
45
|
"clean:all": "jlpm clean",
|
|
@@ -53,9 +55,10 @@
|
|
|
53
55
|
},
|
|
54
56
|
"dependencies": {
|
|
55
57
|
"@jupyterlab/coreutils": "^6.1.1",
|
|
56
|
-
"@jupyterlite/contents": "^0.4.0
|
|
57
|
-
"@jupyterlite/kernel": "^0.4.0
|
|
58
|
-
"coincident": "^1.2.3"
|
|
58
|
+
"@jupyterlite/contents": "^0.4.0",
|
|
59
|
+
"@jupyterlite/kernel": "^0.4.0",
|
|
60
|
+
"coincident": "^1.2.3",
|
|
61
|
+
"comlink": "^4.4.1"
|
|
59
62
|
},
|
|
60
63
|
"devDependencies": {
|
|
61
64
|
"@babel/core": "^7.22.17",
|
|
@@ -73,8 +76,8 @@
|
|
|
73
76
|
},
|
|
74
77
|
"pyodide-kernel": {
|
|
75
78
|
"packages": {
|
|
76
|
-
"py/pyodide-kernel": "0.4.
|
|
77
|
-
"py/piplite": "0.4.
|
|
79
|
+
"py/pyodide-kernel": "0.4.0",
|
|
80
|
+
"py/piplite": "0.4.0",
|
|
78
81
|
"py/ipykernel": "6.9.2",
|
|
79
82
|
"py/widgetsnbextension3/widgetsnbextension": "3.6.6",
|
|
80
83
|
"py/widgetsnbextension4/widgetsnbextension": "4.0.11"
|
package/pypi/all.json
CHANGED
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
{
|
|
6
6
|
"comment_text": "",
|
|
7
7
|
"digests": {
|
|
8
|
-
"md5": "
|
|
9
|
-
"sha256": "
|
|
8
|
+
"md5": "41d91a5d672216f1eee2690d6b204b9a",
|
|
9
|
+
"sha256": "b74e6ea29a470bf9ea61f3b763d3f7c1fc31878d1a263143225a6e801717d8f5"
|
|
10
10
|
},
|
|
11
11
|
"downloads": -1,
|
|
12
12
|
"filename": "ipykernel-6.9.2-py3-none-any.whl",
|
|
13
13
|
"has_sig": false,
|
|
14
|
-
"md5_digest": "
|
|
14
|
+
"md5_digest": "41d91a5d672216f1eee2690d6b204b9a",
|
|
15
15
|
"packagetype": "bdist_wheel",
|
|
16
16
|
"python_version": "py3",
|
|
17
17
|
"requires_python": ">=3.10",
|
|
18
|
-
"size":
|
|
19
|
-
"upload_time": "2024-
|
|
20
|
-
"upload_time_iso_8601": "2024-
|
|
18
|
+
"size": 2731,
|
|
19
|
+
"upload_time": "2024-07-25T09:54:06.531667Z",
|
|
20
|
+
"upload_time_iso_8601": "2024-07-25T09:54:06.531667Z",
|
|
21
21
|
"url": "./ipykernel-6.9.2-py3-none-any.whl",
|
|
22
22
|
"yanked": false,
|
|
23
23
|
"yanked_reason": null
|
|
@@ -27,24 +27,24 @@
|
|
|
27
27
|
},
|
|
28
28
|
"piplite": {
|
|
29
29
|
"releases": {
|
|
30
|
-
"0.4.
|
|
30
|
+
"0.4.0": [
|
|
31
31
|
{
|
|
32
32
|
"comment_text": "",
|
|
33
33
|
"digests": {
|
|
34
|
-
"md5": "
|
|
35
|
-
"sha256": "
|
|
34
|
+
"md5": "9856cd6aac0fa5e1dc8d85738fd3e7bc",
|
|
35
|
+
"sha256": "21247b118751ba50ef51caf4e062226deacd64125e41189d1da8710b9f2d61fb"
|
|
36
36
|
},
|
|
37
37
|
"downloads": -1,
|
|
38
|
-
"filename": "piplite-0.4.
|
|
38
|
+
"filename": "piplite-0.4.0-py3-none-any.whl",
|
|
39
39
|
"has_sig": false,
|
|
40
|
-
"md5_digest": "
|
|
40
|
+
"md5_digest": "9856cd6aac0fa5e1dc8d85738fd3e7bc",
|
|
41
41
|
"packagetype": "bdist_wheel",
|
|
42
42
|
"python_version": "py3",
|
|
43
43
|
"requires_python": "<3.12,>=3.11",
|
|
44
|
-
"size":
|
|
45
|
-
"upload_time": "2024-
|
|
46
|
-
"upload_time_iso_8601": "2024-
|
|
47
|
-
"url": "./piplite-0.4.
|
|
44
|
+
"size": 7168,
|
|
45
|
+
"upload_time": "2024-07-25T09:54:06.531667Z",
|
|
46
|
+
"upload_time_iso_8601": "2024-07-25T09:54:06.531667Z",
|
|
47
|
+
"url": "./piplite-0.4.0-py3-none-any.whl",
|
|
48
48
|
"yanked": false,
|
|
49
49
|
"yanked_reason": null
|
|
50
50
|
}
|
|
@@ -53,24 +53,24 @@
|
|
|
53
53
|
},
|
|
54
54
|
"pyodide-kernel": {
|
|
55
55
|
"releases": {
|
|
56
|
-
"0.4.
|
|
56
|
+
"0.4.0": [
|
|
57
57
|
{
|
|
58
58
|
"comment_text": "",
|
|
59
59
|
"digests": {
|
|
60
|
-
"md5": "
|
|
61
|
-
"sha256": "
|
|
60
|
+
"md5": "9c575f1068ae269784762c65e49c0bba",
|
|
61
|
+
"sha256": "7ebfacac19ed8c652f1c767cbd7c8f0df49489dd38a56e4192cba386007e7002"
|
|
62
62
|
},
|
|
63
63
|
"downloads": -1,
|
|
64
|
-
"filename": "pyodide_kernel-0.4.
|
|
64
|
+
"filename": "pyodide_kernel-0.4.0-py3-none-any.whl",
|
|
65
65
|
"has_sig": false,
|
|
66
|
-
"md5_digest": "
|
|
66
|
+
"md5_digest": "9c575f1068ae269784762c65e49c0bba",
|
|
67
67
|
"packagetype": "bdist_wheel",
|
|
68
68
|
"python_version": "py3",
|
|
69
69
|
"requires_python": "<3.12,>=3.11",
|
|
70
|
-
"size":
|
|
71
|
-
"upload_time": "2024-
|
|
72
|
-
"upload_time_iso_8601": "2024-
|
|
73
|
-
"url": "./pyodide_kernel-0.4.
|
|
70
|
+
"size": 11006,
|
|
71
|
+
"upload_time": "2024-07-25T09:54:06.531667Z",
|
|
72
|
+
"upload_time_iso_8601": "2024-07-25T09:54:06.531667Z",
|
|
73
|
+
"url": "./pyodide_kernel-0.4.0-py3-none-any.whl",
|
|
74
74
|
"yanked": false,
|
|
75
75
|
"yanked_reason": null
|
|
76
76
|
}
|
|
@@ -83,19 +83,19 @@
|
|
|
83
83
|
{
|
|
84
84
|
"comment_text": "",
|
|
85
85
|
"digests": {
|
|
86
|
-
"md5": "
|
|
87
|
-
"sha256": "
|
|
86
|
+
"md5": "8b6189096c0e849fd9ee709a1bf68ccd",
|
|
87
|
+
"sha256": "2769791ce989ce7bbbc73e384f1294a589fe4e143cd8fbeef14a0bdbfa9fe0d0"
|
|
88
88
|
},
|
|
89
89
|
"downloads": -1,
|
|
90
90
|
"filename": "widgetsnbextension-3.6.6-py3-none-any.whl",
|
|
91
91
|
"has_sig": false,
|
|
92
|
-
"md5_digest": "
|
|
92
|
+
"md5_digest": "8b6189096c0e849fd9ee709a1bf68ccd",
|
|
93
93
|
"packagetype": "bdist_wheel",
|
|
94
94
|
"python_version": "py3",
|
|
95
95
|
"requires_python": "<3.12,>=3.11",
|
|
96
|
-
"size":
|
|
97
|
-
"upload_time": "2024-
|
|
98
|
-
"upload_time_iso_8601": "2024-
|
|
96
|
+
"size": 2347,
|
|
97
|
+
"upload_time": "2024-07-25T09:54:06.531667Z",
|
|
98
|
+
"upload_time_iso_8601": "2024-07-25T09:54:06.531667Z",
|
|
99
99
|
"url": "./widgetsnbextension-3.6.6-py3-none-any.whl",
|
|
100
100
|
"yanked": false,
|
|
101
101
|
"yanked_reason": null
|
|
@@ -105,19 +105,19 @@
|
|
|
105
105
|
{
|
|
106
106
|
"comment_text": "",
|
|
107
107
|
"digests": {
|
|
108
|
-
"md5": "
|
|
109
|
-
"sha256": "
|
|
108
|
+
"md5": "2753403a6332a3438d08a180c3b1d69e",
|
|
109
|
+
"sha256": "db17bae7ab7794a12ecc187135e77e3551f18ba2e2d6454ea80e6fa75a03b28f"
|
|
110
110
|
},
|
|
111
111
|
"downloads": -1,
|
|
112
112
|
"filename": "widgetsnbextension-4.0.11-py3-none-any.whl",
|
|
113
113
|
"has_sig": false,
|
|
114
|
-
"md5_digest": "
|
|
114
|
+
"md5_digest": "2753403a6332a3438d08a180c3b1d69e",
|
|
115
115
|
"packagetype": "bdist_wheel",
|
|
116
116
|
"python_version": "py3",
|
|
117
117
|
"requires_python": "<3.12,>=3.11",
|
|
118
|
-
"size":
|
|
119
|
-
"upload_time": "2024-
|
|
120
|
-
"upload_time_iso_8601": "2024-
|
|
118
|
+
"size": 2354,
|
|
119
|
+
"upload_time": "2024-07-25T09:54:06.531667Z",
|
|
120
|
+
"upload_time_iso_8601": "2024-07-25T09:54:06.531667Z",
|
|
121
121
|
"url": "./widgetsnbextension-4.0.11-py3-none-any.whl",
|
|
122
122
|
"yanked": false,
|
|
123
123
|
"yanked_reason": null
|
|
Binary file
|
|
index 531cd09..13e4a6b 100644
|
|
|
Binary file
|
package/pypi/{pyodide_kernel-0.4.0b0-py3-none-any.whl → pyodide_kernel-0.4.0-py3-none-any.whl}
RENAMED
|
index 93faf0f..ca2510d 100644
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|