MCPcopy Create free account
hub / github.com/deepnote/vscode-deepnote / getKernelsApi

Function getKernelsApi

src/standalone/api/kernels/index.ts:57–143  ·  view source on GitHub ↗
(extensionId: string)

Source from the content-addressed store, hash-verified

55}
56
57export function getKernelsApi(extensionId: string): Kernels {
58 return {
59 async getKernel(uri: Uri) {
60 let accessAllowed: boolean | undefined = undefined;
61
62 const kernelProvider = ServiceContainer.instance.get<IKernelProvider>(IKernelProvider);
63 const notebook = workspace.notebookDocuments.find((item) => item.uri.toString() === uri.toString());
64 const kernel = kernelProvider.get(notebook || uri);
65 // We are only interested in returning kernels that have been started by the user.
66 // Returning started kernels is not sufficient as we also pre-warm kernels (i.e. we start kernels even though the user may not have executed any code).
67 if (!kernel || !kernel.startedAtLeastOnce || !kernel.userStartedKernel) {
68 sendTelemetryEvent(Telemetry.NewJupyterKernelsApiUsage, undefined, {
69 extensionId,
70 pemUsed: 'getKernel',
71 accessAllowed
72 });
73 return;
74 }
75 if (extensionId !== JVSC_EXTENSION_ID) {
76 void initializeInteractiveOrNotebookTelemetryBasedOnUserAction(
77 kernel.resourceUri,
78 kernel.kernelConnectionMetadata
79 );
80 }
81 const { api } = getWrappedKernel(kernel, extensionId);
82 return api;
83 },
84 get onDidStart() {
85 if (
86 ![JVSC_EXTENSION_ID, DATA_WRANGLER_EXTENSION_ID].includes(extensionId) &&
87 !PROPOSED_API_ALLOWED_PUBLISHERS.includes(extensionId.split('.')[0])
88 ) {
89 throw new Error(`Proposed API is not supported for extension ${extensionId}`);
90 }
91
92 // We can cache the event emitter for subsequent calls.
93 const extensionAPI = getOrCreateExtensionAPI(extensionId);
94 if (!extensionAPI.onDidStart) {
95 const kernelProvider = ServiceContainer.instance.get<IKernelProvider>(IKernelProvider);
96 const disposableRegistry = ServiceContainer.instance.get<IDisposableRegistry>(IDisposableRegistry);
97 extensionAPI.onDidStart = new EventEmitter<{
98 uri: Uri;
99 kernel: Kernel;
100 token: CancellationToken;
101 waitUntil(thenable: Thenable<unknown>): void;
102 }>();
103
104 disposableRegistry.push(
105 extensionAPI.onDidStart,
106 kernelProvider.onDidPostInitializeKernel(({ kernel, token, waitUntil }) => {
107 const { api, progress } = getWrappedKernel(kernel, extensionId);
108 extensionAPI.onDidStart?.fire({
109 uri: kernel.uri,
110 kernel: api,
111 token,
112 waitUntil: (thenable) => {
113 // Wrap around the `waitUntil` method to inject telemetry and notifications.
114 // For notifications, we reuse the kernel execution progress indicator message

Callers 2

kernelsFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected