Skip to content

Commit 3135fd1

Browse files
committed
Misc
1 parent 297a2a2 commit 3135fd1

File tree

3 files changed

+33
-26
lines changed

3 files changed

+33
-26
lines changed

src/client/datascience/jupyter/kernels/kernelSelections.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function getQuickPickFromKernelSpec(kernelSpec: IJupyterKernelSpec): IKernelSpec
2323
return {
2424
label: kernelSpec.display_name || kernelSpec.name || '',
2525
description: '',
26-
selection: { kernelSpec: kernelSpec }
26+
selection: { kernelSpec: kernelSpec, interpreter: undefined }
2727
};
2828
}
2929

@@ -71,7 +71,7 @@ export class InterpreterKernelSelectionnListProvider implements IKernelSelection
7171
return items.map(item => {
7272
return {
7373
...item,
74-
selection: { interpreter: item.interpreter }
74+
selection: { interpreter: item.interpreter, kernelSpec: undefined }
7575
};
7676
});
7777
}

src/client/datascience/jupyter/kernels/kernelSelector.ts

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,49 +14,48 @@ import { IJupyterCommand, IJupyterKernelSpec, IJupyterSessionManager } from '../
1414
import { JupyterCommandFinder, ModuleExistsStatus } from '../jupyterCommandFinder';
1515
import { KernelSelectionProvider } from './kernelSelections';
1616
import { KernelService } from './kernelService';
17+
import { IKernelSelector } from './types';
1718

1819
@injectable()
19-
export class KernelSelector {
20+
export class KernelSelector implements IKernelSelector {
2021
constructor(
2122
@inject(KernelSelectionProvider) private readonly selectionProvider: KernelSelectionProvider,
2223
@inject(IApplicationShell) private readonly applicationShell: IApplicationShell,
2324
@inject(JupyterCommandFinder) private readonly cmdFinder: JupyterCommandFinder,
2425
@inject(KernelService) private readonly kernelService: KernelService,
2526
@inject(IInstaller) private readonly installer: IInstaller
2627
) {}
27-
public async selectKernel(
28-
options: { session?: IJupyterSessionManager } | { session: IJupyterSessionManager; isRemoteConnection: true },
29-
cancelToken?: CancellationToken
30-
): Promise<IJupyterKernelSpec | undefined> {
31-
const suggestions =
32-
'isRemoteConnection' in options
33-
? this.selectionProvider.getKernelSelectionsForRemoteSession(options.session)
34-
: this.selectionProvider.getLocalKernelSelectionProvider(options.session);
35-
36-
const selection = await this.applicationShell.showQuickPick(suggestions);
28+
public async selectRemoteKernel(session: IJupyterSessionManager, cancelToken?: CancellationToken): Promise<IJupyterKernelSpec | undefined> {
29+
const suggestions = this.selectionProvider.getKernelSelectionsForRemoteSession(session, cancelToken);
30+
const selection = await this.applicationShell.showQuickPick(suggestions, undefined, cancelToken);
3731
if (!selection) {
3832
return;
3933
}
4034

4135
// Nothing to validate if this is a remote connection.
42-
if ('isRemoteConnection' in options) {
43-
if ('kernelSpec' in selection.selection) {
44-
return selection.selection.kernelSpec;
45-
}
46-
// This is not possible.
47-
throw new Error('Invalid Selection in kernel spec');
36+
if (!selection.selection.kernelSpec) {
37+
return selection.selection.kernelSpec;
38+
}
39+
// This is not possible (remote kernels selector can only display remote kernels).
40+
throw new Error('Invalid Selection in kernel spec (somehow a local kernel/interpreter has been selected for a remote session!');
41+
}
42+
43+
public async selectLocalKernel(session?: IJupyterSessionManager, cancelToken?: CancellationToken): Promise<IJupyterKernelSpec | undefined> {
44+
const suggestions = this.selectionProvider.getLocalKernelSelectionProvider(session, cancelToken);
45+
const selection = await this.applicationShell.showQuickPick(suggestions, undefined, cancelToken);
46+
if (!selection) {
47+
return;
4848
}
4949

5050
// Check if ipykernel is installed in this kernel.
51-
if ('interpreter' in selection.selection) {
52-
const interpreter = selection.selection.interpreter;
53-
const isValid = await this.isSelectionValid(interpreter, cancelToken);
51+
if (selection.selection.interpreter) {
52+
const isValid = await this.isSelectionValid(selection.selection.interpreter, cancelToken);
5453
if (!isValid) {
5554
return;
5655
}
5756

5857
// Try an install this interpreter as a kernel.
59-
return this.kernelService.registerKernel(interpreter, cancelToken);
58+
return this.kernelService.registerKernel(selection.selection.interpreter, cancelToken);
6059
} else {
6160
return selection.selection.kernelSpec;
6261
}

src/client/datascience/jupyter/kernels/types.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,22 @@
55

66
import { CancellationToken, QuickPickItem } from 'vscode';
77
import { PythonInterpreter } from '../../../interpreter/contracts';
8-
import { IJupyterKernelSpec } from '../../types';
8+
import { IJupyterKernelSpec, IJupyterSessionManager } from '../../types';
99

1010
export interface IKernelSpecQuickPickItem extends QuickPickItem {
11-
selection: { kernelSpec: IJupyterKernelSpec } | { interpreter: PythonInterpreter };
11+
/**
12+
* Whether a kernel spec has been selected or interpter.
13+
* If interpreter is selected, then we need to install this as a kernel to get the kernel spec.
14+
*
15+
* @type {({ kernelSpec: IJupyterKernelSpec; interpreter: undefined } | { kernelSpec: undefined; interpreter: PythonInterpreter })}
16+
* @memberof IKernelSpecQuickPickItem
17+
*/
18+
selection: { kernelSpec: IJupyterKernelSpec; interpreter: undefined } | { kernelSpec: undefined; interpreter: PythonInterpreter };
1219
}
1320

1421
export interface IKernelSelector {
15-
selectKernelSpec(cancelToken?: CancellationToken): Promise<IJupyterKernelSpec | undefined>;
22+
selectRemoteKernel(session: IJupyterSessionManager, cancelToken?: CancellationToken): Promise<IJupyterKernelSpec | undefined>;
23+
selectLocalKernel(session?: IJupyterSessionManager, cancelToken?: CancellationToken): Promise<IJupyterKernelSpec | undefined>;
1624
}
1725

1826
export interface IKernelSelectionListProvider {

0 commit comments

Comments
 (0)