5
5
6
6
import { inject , injectable } from 'inversify' ;
7
7
import { CancellationToken } from 'vscode' ;
8
+ import * as localize from '../../../common/utils/localize' ;
8
9
import { IInterpreterSelector } from '../../../interpreter/configuration/types' ;
9
- import { IJupyterKernelSpec , IJupyterSessionManager } from '../../types' ;
10
+ import { IJupyterKernel , IJupyterKernelSpec , IJupyterSessionManager } from '../../types' ;
10
11
import { KernelService } from './kernelService' ;
11
12
import { IKernelSelectionListProvider , IKernelSpecQuickPickItem } from './types' ;
12
13
@@ -20,11 +21,26 @@ import { IKernelSelectionListProvider, IKernelSpecQuickPickItem } from './types'
20
21
* @param {IJupyterKernelSpec } kernelSpec
21
22
* @returns {IKernelSpecQuickPickItem }
22
23
*/
23
- function getQuickPickFromKernelSpec ( activeKernel : boolean , kernelSpec : IJupyterKernelSpec ) : IKernelSpecQuickPickItem {
24
+ function getQuickPickItemForKernelSpec ( kernelSpec : IJupyterKernelSpec ) : IKernelSpecQuickPickItem {
24
25
return {
25
26
label : kernelSpec . display_name ,
26
- description : activeKernel ? '(active kernel)' : '(kernel)' ,
27
- selection : { kernelSpec : kernelSpec , interpreter : undefined }
27
+ description : '(kernel)' ,
28
+ selection : { kernelModel : undefined , kernelSpec : kernelSpec , interpreter : undefined }
29
+ } ;
30
+ }
31
+
32
+ /**
33
+ * Given a kernel spec, this will return a quick pick item with appropriate display names and the like.
34
+ *
35
+ * @param {boolean } activeKernel Whether this is an active kernel in a jupyter session.
36
+ * @param {IJupyterKernelSpec } kernelSpec
37
+ * @returns {IKernelSpecQuickPickItem }
38
+ */
39
+ function getQuickPickItemForActiveKernel ( kernel : IJupyterKernel & Partial < IJupyterKernelSpec > ) : IKernelSpecQuickPickItem {
40
+ return {
41
+ label : kernel . display_name || kernel . name || '' ,
42
+ description : localize . DataScience . jupyterSelectURIRunningDetailFormat ( ) . format ( kernel . lastActivityTime . toLocaleString ( ) , kernel . numberOfConnections . toString ( ) ) ,
43
+ selection : { kernelModel : kernel , kernelSpec : undefined , interpreter : undefined }
28
44
} ;
29
45
}
30
46
@@ -36,10 +52,17 @@ function getQuickPickFromKernelSpec(activeKernel: boolean, kernelSpec: IJupyterK
36
52
* @implements {IKernelSelectionListProvider}
37
53
*/
38
54
export class ActiveJupyterSessionKernelSelectionListProvider implements IKernelSelectionListProvider {
39
- constructor ( private readonly session : IJupyterSessionManager ) { }
55
+ constructor ( private readonly sessionManager : IJupyterSessionManager ) { }
40
56
public async getKernelSelections ( _cancelToken ?: CancellationToken | undefined ) : Promise < IKernelSpecQuickPickItem [ ] > {
41
- const items = await this . session . getActiveKernelSpecs ( ) ;
42
- return items . filter ( item => item . display_name || item . name ) . map ( getQuickPickFromKernelSpec . bind ( undefined , true ) ) ;
57
+ const [ activeKernels , kernelSpecs ] = await Promise . all ( [ this . sessionManager . getRunningKernels ( ) , this . sessionManager . getKernelSpecs ( ) ] ) ;
58
+ const items = activeKernels . map ( item => {
59
+ const matchingSpec : Partial < IJupyterKernelSpec > = kernelSpecs . find ( spec => spec . name === item . name ) || { } ;
60
+ return {
61
+ ...item ,
62
+ ...matchingSpec
63
+ } ;
64
+ } ) ;
65
+ return items . filter ( item => item . display_name || item . name ) . map ( getQuickPickItemForActiveKernel ) ;
43
66
}
44
67
}
45
68
@@ -51,10 +74,10 @@ export class ActiveJupyterSessionKernelSelectionListProvider implements IKernelS
51
74
* @implements {IKernelSelectionListProvider}
52
75
*/
53
76
export class JupyterKernelSelectionListProvider implements IKernelSelectionListProvider {
54
- constructor ( private readonly kernelService : KernelService ) { }
77
+ constructor ( private readonly kernelService : KernelService , private readonly sessionManager ?: IJupyterSessionManager ) { }
55
78
public async getKernelSelections ( cancelToken ?: CancellationToken | undefined ) : Promise < IKernelSpecQuickPickItem [ ] > {
56
- const items = await this . kernelService . getLocalKernelSpecs ( cancelToken ) ;
57
- return items . filter ( item => item . display_name || item . name ) . map ( getQuickPickFromKernelSpec . bind ( undefined , false ) ) ;
79
+ const items = await this . kernelService . getKernelSpecs ( this . sessionManager , cancelToken ) ;
80
+ return items . map ( getQuickPickItemForKernelSpec ) ;
58
81
}
59
82
}
60
83
@@ -73,7 +96,7 @@ export class InterpreterKernelSelectionListProvider implements IKernelSelectionL
73
96
return {
74
97
...item ,
75
98
description : '(register and use interpreter as kernel)' ,
76
- selection : { interpreter : item . interpreter , kernelSpec : undefined }
99
+ selection : { kernelModel : undefined , interpreter : item . interpreter , kernelSpec : undefined }
77
100
} ;
78
101
} ) ;
79
102
}
@@ -91,24 +114,24 @@ export class KernelSelectionProvider {
91
114
/**
92
115
* Gets a selection of kernel specs from a remote session.
93
116
*
94
- * @param {IJupyterSessionManager } session
117
+ * @param {IJupyterSessionManager } sessionManager
95
118
* @param {CancellationToken } [cancelToken]
96
119
* @returns {Promise<IKernelSpecQuickPickItem[]> }
97
120
* @memberof KernelSelectionProvider
98
121
*/
99
- public async getKernelSelectionsForRemoteSession ( session : IJupyterSessionManager , cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
100
- return new ActiveJupyterSessionKernelSelectionListProvider ( session ) . getKernelSelections ( cancelToken ) ;
122
+ public async getKernelSelectionsForRemoteSession ( sessionManager : IJupyterSessionManager , cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
123
+ return new ActiveJupyterSessionKernelSelectionListProvider ( sessionManager ) . getKernelSelections ( cancelToken ) ;
101
124
}
102
125
/**
103
126
* Gets a selection of kernel specs for a local session.
104
127
*
105
- * @param {IJupyterSessionManager } [session ]
128
+ * @param {IJupyterSessionManager } [sessionManager ]
106
129
* @param {CancellationToken } [cancelToken]
107
130
* @returns {Promise<IKernelSelectionListProvider> }
108
131
* @memberof KernelSelectionProvider
109
132
*/
110
- public async getLocalKernelSelectionProvider ( session ?: IJupyterSessionManager , cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
111
- const activeKernelsPromise = session ? new ActiveJupyterSessionKernelSelectionListProvider ( session ) . getKernelSelections ( cancelToken ) : Promise . resolve ( [ ] ) ;
133
+ public async getLocalKernelSelectionProvider ( sessionManager ?: IJupyterSessionManager , cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
134
+ const activeKernelsPromise = sessionManager ? new ActiveJupyterSessionKernelSelectionListProvider ( sessionManager ) . getKernelSelections ( cancelToken ) : Promise . resolve ( [ ] ) ;
112
135
const jupyterKernelsPromise = new JupyterKernelSelectionListProvider ( this . kernelService ) . getKernelSelections ( cancelToken ) ;
113
136
const interpretersPromise = new InterpreterKernelSelectionListProvider ( this . interpreterSelector ) . getKernelSelections ( cancelToken ) ;
114
137
const [ activeKernels , jupyterKernels , interprters ] = await Promise . all ( [ activeKernelsPromise , jupyterKernelsPromise , interpretersPromise ] ) ;
0 commit comments