4
4
'use strict' ;
5
5
6
6
import { inject , injectable } from 'inversify' ;
7
- import { CancellationToken , QuickPickItem } from 'vscode' ;
7
+ import { CancellationToken } from 'vscode' ;
8
8
import { IInterpreterSelector } from '../../../interpreter/configuration/types' ;
9
- import { PythonInterpreter } from '../../../interpreter/contracts' ;
10
9
import { IJupyterKernelSpec , IJupyterSessionManager } from '../../types' ;
11
10
import { KernelService } from './kernelService' ;
11
+ import { IKernelSelectionListProvider , IKernelSpecQuickPickItem } from './types' ;
12
12
13
- export interface IKernelSpecQuickPickItem extends QuickPickItem {
14
- selection : { kernelSpec : IJupyterKernelSpec } | { interpreter : PythonInterpreter } ;
15
- }
13
+ // Small classes, hence all put into one file.
14
+ // tslint:disable: max-classes-per-file
16
15
16
+ /**
17
+ * Given a kernel spec, this will return a quick pick item with appropriate display names and the like.
18
+ *
19
+ * @param {IJupyterKernelSpec } kernelSpec
20
+ * @returns {IKernelSpecQuickPickItem }
21
+ */
17
22
function getQuickPickFromKernelSpec ( kernelSpec : IJupyterKernelSpec ) : IKernelSpecQuickPickItem {
18
23
return {
19
24
label : kernelSpec . display_name || kernelSpec . name || '' ,
20
25
description : '' ,
21
26
selection : { kernelSpec : kernelSpec }
22
27
} ;
23
28
}
24
- export interface IKernelSelector {
25
- selectKernelSpec ( cancelToken ?: CancellationToken ) : Promise < IJupyterKernelSpec | undefined > ;
26
- }
27
29
28
- // export class kernelSelector implements IKernelSelector {
29
- // public async selectKernelSpec(session?: IJupyterSessionManager, cancelToken?: CancellationToken): Promise<IJupyterKernelSpec | undefined> {
30
- // return;
31
- // }
32
- // private selectKernelSpecFromList(session?: IJupyterSessionManager, cancelToken?: CancellationToken): Promise<IJupyterKernelSpec | undefined> {}
33
- // }
34
-
35
- export interface IKernelSelectionListProvider {
36
- getKernelSelections ( cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > ;
37
- }
38
-
39
-
40
- @injectable ( )
41
- export class KernelSelectionProviderFactory {
42
- constructor ( @inject ( KernelService ) private readonly kernelService : KernelService , @inject ( IInterpreterSelector ) private readonly interpreterSelector : IInterpreterSelector ) { }
43
- public async getRemoteKernelSelectionProvider ( session : IJupyterSessionManager ) : Promise < IKernelSelectionListProvider > {
44
- // tslint:disable: no-use-before-declare
45
- return new RemoteKernelSelectionProvider ( session ) ;
46
- }
47
- public async getLocalKernelSelectionProvider ( session ?: IJupyterSessionManager ) : Promise < IKernelSelectionListProvider > {
48
- return new LocalKernelSelectionProvider ( this . kernelService , this . interpreterSelector , session ) ;
49
- }
50
- }
51
- export class RemoteKernelSelectionProvider implements IKernelSelectionListProvider {
52
- constructor ( private readonly session : IJupyterSessionManager ) { }
53
- public async getKernelSelections ( cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
54
- return new JupyterSessionKernelSelectionnListProvider ( this . session ) . getKernelSelections ( cancelToken ) ;
55
- }
56
- }
57
-
58
- // tslint:disable: max-classes-per-file
59
- export class LocalKernelSelectionProvider implements IKernelSelectionListProvider {
60
- constructor ( private readonly kernelService : KernelService , private readonly interpreterSelector : IInterpreterSelector , private readonly session ?: IJupyterSessionManager ) { }
61
- public async getKernelSelections ( cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
62
- const activeKernelsPromise = this . session ? new JupyterSessionKernelSelectionnListProvider ( this . session ) . getKernelSelections ( cancelToken ) : Promise . resolve ( [ ] ) ;
63
- const jupyterKernelsPromise = new JupyterKernelSelectionnListProvider ( this . kernelService ) . getKernelSelections ( cancelToken ) ;
64
- const interpretersPromise = new InterpreterKernelSelectionnListProvider ( this . interpreterSelector ) . getKernelSelections ( cancelToken ) ;
65
- const [ activeKernels , jupyterKernels , interprters ] = await Promise . all ( [ activeKernelsPromise , jupyterKernelsPromise , interpretersPromise ] ) ;
66
- return [ ...activeKernels ! , ...jupyterKernels ! , ...interprters ] ;
67
- }
68
- }
69
-
70
- export class JupyterSessionKernelSelectionnListProvider implements IKernelSelectionListProvider {
30
+ /**
31
+ * Provider for active kernel specs in a jupyter session.
32
+ *
33
+ * @export
34
+ * @class ActiveJupyterSessionKernelSelectionListProvider
35
+ * @implements {IKernelSelectionListProvider}
36
+ */
37
+ export class ActiveJupyterSessionKernelSelectionListProvider implements IKernelSelectionListProvider {
71
38
constructor ( private readonly session : IJupyterSessionManager ) { }
72
39
public async getKernelSelections ( _cancelToken ?: CancellationToken | undefined ) : Promise < IKernelSpecQuickPickItem [ ] > {
73
40
const items = await this . session . getActiveKernelSpecs ( ) ;
74
41
return items . filter ( item => item . display_name || item . name ) . map ( getQuickPickFromKernelSpec ) ;
75
42
}
76
43
}
77
44
45
+ /**
46
+ * Provider for kernel specs in a jupyter process (`python -m jupyter kernelspec list`).
47
+ *
48
+ * @export
49
+ * @class JupyterKernelSelectionnListProvider
50
+ * @implements {IKernelSelectionListProvider}
51
+ */
78
52
export class JupyterKernelSelectionnListProvider implements IKernelSelectionListProvider {
79
53
constructor ( private readonly kernelService : KernelService ) { }
80
54
public async getKernelSelections ( cancelToken ?: CancellationToken | undefined ) : Promise < IKernelSpecQuickPickItem [ ] > {
@@ -83,7 +57,13 @@ export class JupyterKernelSelectionnListProvider implements IKernelSelectionList
83
57
}
84
58
}
85
59
86
- // tslint:disable: max-classes-per-file
60
+ /**
61
+ * Provider for interpreters to be treated as kernel specs.
62
+ *
63
+ * @export
64
+ * @class InterpreterKernelSelectionnListProvider
65
+ * @implements {IKernelSelectionListProvider}
66
+ */
87
67
export class InterpreterKernelSelectionnListProvider implements IKernelSelectionListProvider {
88
68
constructor ( private readonly interpreterSelector : IInterpreterSelector ) { }
89
69
public async getKernelSelections ( _cancelToken ?: CancellationToken | undefined ) : Promise < IKernelSpecQuickPickItem [ ] > {
@@ -96,3 +76,40 @@ export class InterpreterKernelSelectionnListProvider implements IKernelSelection
96
76
} ) ;
97
77
}
98
78
}
79
+
80
+ /**
81
+ * Factory class that provides a kernel spec list provider (local or remote).
82
+ *
83
+ * @export
84
+ * @class KernelSelectionProviderFactory
85
+ */
86
+ @injectable ( )
87
+ export class KernelSelectionProvider {
88
+ constructor ( @inject ( KernelService ) private readonly kernelService : KernelService , @inject ( IInterpreterSelector ) private readonly interpreterSelector : IInterpreterSelector ) { }
89
+ /**
90
+ * Gets a selection of kernel specs from a remote session.
91
+ *
92
+ * @param {IJupyterSessionManager } session
93
+ * @param {CancellationToken } [cancelToken]
94
+ * @returns {Promise<IKernelSpecQuickPickItem[]> }
95
+ * @memberof KernelSelectionProvider
96
+ */
97
+ public async getKernelSelectionsForRemoteSession ( session : IJupyterSessionManager , cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
98
+ return new ActiveJupyterSessionKernelSelectionListProvider ( session ) . getKernelSelections ( cancelToken ) ;
99
+ }
100
+ /**
101
+ * Gets a selection of kernel specs for a local session.
102
+ *
103
+ * @param {IJupyterSessionManager } [session]
104
+ * @param {CancellationToken } [cancelToken]
105
+ * @returns {Promise<IKernelSelectionListProvider> }
106
+ * @memberof KernelSelectionProvider
107
+ */
108
+ public async getLocalKernelSelectionProvider ( session ?: IJupyterSessionManager , cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
109
+ const activeKernelsPromise = session ? new ActiveJupyterSessionKernelSelectionListProvider ( session ) . getKernelSelections ( cancelToken ) : Promise . resolve ( [ ] ) ;
110
+ const jupyterKernelsPromise = new JupyterKernelSelectionnListProvider ( this . kernelService ) . getKernelSelections ( cancelToken ) ;
111
+ const interpretersPromise = new InterpreterKernelSelectionnListProvider ( this . interpreterSelector ) . getKernelSelections ( cancelToken ) ;
112
+ const [ activeKernels , jupyterKernels , interprters ] = await Promise . all ( [ activeKernelsPromise , jupyterKernelsPromise , interpretersPromise ] ) ;
113
+ return [ ...activeKernels ! , ...jupyterKernels ! , ...interprters ] ;
114
+ }
115
+ }
0 commit comments