Skip to content

Commit 6cc710d

Browse files
committed
Add mechanism to be able to react on kernel status change from the
frontend
1 parent e09838e commit 6cc710d

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

webapp/components/NetPyNE.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class NetPyNE extends React.Component {
6666
return;
6767
}
6868
this.loaded = true;
69-
console.log('Netpyne is ready');
69+
console.log('NetPyNE-UI component is ready');
7070
if (window !== window.parent) {
7171
window.parent.postMessage({
7272
type: 'APP_READY',
@@ -85,6 +85,10 @@ class NetPyNE extends React.Component {
8585
// A message from the parent frame can specify the file to load
8686
window.addEventListener('message', loadFromEvent);
8787
// window.load = loadFromEvent
88+
const logme = (event) => {
89+
console.log("!!!! EVENT", event)
90+
}
91+
window.addEventListener('kernelstatus', logme)
8892
}
8993

9094
componentWillUnmount () {

webapp/components/general/GeppettoJupyterUtils.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
1+
const registerKernelListeners = () => {
2+
try {
3+
if(IPython.notebook.kernel == null) {
4+
console.warn("Kernel not initialized. Waiting to register kernel event listeners");
5+
setTimeout(registerKernelListeners, 500);
6+
return;
7+
}
8+
} catch (error) {
9+
console.warn("IPython not initialized. Waiting to register kernel event listeners");
10+
setTimeout(registerKernelListeners, 500);
11+
return
12+
}
13+
14+
const notebook = IPython.notebook;
15+
const handleKernelStatusChange = (event, data) => {
16+
const kernelStatusEvent = new CustomEvent("kernelstatus", {
17+
detail: {
18+
"type": event.type,
19+
...data
20+
},
21+
});
22+
window.dispatchEvent(kernelStatusEvent);
23+
};
24+
25+
notebook.events.on('kernel_created.Kernel', handleKernelStatusChange);
26+
notebook.events.on('kernel_reconnecting.Kernel', handleKernelStatusChange);
27+
notebook.events.on('kernel_connected.Kernel', handleKernelStatusChange);
28+
notebook.events.on('kernel_starting.Kernel', handleKernelStatusChange);
29+
notebook.events.on('kernel_restarting.Kernel', handleKernelStatusChange);
30+
notebook.events.on('kernel_autorestarting.Kernel', handleKernelStatusChange);
31+
notebook.events.on('kernel_interrupting.Kernel', handleKernelStatusChange);
32+
notebook.events.on('kernel_disconnected.Kernel', handleKernelStatusChange);
33+
notebook.events.on('kernel_ready.Kernel', handleKernelStatusChange);
34+
notebook.events.on('kernel_killed.Kernel', handleKernelStatusChange);
35+
notebook.events.on('kernel_dead.Kernel', handleKernelStatusChange);
36+
}
37+
registerKernelListeners();
38+
139
const handle_output = function (data) {
240
// data is the object passed to the callback from the kernel execution
341
switch (data.msg_type) {

0 commit comments

Comments
 (0)