@datalayer/jupyter-react 0.9.2 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { ISignal } from '@lumino/signaling';
|
|
1
2
|
import { IOutput } from '@jupyterlab/nbformat';
|
|
2
3
|
import { IOutputAreaModel } from '@jupyterlab/outputarea';
|
|
3
4
|
import { Kernel, KernelMessage } from '@jupyterlab/services';
|
|
4
|
-
import { ISignal } from '@lumino/signaling';
|
|
5
5
|
export type IOPubMessageHook = (msg: KernelMessage.IIOPubMessage) => boolean | PromiseLike<boolean>;
|
|
6
6
|
export type ShellMessageHook = (msg: KernelMessage.IShellMessage) => boolean | PromiseLike<boolean>;
|
|
7
7
|
/**
|
|
@@ -17,9 +17,6 @@ export interface IKernelExecutorOptions {
|
|
|
17
17
|
*/
|
|
18
18
|
model?: IOutputAreaModel;
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
21
|
-
* A handler to execute code snippet.
|
|
22
|
-
*/
|
|
23
20
|
export declare class KernelExecutor {
|
|
24
21
|
private _kernelConnection;
|
|
25
22
|
private _outputs;
|
|
@@ -35,7 +32,6 @@ export declare class KernelExecutor {
|
|
|
35
32
|
*
|
|
36
33
|
* @param code Code to be executed
|
|
37
34
|
* @param options Callbacks on IOPub messages and on reply message
|
|
38
|
-
* and execution options
|
|
39
35
|
* @returns The outputs model
|
|
40
36
|
*
|
|
41
37
|
* @example
|
|
@@ -59,6 +55,7 @@ export declare class KernelExecutor {
|
|
|
59
55
|
clear(): void;
|
|
60
56
|
private _onIOPub;
|
|
61
57
|
private _onReply;
|
|
58
|
+
registerIOPubMessageHook: (msg: IOPubMessageHook) => void;
|
|
62
59
|
/**
|
|
63
60
|
* Promise that resolves when the execution is done.
|
|
64
61
|
*/
|
|
@@ -68,19 +65,19 @@ export declare class KernelExecutor {
|
|
|
68
65
|
*/
|
|
69
66
|
get result(): Promise<string>;
|
|
70
67
|
/**
|
|
71
|
-
* Kernel outputs emitted
|
|
68
|
+
* Kernel outputs emitted.
|
|
72
69
|
*/
|
|
73
70
|
get outputs(): IOutput[];
|
|
74
71
|
/**
|
|
75
|
-
*
|
|
72
|
+
* Kernel outputs wrapped in a model.
|
|
76
73
|
*/
|
|
77
|
-
get
|
|
74
|
+
get model(): IOutputAreaModel;
|
|
78
75
|
/**
|
|
79
|
-
*
|
|
76
|
+
* Signal emitted when the outputs list changes.
|
|
80
77
|
*/
|
|
81
|
-
get
|
|
78
|
+
get outputsChanged(): ISignal<KernelExecutor, IOutput[]>;
|
|
82
79
|
/**
|
|
83
|
-
* Signal emitted when the outputs model changes
|
|
80
|
+
* Signal emitted when the outputs model changes.
|
|
84
81
|
*/
|
|
85
82
|
get modelChanged(): ISignal<KernelExecutor, IOutputAreaModel>;
|
|
86
83
|
}
|
|
@@ -3,13 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MIT License
|
|
5
5
|
*/
|
|
6
|
-
import { OutputAreaModel } from '@jupyterlab/outputarea';
|
|
7
6
|
import { PromiseDelegate } from '@lumino/coreutils';
|
|
8
7
|
import { Signal } from '@lumino/signaling';
|
|
8
|
+
import { OutputAreaModel } from '@jupyterlab/outputarea';
|
|
9
9
|
import { outputsAsString } from '../../utils/Utils';
|
|
10
|
-
/**
|
|
11
|
-
* A handler to execute code snippet.
|
|
12
|
-
*/
|
|
13
10
|
export class KernelExecutor {
|
|
14
11
|
_kernelConnection;
|
|
15
12
|
_outputs;
|
|
@@ -30,7 +27,6 @@ export class KernelExecutor {
|
|
|
30
27
|
*
|
|
31
28
|
* @param code Code to be executed
|
|
32
29
|
* @param options Callbacks on IOPub messages and on reply message
|
|
33
|
-
* and execution options
|
|
34
30
|
* @returns The outputs model
|
|
35
31
|
*
|
|
36
32
|
* @example
|
|
@@ -42,24 +38,29 @@ export class KernelExecutor {
|
|
|
42
38
|
* ```
|
|
43
39
|
*/
|
|
44
40
|
execute(code, { iopubMessageHooks = [], shellMessageHooks = [], silent, stopOnError, storeHistory, } = {}) {
|
|
45
|
-
|
|
41
|
+
this._shellMessageHooks = shellMessageHooks;
|
|
42
|
+
this._future = this._kernelConnection.requestExecute({
|
|
46
43
|
code,
|
|
47
44
|
allow_stdin: false,
|
|
48
|
-
silent,
|
|
49
|
-
stop_on_error: stopOnError,
|
|
50
|
-
store_history: storeHistory,
|
|
51
|
-
})
|
|
52
|
-
iopubMessageHooks.forEach(hook =>
|
|
53
|
-
this.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
45
|
+
// silent,
|
|
46
|
+
// stop_on_error: stopOnError,
|
|
47
|
+
// store_history: storeHistory,
|
|
48
|
+
});
|
|
49
|
+
iopubMessageHooks.forEach(hook => this._future.registerMessageHook(hook));
|
|
50
|
+
this._future.onIOPub = this._onIOPub;
|
|
51
|
+
this._future.onReply = this._onReply;
|
|
52
|
+
/*
|
|
53
|
+
FIXME Handle stdin. It will require updating the `allow_stdin` param aboove .
|
|
54
|
+
future.onStdin = msg => {
|
|
55
|
+
if (KernelMessage.isInputRequestMsg(msg)) {
|
|
56
|
+
this.onInputRequest(msg, value);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
*/
|
|
60
|
+
// Wait for future to be done before resolving.
|
|
61
|
+
this._future.done.then(() => {
|
|
62
|
+
this._executed.resolve(this._model);
|
|
63
|
+
});
|
|
63
64
|
return this._executed.promise;
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
@@ -78,7 +79,17 @@ export class KernelExecutor {
|
|
|
78
79
|
const output = { ...message.content, output_type: messageType };
|
|
79
80
|
switch (messageType) {
|
|
80
81
|
case 'execute_result':
|
|
82
|
+
this._outputs.push(message.content);
|
|
83
|
+
this._outputsChanged.emit(this._outputs);
|
|
84
|
+
this._model.add(output);
|
|
85
|
+
this._modelChanged.emit(this._model);
|
|
86
|
+
break;
|
|
81
87
|
case 'display_data':
|
|
88
|
+
this._outputs.push(message.content);
|
|
89
|
+
this._outputsChanged.emit(this._outputs);
|
|
90
|
+
this._model.add(output);
|
|
91
|
+
this._modelChanged.emit(this._model);
|
|
92
|
+
break;
|
|
82
93
|
case 'stream':
|
|
83
94
|
case 'error':
|
|
84
95
|
this._outputs.push(message.content);
|
|
@@ -86,11 +97,10 @@ export class KernelExecutor {
|
|
|
86
97
|
this._model.add(output);
|
|
87
98
|
this._modelChanged.emit(this._model);
|
|
88
99
|
break;
|
|
89
|
-
case 'clear_output':
|
|
100
|
+
case 'clear_output':
|
|
90
101
|
const wait = message.content.wait;
|
|
91
102
|
this._model.clear(wait);
|
|
92
103
|
break;
|
|
93
|
-
}
|
|
94
104
|
case 'update_display_data':
|
|
95
105
|
this._outputs.push(message.content);
|
|
96
106
|
this._outputsChanged.emit(this._outputs);
|
|
@@ -99,16 +109,37 @@ export class KernelExecutor {
|
|
|
99
109
|
this._modelChanged.emit(this._model);
|
|
100
110
|
break;
|
|
101
111
|
case 'status':
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
executionState;
|
|
106
|
-
}
|
|
112
|
+
// execution_state: 'busy' 'starting' 'terminating' 'restarting' 'initializing' 'connecting' 'disconnected' 'dead' 'unknown' 'idle'
|
|
113
|
+
const executionState = message.content.execution_state;
|
|
114
|
+
executionState;
|
|
107
115
|
break;
|
|
108
116
|
default:
|
|
109
117
|
break;
|
|
110
118
|
}
|
|
111
119
|
};
|
|
120
|
+
/*
|
|
121
|
+
private _onReply = (message: KernelMessage.IShellMessage): void => {
|
|
122
|
+
if (this._future?.msg.header.msg_id !== message.parent_header.msg_id) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const messageType: KernelMessage.ShellMessageType = message.header.msg_type;
|
|
126
|
+
this._shellMessageHooks.forEach(hook => hook(message));
|
|
127
|
+
switch (messageType) {
|
|
128
|
+
case 'execute_reply':
|
|
129
|
+
const output: IOutput = {
|
|
130
|
+
output_type: 'display_data',
|
|
131
|
+
data: (message.content as IExecuteResult).data as IMimeBundle,
|
|
132
|
+
metadata: {},
|
|
133
|
+
};
|
|
134
|
+
this._outputs.push(message.content as IExecuteResult);
|
|
135
|
+
this._outputsChanged.emit(this._outputs);
|
|
136
|
+
this._model.add(output);
|
|
137
|
+
break;
|
|
138
|
+
default:
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
*/
|
|
112
143
|
_onReply = (message) => {
|
|
113
144
|
if (this._future?.msg.header.msg_id !== message.parent_header.msg_id) {
|
|
114
145
|
return;
|
|
@@ -148,10 +179,9 @@ export class KernelExecutor {
|
|
|
148
179
|
this._modelChanged.emit(this._model);
|
|
149
180
|
}
|
|
150
181
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
});
|
|
182
|
+
};
|
|
183
|
+
registerIOPubMessageHook = (msg) => {
|
|
184
|
+
this._future?.registerMessageHook(msg);
|
|
155
185
|
};
|
|
156
186
|
/**
|
|
157
187
|
* Promise that resolves when the execution is done.
|
|
@@ -170,25 +200,26 @@ export class KernelExecutor {
|
|
|
170
200
|
});
|
|
171
201
|
}
|
|
172
202
|
/**
|
|
173
|
-
* Kernel outputs emitted
|
|
203
|
+
* Kernel outputs emitted.
|
|
174
204
|
*/
|
|
175
205
|
get outputs() {
|
|
176
206
|
return this._outputs;
|
|
177
207
|
}
|
|
178
208
|
/**
|
|
179
|
-
*
|
|
209
|
+
* Kernel outputs wrapped in a model.
|
|
180
210
|
*/
|
|
181
|
-
get
|
|
182
|
-
return this.
|
|
211
|
+
get model() {
|
|
212
|
+
return this._model;
|
|
183
213
|
}
|
|
184
214
|
/**
|
|
185
|
-
*
|
|
215
|
+
* Signal emitted when the outputs list changes.
|
|
186
216
|
*/
|
|
187
|
-
get
|
|
188
|
-
|
|
217
|
+
get outputsChanged() {
|
|
218
|
+
0;
|
|
219
|
+
return this._outputsChanged;
|
|
189
220
|
}
|
|
190
221
|
/**
|
|
191
|
-
* Signal emitted when the outputs model changes
|
|
222
|
+
* Signal emitted when the outputs model changes.
|
|
192
223
|
*/
|
|
193
224
|
get modelChanged() {
|
|
194
225
|
return this._modelChanged;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KernelExecutor.js","sourceRoot":"","sources":["../../../src/jupyter/kernel/KernelExecutor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"KernelExecutor.js","sourceRoot":"","sources":["../../../src/jupyter/kernel/KernelExecutor.ts"],"names":[],"mappings":"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"}
|