Skip to content

Commit 17b7dbe

Browse files
authored
Make nb metadata available to jupyter startup and kernel selection layers (#8784)
* Use nb metadata when starting jupyter
1 parent 18d6b65 commit 17b7dbe

File tree

4 files changed

+16
-6
lines changed

4 files changed

+16
-6
lines changed

src/client/datascience/interactive-ipynb/nativeEditor.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,12 @@ export class NativeEditor extends InteractiveBase implements INotebookEditor {
231231
}
232232

233233
public async getNotebookOptions(): Promise<INotebookServerOptions> {
234-
return this.ipynbProvider.getNotebookOptions();
234+
const options = await this.ipynbProvider.getNotebookOptions();
235+
const metadata = this.notebookJson.metadata;
236+
return {
237+
...options,
238+
metadata
239+
};
235240
}
236241

237242
public runAllCells() {

src/client/datascience/jupyter/jupyterExecution.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import * as uuid from 'uuid/v4';
55
import { CancellationToken, Event, EventEmitter } from 'vscode';
66

7+
import { nbformat } from '@jupyterlab/coreutils';
78
import { ILiveShareApi, IWorkspaceService } from '../../common/application/types';
89
import { Cancellation } from '../../common/cancellation';
910
import { traceInfo } from '../../common/logger';
@@ -248,7 +249,9 @@ export class JupyterExecutionBase implements IJupyterExecution {
248249
// If our uri is undefined or if it's set to local launch we need to launch a server locally
249250
if (!options || !options.uri) {
250251
traceInfo(`Launching ${options ? options.purpose : 'unknown type of'} server`);
251-
const launchResults = await this.startNotebookServer(options && options.useDefaultConfig ? true : false, cancelToken);
252+
const useDefaultConfig = options && options.useDefaultConfig ? true : false;
253+
const metadata = options?.metadata;
254+
const launchResults = await this.startNotebookServer({useDefaultConfig, metadata}, cancelToken);
252255
if (launchResults) {
253256
connection = launchResults.connection;
254257
kernelSpec = launchResults.kernelSpec;
@@ -284,11 +287,11 @@ export class JupyterExecutionBase implements IJupyterExecution {
284287

285288
// tslint:disable-next-line: max-func-body-length
286289
@captureTelemetry(Telemetry.StartJupyter)
287-
private async startNotebookServer(useDefaultConfig: boolean, cancelToken?: CancellationToken): Promise<{ connection: IConnection; kernelSpec: IJupyterKernelSpec | undefined }> {
290+
private async startNotebookServer(options: {useDefaultConfig: boolean; metadata?: nbformat.INotebookMetadata}, cancelToken?: CancellationToken): Promise<{ connection: IConnection; kernelSpec: IJupyterKernelSpec | undefined }> {
288291
// First we find a way to start a notebook server
289292
const notebookCommand = await this.findBestCommand(JupyterCommands.NotebookCommand, cancelToken);
290293
this.checkNotebookCommand(notebookCommand);
291-
return this.notebookStarter.start(useDefaultConfig, cancelToken);
294+
return this.notebookStarter.start(options, cancelToken);
292295
}
293296

294297
private getUsableJupyterPythonImpl = async (cancelToken?: CancellationToken): Promise<PythonInterpreter | undefined> => {

src/client/datascience/jupyter/notebookStarter.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
'use strict';
55

6+
import { nbformat } from '@jupyterlab/coreutils';
67
import * as cp from 'child_process';
78
import * as os from 'os';
89
import * as path from 'path';
@@ -56,7 +57,7 @@ export class NotebookStarter implements Disposable {
5657
}
5758
}
5859
// tslint:disable-next-line: max-func-body-length
59-
public async start(useDefaultConfig: boolean, cancelToken?: CancellationToken): Promise<{ connection: IConnection; kernelSpec: IJupyterKernelSpec | undefined }> {
60+
public async start(options: {useDefaultConfig: boolean; metadata?: nbformat.INotebookMetadata}, cancelToken?: CancellationToken): Promise<{ connection: IConnection; kernelSpec: IJupyterKernelSpec | undefined }> {
6061
traceInfo('Starting Notebook');
6162
const notebookCommandPromise = this.commandFinder.findBestCommand(JupyterCommands.NotebookCommand);
6263
// Now actually launch it
@@ -67,7 +68,7 @@ export class NotebookStarter implements Disposable {
6768
tempDirPromise.then(dir => this.disposables.push(dir)).ignoreErrors();
6869
// Before starting the notebook process, make sure we generate a kernel spec
6970
const [args, kernelSpec, notebookCommand] = await Promise.all([
70-
this.generateArguments(useDefaultConfig, tempDirPromise),
71+
this.generateArguments(options.useDefaultConfig, tempDirPromise),
7172
this.kernelService.getMatchingKernelSpec(undefined, cancelToken),
7273
notebookCommandPromise
7374
]);

src/client/datascience/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ export interface INotebookServerOptions {
111111
workingDir?: string;
112112
interpreterPath?: string;
113113
purpose: string;
114+
metadata?: nbformat.INotebookMetadata;
114115
}
115116

116117
export const INotebookExecutionLogger = Symbol('INotebookExecutionLogger');

0 commit comments

Comments
 (0)