From 2cf408aa8679b4b9d9786cfbab14f2f910683ca6 Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Fri, 13 Sep 2024 14:32:23 +0200 Subject: [PATCH 01/12] Passing a custom link of empack_env_meta json --- src/tokens.ts | 1 + src/worker.ts | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/tokens.ts b/src/tokens.ts index bf41bdc7..8731edb5 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -85,5 +85,6 @@ export namespace IXeusWorkerKernel { baseUrl: string; kernelSpec: any; mountDrive: boolean; + empack_env_meta_link: string; } } diff --git a/src/worker.ts b/src/worker.ts index 60c91b4f..7776d383 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -103,7 +103,7 @@ export class XeusRemoteKernel { } async initialize(options: IXeusWorkerKernel.IOptions): Promise { - const { baseUrl, kernelSpec } = options; + const { baseUrl, kernelSpec, empack_env_meta_link } = options; // location of the kernel binary on the server const binary_js = URLExt.join(baseUrl, kernelSpec.argv[0]); const binary_wasm = binary_js.replace('.js', '.wasm'); @@ -134,7 +134,8 @@ export class XeusRemoteKernel { await globalThis.Module['async_init']( kernel_root_url, pkg_root_url, - verbose + verbose, + empack_env_meta_link ); } From 64398cc8872bce753ef37d07b4dd9172eae70c18 Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Mon, 16 Sep 2024 10:33:24 +0200 Subject: [PATCH 02/12] Passing the link --- src/index.ts | 10 ++++++---- src/tokens.ts | 2 +- src/web_worker_kernel.ts | 8 ++++++-- src/worker.ts | 3 ++- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/index.ts b/src/index.ts index 44d28649..23e37134 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,7 +9,7 @@ import { JupyterLiteServerPlugin } from '@jupyterlite/server'; import { IBroadcastChannelWrapper } from '@jupyterlite/contents'; -import { IKernel, IKernelSpecs } from '@jupyterlite/kernel'; +import { IKernel, IKernelSpecs, IEmpackEnvMetaFile } from '@jupyterlite/kernel'; import { WebWorkerKernel } from './web_worker_kernel'; @@ -34,12 +34,13 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { id: `@jupyterlite/xeus-${kernel}:register`, autoStart: true, requires: [IKernelSpecs], - optional: [IServiceWorkerManager, IBroadcastChannelWrapper], + optional: [IServiceWorkerManager, IBroadcastChannelWrapper, IEmpackEnvMetaFile], activate: ( app: JupyterLiteServer, kernelspecs: IKernelSpecs, serviceWorker?: IServiceWorkerManager, - broadcastChannel?: IBroadcastChannelWrapper + broadcastChannel?: IBroadcastChannelWrapper, + empackEnvMetaFile?: IEmpackEnvMetaFile ) => { // Fetch kernel spec const kernelspec = getJson('xeus/kernels/' + kernel + '/kernel.json'); @@ -76,7 +77,8 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { ...options, contentsManager, mountDrive, - kernelSpec: kernelspec + kernelSpec: kernelspec, + empackEnvMetaLink:empackEnvMetaFile? empackEnvMetaFile.getLink(): '' }); } }); diff --git a/src/tokens.ts b/src/tokens.ts index 8731edb5..f2caf05c 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -85,6 +85,6 @@ export namespace IXeusWorkerKernel { baseUrl: string; kernelSpec: any; mountDrive: boolean; - empack_env_meta_link: string; + empackEnvMetaLink?: string; } } diff --git a/src/web_worker_kernel.ts b/src/web_worker_kernel.ts index c0b34cde..146e0f15 100644 --- a/src/web_worker_kernel.ts +++ b/src/web_worker_kernel.ts @@ -29,7 +29,7 @@ export class WebWorkerKernel implements IKernel { * @param options The instantiation options for a new WebWorkerKernel */ constructor(options: WebWorkerKernel.IOptions) { - const { id, name, sendMessage, location, kernelSpec, contentsManager } = + const { id, name, sendMessage, location, kernelSpec, contentsManager, empackEnvMetaLink = '' } = options; this._id = id; this._name = name; @@ -39,6 +39,7 @@ export class WebWorkerKernel implements IKernel { this._sendMessage = sendMessage; this._worker = this.initWorker(options); this._remoteKernel = this.initRemote(options); + this._empackEnvMetaLink = empackEnvMetaLink; this.initFileSystem(options); } @@ -103,7 +104,8 @@ export class WebWorkerKernel implements IKernel { .initialize({ kernelSpec: this._kernelSpec, baseUrl: PageConfig.getBaseUrl(), - mountDrive: options.mountDrive + mountDrive: options.mountDrive, + empackEnvMetaLink: this._empackEnvMetaLink, }) .then(this._ready.resolve.bind(this._ready)); @@ -290,6 +292,7 @@ export class WebWorkerKernel implements IKernel { | undefined = undefined; private _parent: KernelMessage.IMessage | undefined = undefined; private _ready = new PromiseDelegate(); + private _empackEnvMetaLink: string; } /** @@ -303,5 +306,6 @@ export namespace WebWorkerKernel { contentsManager: Contents.IManager; mountDrive: boolean; kernelSpec: any; + empackEnvMetaLink?: string; } } diff --git a/src/worker.ts b/src/worker.ts index 7776d383..14ac49a1 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -103,7 +103,7 @@ export class XeusRemoteKernel { } async initialize(options: IXeusWorkerKernel.IOptions): Promise { - const { baseUrl, kernelSpec, empack_env_meta_link } = options; + const { baseUrl, kernelSpec, empackEnvMetaLink } = options; // location of the kernel binary on the server const binary_js = URLExt.join(baseUrl, kernelSpec.argv[0]); const binary_wasm = binary_js.replace('.js', '.wasm'); @@ -131,6 +131,7 @@ export class XeusRemoteKernel { ); const pkg_root_url = URLExt.join(baseUrl, 'xeus/kernel_packages'); const verbose = true; + const empack_env_meta_link = empackEnvMetaLink; await globalThis.Module['async_init']( kernel_root_url, pkg_root_url, From 7796740e987a29b6c46784e1ebfcfe55475423bf Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Mon, 16 Sep 2024 14:44:22 +0200 Subject: [PATCH 03/12] Move plugin with a link --- src/index.ts | 24 +++++++++++++++++++++++- src/tokens.ts | 10 ++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 23e37134..bac8fb2d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,9 +9,10 @@ import { JupyterLiteServerPlugin } from '@jupyterlite/server'; import { IBroadcastChannelWrapper } from '@jupyterlite/contents'; -import { IKernel, IKernelSpecs, IEmpackEnvMetaFile } from '@jupyterlite/kernel'; +import { IKernel, IKernelSpecs } from '@jupyterlite/kernel'; import { WebWorkerKernel } from './web_worker_kernel'; +import { IEmpackEnvMetaFile } from './tokens'; function getJson(url: string) { const json_url = URLExt.join(PageConfig.getBaseUrl(), url); @@ -86,4 +87,25 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { }; }); +const empackEnvMetaPlugin: JupyterLiteServerPlugin = { + id: `@jupyterlite/xeus-python:empack-env-meta`, + autoStart: true, + provides: IEmpackEnvMetaFile, + activate: (): IEmpackEnvMetaFile => { + return { + getLink(){ + let empackEnvMetaLink ='' + const searchParams = new URL(location.href).searchParams; + + if (searchParams && searchParams.get('empack_env_meta')) { + empackEnvMetaLink = searchParams.get('empack_env_meta') as string; + } + return empackEnvMetaLink; + } + }; + }, +}; + +plugins.push(empackEnvMetaPlugin); + export default plugins; diff --git a/src/tokens.ts b/src/tokens.ts index f2caf05c..76b87306 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -12,6 +12,7 @@ import { } from '@jupyterlite/contents'; import { IWorkerKernel } from '@jupyterlite/kernel'; +import { Token } from '@lumino/coreutils'; /** * An interface for Xeus workers. @@ -88,3 +89,12 @@ export namespace IXeusWorkerKernel { empackEnvMetaLink?: string; } } + +export interface IEmpackEnvMetaFile { + /** + * Get empack_env_meta link. + */ + getLink:()=> string; +} + +export const IEmpackEnvMetaFile = new Token('@jupyterlite/xeus-python:IEmpackEnvMetaFile'); From 09282149d3357da6431bafb08dfdac07360d9a55 Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Tue, 17 Sep 2024 15:34:08 +0200 Subject: [PATCH 04/12] Fix typescript error on a plugin --- src/index.ts | 9 +++++---- src/tokens.ts | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index bac8fb2d..57afc67c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,7 +30,7 @@ try { throw err; } -const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { +const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { return { id: `@jupyterlite/xeus-${kernel}:register`, autoStart: true, @@ -73,13 +73,14 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { `${kernelspec.name} contents will NOT be synced with Jupyter Contents` ); } + const link = empackEnvMetaFile ? await empackEnvMetaFile.getLink(): ''; return new WebWorkerKernel({ ...options, contentsManager, mountDrive, kernelSpec: kernelspec, - empackEnvMetaLink:empackEnvMetaFile? empackEnvMetaFile.getLink(): '' + empackEnvMetaLink: link }); } }); @@ -87,13 +88,13 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { }; }); -const empackEnvMetaPlugin: JupyterLiteServerPlugin = { +const empackEnvMetaPlugin: JupyterLiteServerPlugin = { id: `@jupyterlite/xeus-python:empack-env-meta`, autoStart: true, provides: IEmpackEnvMetaFile, activate: (): IEmpackEnvMetaFile => { return { - getLink(){ + getLink: async () => { let empackEnvMetaLink ='' const searchParams = new URL(location.href).searchParams; diff --git a/src/tokens.ts b/src/tokens.ts index 76b87306..970aab16 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -94,7 +94,7 @@ export interface IEmpackEnvMetaFile { /** * Get empack_env_meta link. */ - getLink:()=> string; + getLink: () => Promise; } export const IEmpackEnvMetaFile = new Token('@jupyterlite/xeus-python:IEmpackEnvMetaFile'); From 64de4d3490000ecbd7c77334155036973a02b5ec Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Fri, 20 Sep 2024 15:55:29 +0200 Subject: [PATCH 05/12] Fix rewriting a link --- src/index.ts | 4 ++-- src/web_worker_kernel.ts | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 57afc67c..2babcaae 100644 --- a/src/index.ts +++ b/src/index.ts @@ -55,7 +55,6 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { @@ -74,7 +73,8 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin; } + console.log('remote worker'); + console.log('this._empackEnvMetaLink'); + console.log(this._empackEnvMetaLink); remote .initialize({ kernelSpec: this._kernelSpec, @@ -292,7 +295,7 @@ export class WebWorkerKernel implements IKernel { | undefined = undefined; private _parent: KernelMessage.IMessage | undefined = undefined; private _ready = new PromiseDelegate(); - private _empackEnvMetaLink: string; + private _empackEnvMetaLink: string | undefined; } /** @@ -306,6 +309,6 @@ export namespace WebWorkerKernel { contentsManager: Contents.IManager; mountDrive: boolean; kernelSpec: any; - empackEnvMetaLink?: string; + empackEnvMetaLink?: string | undefined; } } From 85b2beec0758be6eebeb03499a264fe70614f5cc Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Fri, 20 Sep 2024 17:17:06 +0200 Subject: [PATCH 06/12] Fix passing a link --- src/web_worker_kernel.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/web_worker_kernel.ts b/src/web_worker_kernel.ts index 68d15a03..8cc9c85b 100644 --- a/src/web_worker_kernel.ts +++ b/src/web_worker_kernel.ts @@ -37,10 +37,9 @@ export class WebWorkerKernel implements IKernel { this._kernelSpec = kernelSpec; this._contentsManager = contentsManager; this._sendMessage = sendMessage; + this._empackEnvMetaLink = empackEnvMetaLink; this._worker = this.initWorker(options); this._remoteKernel = this.initRemote(options); - this._empackEnvMetaLink = empackEnvMetaLink; - this.initFileSystem(options); } @@ -100,7 +99,7 @@ export class WebWorkerKernel implements IKernel { }; remote = wrap(this._worker) as Remote; } - console.log('remote worker'); + console.log('this._empackEnvMetaLink'); console.log(this._empackEnvMetaLink); remote From 290236465a14f469d70e058559e66b2df8c8f089 Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Wed, 25 Sep 2024 14:14:01 +0200 Subject: [PATCH 07/12] Remove console.log --- src/index.ts | 3 +-- src/web_worker_kernel.ts | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 2babcaae..37044976 100644 --- a/src/index.ts +++ b/src/index.ts @@ -73,8 +73,7 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin; } - console.log('this._empackEnvMetaLink'); - console.log(this._empackEnvMetaLink); remote .initialize({ kernelSpec: this._kernelSpec, From e323d88df4f9cf953a59c75f992282194d2525bd Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Thu, 26 Sep 2024 21:18:39 +0200 Subject: [PATCH 08/12] Update plugin --- src/index.ts | 16 +++++++--------- src/tokens.ts | 2 +- src/worker.ts | 6 ++---- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/index.ts b/src/index.ts index 37044976..846701b2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -72,7 +72,7 @@ const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin = { provides: IEmpackEnvMetaFile, activate: (): IEmpackEnvMetaFile => { return { - getLink: async () => { - let empackEnvMetaLink ='' - const searchParams = new URL(location.href).searchParams; - - if (searchParams && searchParams.get('empack_env_meta')) { - empackEnvMetaLink = searchParams.get('empack_env_meta') as string; - } - return empackEnvMetaLink; + getLink: async (kernel?: string) => { + const kernel_root_url = URLExt.join( + PageConfig.getBaseUrl(), + `xeus/kernels/${kernel}` + ); + return `${kernel_root_url}/empack_env_meta.json`; } }; }, diff --git a/src/tokens.ts b/src/tokens.ts index 970aab16..37434700 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -94,7 +94,7 @@ export interface IEmpackEnvMetaFile { /** * Get empack_env_meta link. */ - getLink: () => Promise; + getLink: (kernel?: string) => Promise; } export const IEmpackEnvMetaFile = new Token('@jupyterlite/xeus-python:IEmpackEnvMetaFile'); diff --git a/src/worker.ts b/src/worker.ts index 14ac49a1..1e25b50b 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -125,18 +125,16 @@ export class XeusRemoteKernel { // This function is usually implemented in the pre/post.js // in the emscripten build of that kernel if (globalThis.Module['async_init'] !== undefined) { - const kernel_root_url = URLExt.join( + const kernel_root_url = empackEnvMetaLink ? empackEnvMetaLink : URLExt.join( baseUrl, `xeus/kernels/${kernelSpec.dir}` ); const pkg_root_url = URLExt.join(baseUrl, 'xeus/kernel_packages'); const verbose = true; - const empack_env_meta_link = empackEnvMetaLink; await globalThis.Module['async_init']( kernel_root_url, pkg_root_url, - verbose, - empack_env_meta_link + verbose ); } From f061568a52efbf447aa7512cce146f863161fd14 Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Fri, 27 Sep 2024 13:56:31 +0200 Subject: [PATCH 09/12] fix passing a host where empack_env_meta.json file is saved --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 846701b2..682c1c8d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -98,7 +98,7 @@ const empackEnvMetaPlugin: JupyterLiteServerPlugin = { PageConfig.getBaseUrl(), `xeus/kernels/${kernel}` ); - return `${kernel_root_url}/empack_env_meta.json`; + return `${kernel_root_url}`; } }; }, From 0c6866847a402adf1d331172c4ca7694163fe5b3 Mon Sep 17 00:00:00 2001 From: Duc Trung LE Date: Tue, 15 Oct 2024 12:05:50 +0200 Subject: [PATCH 10/12] Add XeusAddon.package_url_factory config --- jupyterlite_xeus/add_on.py | 13 +++- src/index.ts | 126 ++++++++++++++++++++----------------- src/tokens.ts | 4 +- src/web_worker_kernel.ts | 13 +++- src/worker.ts | 7 +-- 5 files changed, 94 insertions(+), 69 deletions(-) diff --git a/jupyterlite_xeus/add_on.py b/jupyterlite_xeus/add_on.py index 39f77da8..b315fb9b 100644 --- a/jupyterlite_xeus/add_on.py +++ b/jupyterlite_xeus/add_on.py @@ -1,4 +1,5 @@ """a JupyterLite addon for creating the env for xeus kernels""" + import json import os from pathlib import Path @@ -18,7 +19,7 @@ SHARE_LABEXTENSIONS, UTF8, ) -from traitlets import Bool, List, Unicode +from traitlets import Bool, Callable, List, Unicode from .create_conda_env import ( create_conda_env_from_env_file, @@ -102,6 +103,13 @@ class XeusAddon(FederatedExtensionAddon): description="A comma-separated list of mount points, in the form : to mount in the wasm prefix", ) + package_url_factory = Callable( + None, + allow_none=True, + config=True, + description="Factory to generate package download URL from package metadata. This is used to load python packages from external host", + ) + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.xeus_output_dir = Path(self.manager.output_dir) / "xeus" @@ -290,6 +298,7 @@ def pack_prefix(self, kernel_dir): relocate_prefix="/", outdir=out_path, use_cache=False, + package_url_factory=self.package_url_factory, **pack_kwargs, ) @@ -430,4 +439,4 @@ def dedupe_federated_extensions(self, config): if os.path.exists(self.output_extensions / ext["name"] / ext["load"]): named[ext["name"]] = ext - config[FEDERATED_EXTENSIONS] = sorted(named.values(), key=lambda x: x["name"]) + config[FEDERATED_EXTENSIONS] = sorted(named.values(), key=lambda x: x["name"]) \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 682c1c8d..fefd46ba 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,78 +30,86 @@ try { throw err; } -const plugins = kernel_list.map((kernel): JupyterLiteServerPlugin => { - return { - id: `@jupyterlite/xeus-${kernel}:register`, - autoStart: true, - requires: [IKernelSpecs], - optional: [IServiceWorkerManager, IBroadcastChannelWrapper, IEmpackEnvMetaFile], - activate: ( - app: JupyterLiteServer, - kernelspecs: IKernelSpecs, - serviceWorker?: IServiceWorkerManager, - broadcastChannel?: IBroadcastChannelWrapper, - empackEnvMetaFile?: IEmpackEnvMetaFile - ) => { - // Fetch kernel spec - const kernelspec = getJson('xeus/kernels/' + kernel + '/kernel.json'); - kernelspec.name = kernel; - kernelspec.dir = kernel; - for (const [key, value] of Object.entries(kernelspec.resources)) { - kernelspec.resources[key] = URLExt.join( - PageConfig.getBaseUrl(), - value as string - ); - } - - const contentsManager = app.serviceManager.contents; - kernelspecs.register({ - spec: kernelspec, - create: async (options: IKernel.IOptions): Promise => { - const mountDrive = !!( - (serviceWorker?.enabled && broadcastChannel?.enabled) || - crossOriginIsolated +const plugins = kernel_list.map( + (kernel): JupyterLiteServerPlugin => { + return { + id: `@jupyterlite/xeus-${kernel}:register`, + autoStart: true, + requires: [IKernelSpecs], + optional: [ + IServiceWorkerManager, + IBroadcastChannelWrapper, + IEmpackEnvMetaFile + ], + activate: ( + app: JupyterLiteServer, + kernelspecs: IKernelSpecs, + serviceWorker?: IServiceWorkerManager, + broadcastChannel?: IBroadcastChannelWrapper, + empackEnvMetaFile?: IEmpackEnvMetaFile + ) => { + // Fetch kernel spec + const kernelspec = getJson('xeus/kernels/' + kernel + '/kernel.json'); + kernelspec.name = kernel; + kernelspec.dir = kernel; + for (const [key, value] of Object.entries(kernelspec.resources)) { + kernelspec.resources[key] = URLExt.join( + PageConfig.getBaseUrl(), + value as string ); + } - if (mountDrive) { - console.info( - `${kernelspec.name} contents will be synced with Jupyter Contents` + const contentsManager = app.serviceManager.contents; + kernelspecs.register({ + spec: kernelspec, + create: async (options: IKernel.IOptions): Promise => { + const mountDrive = !!( + (serviceWorker?.enabled && broadcastChannel?.enabled) || + crossOriginIsolated ); - } else { - console.warn( - `${kernelspec.name} contents will NOT be synced with Jupyter Contents` - ); - } - const link = empackEnvMetaFile ? await empackEnvMetaFile.getLink(kernelspec.dir): ''; - return new WebWorkerKernel({ - ...options, - contentsManager, - mountDrive, - kernelSpec: kernelspec, - empackEnvMetaLink: link - }); - } - }); - } - }; -}); + if (mountDrive) { + console.info( + `${kernelspec.name} contents will be synced with Jupyter Contents` + ); + } else { + console.warn( + `${kernelspec.name} contents will NOT be synced with Jupyter Contents` + ); + } + const link = empackEnvMetaFile + ? await empackEnvMetaFile.getLink(kernelspec.dir) + : ''; + + return new WebWorkerKernel({ + ...options, + contentsManager, + mountDrive, + kernelSpec: kernelspec, + empackEnvMetaLink: link + }); + } + }); + } + }; + } +); const empackEnvMetaPlugin: JupyterLiteServerPlugin = { - id: `@jupyterlite/xeus-python:empack-env-meta`, + id: '@jupyterlite/xeus-python:empack-env-meta', autoStart: true, provides: IEmpackEnvMetaFile, activate: (): IEmpackEnvMetaFile => { return { getLink: async (kernel?: string) => { - const kernel_root_url = URLExt.join( - PageConfig.getBaseUrl(), - `xeus/kernels/${kernel}` - ); - return `${kernel_root_url}`; + const kernel_root_url = URLExt.join( + PageConfig.getBaseUrl(), + `xeus/kernels/${kernel}` + ); + return `${kernel_root_url}`; } }; - }, + } }; plugins.push(empackEnvMetaPlugin); diff --git a/src/tokens.ts b/src/tokens.ts index 37434700..ae0370d7 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -97,4 +97,6 @@ export interface IEmpackEnvMetaFile { getLink: (kernel?: string) => Promise; } -export const IEmpackEnvMetaFile = new Token('@jupyterlite/xeus-python:IEmpackEnvMetaFile'); +export const IEmpackEnvMetaFile = new Token( + '@jupyterlite/xeus-python:IEmpackEnvMetaFile' +); diff --git a/src/web_worker_kernel.ts b/src/web_worker_kernel.ts index 94dc86c9..719af941 100644 --- a/src/web_worker_kernel.ts +++ b/src/web_worker_kernel.ts @@ -29,8 +29,15 @@ export class WebWorkerKernel implements IKernel { * @param options The instantiation options for a new WebWorkerKernel */ constructor(options: WebWorkerKernel.IOptions) { - const { id, name, sendMessage, location, kernelSpec, contentsManager, empackEnvMetaLink } = - options; + const { + id, + name, + sendMessage, + location, + kernelSpec, + contentsManager, + empackEnvMetaLink + } = options; this._id = id; this._name = name; this._location = location; @@ -105,7 +112,7 @@ export class WebWorkerKernel implements IKernel { kernelSpec: this._kernelSpec, baseUrl: PageConfig.getBaseUrl(), mountDrive: options.mountDrive, - empackEnvMetaLink: this._empackEnvMetaLink, + empackEnvMetaLink: this._empackEnvMetaLink }) .then(this._ready.resolve.bind(this._ready)); diff --git a/src/worker.ts b/src/worker.ts index 1e25b50b..4d47d068 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -125,10 +125,9 @@ export class XeusRemoteKernel { // This function is usually implemented in the pre/post.js // in the emscripten build of that kernel if (globalThis.Module['async_init'] !== undefined) { - const kernel_root_url = empackEnvMetaLink ? empackEnvMetaLink : URLExt.join( - baseUrl, - `xeus/kernels/${kernelSpec.dir}` - ); + const kernel_root_url = empackEnvMetaLink + ? empackEnvMetaLink + : URLExt.join(baseUrl, `xeus/kernels/${kernelSpec.dir}`); const pkg_root_url = URLExt.join(baseUrl, 'xeus/kernel_packages'); const verbose = true; await globalThis.Module['async_init']( From bc8c238c8c70e9f8f83c6d0c0ae2f4c12eeb1800 Mon Sep 17 00:00:00 2001 From: Duc Trung LE Date: Tue, 15 Oct 2024 12:24:27 +0200 Subject: [PATCH 11/12] empackEnvMetaFile.getLink gets kernel spec as parameter instead of kernel name --- jupyterlite_xeus/add_on.py | 9 ++++++--- src/index.ts | 7 ++++--- src/tokens.ts | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/jupyterlite_xeus/add_on.py b/jupyterlite_xeus/add_on.py index b315fb9b..72964cea 100644 --- a/jupyterlite_xeus/add_on.py +++ b/jupyterlite_xeus/add_on.py @@ -293,12 +293,14 @@ def pack_prefix(self, kernel_dir): else: pack_kwargs["file_filters"] = pkg_file_filter_from_yaml(DEFAULT_CONFIG_PATH) + if self.package_url_factory is not None: + pack_kwargs["package_url_factory"] = self.package_url_factory + pack_env( env_prefix=self.prefix, relocate_prefix="/", outdir=out_path, use_cache=False, - package_url_factory=self.package_url_factory, **pack_kwargs, ) @@ -351,7 +353,8 @@ def pack_prefix(self, kernel_dir): # Pack JupyterLite content if enabled # If we only build a voici output, mount jupyterlite content into the kernel by default if self.mount_jupyterlite_content or ( - list(self.manager.apps) == ["voici"] and self.mount_jupyterlite_content is None + list(self.manager.apps) == ["voici"] + and self.mount_jupyterlite_content is None ): contents_dir = self.manager.output_dir / "files" @@ -439,4 +442,4 @@ def dedupe_federated_extensions(self, config): if os.path.exists(self.output_extensions / ext["name"] / ext["load"]): named[ext["name"]] = ext - config[FEDERATED_EXTENSIONS] = sorted(named.values(), key=lambda x: x["name"]) \ No newline at end of file + config[FEDERATED_EXTENSIONS] = sorted(named.values(), key=lambda x: x["name"]) diff --git a/src/index.ts b/src/index.ts index fefd46ba..13c847c1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -78,7 +78,7 @@ const plugins = kernel_list.map( ); } const link = empackEnvMetaFile - ? await empackEnvMetaFile.getLink(kernelspec.dir) + ? await empackEnvMetaFile.getLink(kernelspec) : ''; return new WebWorkerKernel({ @@ -101,10 +101,11 @@ const empackEnvMetaPlugin: JupyterLiteServerPlugin = { provides: IEmpackEnvMetaFile, activate: (): IEmpackEnvMetaFile => { return { - getLink: async (kernel?: string) => { + getLink: async (kernelspec: Record) => { + const kernelName = kernelspec.name; const kernel_root_url = URLExt.join( PageConfig.getBaseUrl(), - `xeus/kernels/${kernel}` + `xeus/kernels/${kernelName}` ); return `${kernel_root_url}`; } diff --git a/src/tokens.ts b/src/tokens.ts index ae0370d7..828990db 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -94,7 +94,7 @@ export interface IEmpackEnvMetaFile { /** * Get empack_env_meta link. */ - getLink: (kernel?: string) => Promise; + getLink: (kernelspec: Record) => Promise; } export const IEmpackEnvMetaFile = new Token( From eb8b7955db84e4274c4b578c9bae3a2aed967147 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Tue, 15 Oct 2024 15:39:11 +0200 Subject: [PATCH 12/12] Rename plugin --- src/index.ts | 2 +- src/tokens.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 13c847c1..459e78d2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -96,7 +96,7 @@ const plugins = kernel_list.map( ); const empackEnvMetaPlugin: JupyterLiteServerPlugin = { - id: '@jupyterlite/xeus-python:empack-env-meta', + id: '@jupyterlite/xeus:empack-env-meta', autoStart: true, provides: IEmpackEnvMetaFile, activate: (): IEmpackEnvMetaFile => { diff --git a/src/tokens.ts b/src/tokens.ts index 828990db..1c222b54 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -98,5 +98,5 @@ export interface IEmpackEnvMetaFile { } export const IEmpackEnvMetaFile = new Token( - '@jupyterlite/xeus-python:IEmpackEnvMetaFile' + '@jupyterlite/xeus:IEmpackEnvMetaFile' );