jp-kernel
v2.0.0
Published
Generic Node.js kernel for the Jupyter notebook
Downloads
1,714
Maintainers
Readme
jp-kernel
jp-kernel
is an npm module for implementing a
Jupyter kernel
that interacts with a Node.js session.
jp-kernel
is a spin-off library from
IJavascript, a Javascript kernel for
the Jupyter notebook. It is currently used to implement
the following kernels:
Anouncements
Version 2.0.0 require Node.js v6 or above so that we can use
jmp@2
.Version 1.3.0 (unpublished) use
jmp@2
if compatible with the version of Node.js.Version 1.2.0 implements message
clear_output
.Version 1.1.0 ensures metadata is defined in
display_data
messages.Version 1.0.0 (stable API) handles flag
--hide-execution-result
.Version 0.1.5 handles
input_request
andinput_reply
messages.Version 0.1.4 handles
display_data
andupdate_display_data
messages.Version 0.1.0 depends on
[email protected]
, and[email protected]
depends onzeromq
(which provides prebuilt bindings to the ZMQ library and is now maintained by the zeromq organisation).Version 0.0.1 is the initial release based on IJavascript v5.0.13.
Install
The latest stable release is published on
npm
and can be installed by
running:
npm install jp-kernel
The master branch in the github repository provides the latest development version and can be installed by:
git clone https://github.com/n-riesco/jp-kernel.git
cd jp-kernel
npm install
Usage
The source code documentation generated using JSDoc can be found here.
For real examples of usage, see the source documentation for:
Contributions
First of all, thank you for taking the time to contribute. Please, read CONTRIBUTING.md and use the issue tracker for any contributions: support requests, bug reports, enhancement requests, pull requests, ...
Next API v2
The jp-kernel
API in the initial release v0.0.1 came into existence by a
process of evolution. I want to take the opportunity that distributing
jp-kernel
as a package offers to design a new API. Below is a preview of what
I have in mind:
class Kernel {
constructor(config) {
this.config = config;
this.executionCount = 0;
this.session = new Session({
cwd: this.config.cwd,
parser: this.config.parser,
transpile: this.config.transpile,
});
this._init();
}
_init(initCB) {}
interrupt(interruptCB) {}
destroy(destroyCB) {}
restart(restartCB) {}
_onShellMessage(message) {}
_onControlMessage(message) {}
_onIOPubMessage(message) {}
_onHBMessage(message) {}
}
class KernelV4 extends Kernel {
onStdout(data) {}
onStderr(data) {}
onShell_xxx(request) {}
}
class KernelV5 extends Kernel {
onStdout(data) {}
onStderr(data) {}
onShell_xxx(request) {}
}
class Config {
constructor(kernelConfig) {
this.hideUndefined = kernelConfig.hideUndefined;
this.initSession = kernelConfig.initSession;
this.initScripts = kernelConfig.initScripts;
this.kernelInfoReply = kernelConfig.kernelInfoReply;
this.protocolVersion = kernelConfig.protocolVersion;
this.connection = kernelConfig.connection;
this.parser = kernelConfig.parser;
}
}
class Connection {
constructor(connectionConfig) {
this.config = connectionConfig;
this.socket = {
control: new jmp.Socket("router", scheme, key),
shell: new jmp.Socket("router", scheme, key),
iopub: new jmp.Socket("pub", scheme, key),
hb: zmq.createSocket("rep"),
};
}
connect(listeners) {}
disconnect() {}
}
class Parser{
constructor() {
throw new Error("Cannot construct an abstract class");
}
getIdentifier(code, position) {
throw new Error("Not implemented");
}
validate(code) {
throw new Error("Not implemented");
}
}