From 67f9a7f5e4b534444f82713f3390cd0099f1926a Mon Sep 17 00:00:00 2001 From: Kevin Cunnane Date: Mon, 11 Feb 2019 17:17:56 -0800 Subject: [PATCH] Fix issues due to missing notebook values (specs and cells) (#4008) - Fix #3844 - Fix #3955 - Specs can be null on early load of Jupyter kernels - Cells were missing in some reference test .ipynb files. We should be resilient to malformed files if possible. --- src/sql/parts/notebook/models/notebookModel.ts | 10 +++++++--- .../services/notebook/node/localContentManager.ts | 6 ++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/sql/parts/notebook/models/notebookModel.ts b/src/sql/parts/notebook/models/notebookModel.ts index c2e91b8554..efc672eefd 100644 --- a/src/sql/parts/notebook/models/notebookModel.ts +++ b/src/sql/parts/notebook/models/notebookModel.ts @@ -546,8 +546,12 @@ export class NotebookModel extends Disposable implements INotebookModel { return kernel; } - private getDisplayNameFromSpecName(kernelid: string): string { - let newKernel = this.notebookManager.sessionManager.specs.kernels.find(kernel => kernel.name === kernelid); + private getDisplayNameFromSpecName(kernel: nb.IKernel): string { + let specs = this.notebookManager.sessionManager.specs; + if (!specs || !specs.kernels) { + return kernel.name; + } + let newKernel = this.notebookManager.sessionManager.specs.kernels.find(kernel => kernel.name === kernel.name); let newKernelDisplayName; if (newKernel) { newKernelDisplayName = newKernel.display_name; @@ -586,7 +590,7 @@ export class NotebookModel extends Disposable implements INotebookModel { private async loadActiveContexts(kernelChangedArgs: nb.IKernelChangedArgs): Promise { if (kernelChangedArgs && kernelChangedArgs.newValue && kernelChangedArgs.newValue.name) { - let kernelDisplayName = this.getDisplayNameFromSpecName(kernelChangedArgs.newValue.name); + let kernelDisplayName = this.getDisplayNameFromSpecName(kernelChangedArgs.newValue); this._activeContexts = await NotebookContexts.getContextsForKernel(this.notebookOptions.connectionService, this.getApplicableConnectionProviderIds(kernelDisplayName), kernelChangedArgs, this.connectionProfile); this._contextsChangedEmitter.fire(); if (this.contexts.defaultConnection !== undefined && this.contexts.defaultConnection.serverName !== undefined) { diff --git a/src/sql/workbench/services/notebook/node/localContentManager.ts b/src/sql/workbench/services/notebook/node/localContentManager.ts index 8efc2a3176..2e02b7babd 100644 --- a/src/sql/workbench/services/notebook/node/localContentManager.ts +++ b/src/sql/workbench/services/notebook/node/localContentManager.ts @@ -71,8 +71,10 @@ namespace v4 { nbformat_minor: contents.nbformat_minor }; - for (let cell of contents.cells) { - notebook.cells.push(readCell(cell)); + if (contents.cells) { + for (let cell of contents.cells) { + notebook.cells.push(readCell(cell)); + } } return notebook;