Fix issues with loading aliased kernels in notebooks (#21018)

This commit is contained in:
Cory Rivera
2022-10-28 13:22:52 -07:00
committed by GitHub
parent 5fdb20f79c
commit 82adcc0f20
3 changed files with 18 additions and 5 deletions

View File

@@ -597,7 +597,7 @@ export class KernelsDropdown extends SelectBox {
this._register(this.model.kernelChanged((changedArgs: azdata.nb.IKernelChangedArgs) => { this._register(this.model.kernelChanged((changedArgs: azdata.nb.IKernelChangedArgs) => {
this.updateKernel(changedArgs.newValue, changedArgs.nbKernelAlias); this.updateKernel(changedArgs.newValue, changedArgs.nbKernelAlias);
})); }));
this._register(this.model.kernelsChanged(kernel => { this._register(this.model.kernelsAdded(kernel => {
this.updateKernel(kernel); this.updateKernel(kernel);
})); }));
let kernel = this.model.clientSession && this.model.clientSession.kernel; let kernel = this.model.clientSession && this.model.clientSession.kernel;

View File

@@ -1085,7 +1085,7 @@ suite('notebook model', function (): void {
supportedFileExtensions: [DEFAULT_NOTEBOOK_FILETYPE] supportedFileExtensions: [DEFAULT_NOTEBOOK_FILETYPE]
}; };
let kernelsAddedPromise = new Promise<void>(resolve => { let kernelsAddedPromise = new Promise<void>(resolve => {
model.kernelsChanged(kernel => { model.kernelsAdded(kernel => {
resolve(); resolve();
}); });
}); });
@@ -1110,7 +1110,7 @@ suite('notebook model', function (): void {
supportedFileExtensions: ['.html'] supportedFileExtensions: ['.html']
}; };
kernelsAddedPromise = new Promise<void>((resolve, reject) => { kernelsAddedPromise = new Promise<void>((resolve, reject) => {
model.kernelsChanged(kernel => { model.kernelsAdded(kernel => {
reject('Should not have added a new kernel'); reject('Should not have added a new kernel');
}); });
}); });

View File

@@ -84,6 +84,7 @@ export class NotebookModel extends Disposable implements INotebookModel {
private _contextsLoadingEmitter = new Emitter<void>(); private _contextsLoadingEmitter = new Emitter<void>();
private _contentChangedEmitter = new Emitter<NotebookContentChange>(); private _contentChangedEmitter = new Emitter<NotebookContentChange>();
private _kernelsChangedEmitter = new Emitter<nb.IKernel>(); private _kernelsChangedEmitter = new Emitter<nb.IKernel>();
private _kernelsAddedEmitter = new Emitter<nb.IKernel>();
private _kernelChangedEmitter = new Emitter<nb.IKernelChangedArgs>(); private _kernelChangedEmitter = new Emitter<nb.IKernelChangedArgs>();
private _viewModeChangedEmitter = new Emitter<ViewMode>(); private _viewModeChangedEmitter = new Emitter<ViewMode>();
private _layoutChanged = new Emitter<void>(); private _layoutChanged = new Emitter<void>();
@@ -187,7 +188,7 @@ export class NotebookModel extends Disposable implements INotebookModel {
let manager = await this._notebookService.getOrCreateExecuteManager(kernels[0].notebookProvider, this.notebookUri); let manager = await this._notebookService.getOrCreateExecuteManager(kernels[0].notebookProvider, this.notebookUri);
this._notebookOptions.executeManagers.push(manager); this._notebookOptions.executeManagers.push(manager);
this._kernelsChangedEmitter.fire(this._activeClientSession?.kernel); this._kernelsAddedEmitter.fire(this._activeClientSession?.kernel);
} }
} }
@@ -256,6 +257,9 @@ export class NotebookModel extends Disposable implements INotebookModel {
return this._activeClientSession; return this._activeClientSession;
} }
/**
* Event that gets fired after the kernel is changed from starting a session or selecting one from the kernel dropdown.
*/
public get kernelChanged(): Event<nb.IKernelChangedArgs> { public get kernelChanged(): Event<nb.IKernelChangedArgs> {
return this._kernelChangedEmitter.event; return this._kernelChangedEmitter.event;
} }
@@ -264,6 +268,13 @@ export class NotebookModel extends Disposable implements INotebookModel {
return this._kernelsChangedEmitter.event; return this._kernelsChangedEmitter.event;
} }
/**
* Event that gets fired when new kernels are added to the model from new notebook providers in the registry.
*/
public get kernelsAdded(): Event<nb.IKernel> {
return this._kernelsAddedEmitter.event;
}
public get layoutChanged(): Event<void> { public get layoutChanged(): Event<void> {
return this._layoutChanged.event; return this._layoutChanged.event;
} }
@@ -1279,7 +1290,9 @@ export class NotebookModel extends Disposable implements INotebookModel {
private async updateKernelInfoOnKernelChange(kernel: nb.IKernel, kernelAlias?: string) { private async updateKernelInfoOnKernelChange(kernel: nb.IKernel, kernelAlias?: string) {
await this.updateKernelInfo(kernel); await this.updateKernelInfo(kernel);
kernelAlias = this.kernelAliases.find(kernel => this._defaultLanguageInfo?.name === kernel.toLowerCase()) ?? kernelAlias; if (!kernelAlias) {
kernelAlias = this.kernelAliases.find(k => this._defaultLanguageInfo?.name === k.toLowerCase());
}
// In order to change from kernel alias to other kernel, set kernelAlias to undefined in order to update to new kernel language info // In order to change from kernel alias to other kernel, set kernelAlias to undefined in order to update to new kernel language info
if (this._selectedKernelDisplayName !== kernelAlias && this._selectedKernelDisplayName) { if (this._selectedKernelDisplayName !== kernelAlias && this._selectedKernelDisplayName) {
kernelAlias = undefined; kernelAlias = undefined;