Uploaded Test files
This commit is contained in:
parent
f584ad9d97
commit
2e81cb7d99
16627 changed files with 2065359 additions and 102444 deletions
213
venv/Lib/site-packages/notebook/static/services/kernels/comm.js
Normal file
213
venv/Lib/site-packages/notebook/static/services/kernels/comm.js
Normal file
|
@ -0,0 +1,213 @@
|
|||
// Copyright (c) Jupyter Development Team.
|
||||
// Distributed under the terms of the Modified BSD License.
|
||||
|
||||
define([
|
||||
'jquery',
|
||||
'base/js/utils',
|
||||
], function($, utils) {
|
||||
"use strict";
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// CommManager class
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
var CommManager = function (kernel) {
|
||||
this.comms = {};
|
||||
this.targets = {};
|
||||
if (kernel !== undefined) {
|
||||
this.init_kernel(kernel);
|
||||
}
|
||||
};
|
||||
|
||||
CommManager.prototype.init_kernel = function (kernel) {
|
||||
/**
|
||||
* connect the kernel, and register message handlers
|
||||
*/
|
||||
this.kernel = kernel;
|
||||
var msg_types = ['comm_open', 'comm_msg', 'comm_close'];
|
||||
for (var i = 0; i < msg_types.length; i++) {
|
||||
var msg_type = msg_types[i];
|
||||
kernel.register_iopub_handler(msg_type, $.proxy(this[msg_type], this));
|
||||
}
|
||||
};
|
||||
|
||||
CommManager.prototype.new_comm = function (target_name, data, callbacks, metadata, comm_id, buffers) {
|
||||
/**
|
||||
* Create a new Comm, register it, and open its Kernel-side counterpart
|
||||
* Mimics the auto-registration in `Comm.__init__` in the Jupyter Comm.
|
||||
*
|
||||
* argument comm_id is optional
|
||||
*/
|
||||
var comm = new Comm(target_name, comm_id);
|
||||
this.register_comm(comm);
|
||||
comm.open(data, callbacks, metadata, buffers);
|
||||
return comm;
|
||||
};
|
||||
|
||||
CommManager.prototype.register_target = function (target_name, f) {
|
||||
/**
|
||||
* Register a target function for a given target name
|
||||
*/
|
||||
this.targets[target_name] = f;
|
||||
};
|
||||
|
||||
CommManager.prototype.unregister_target = function (target_name, f) {
|
||||
/**
|
||||
* Unregister a target function for a given target name
|
||||
*/
|
||||
delete this.targets[target_name];
|
||||
};
|
||||
|
||||
CommManager.prototype.register_comm = function (comm) {
|
||||
/**
|
||||
* Register a comm in the mapping
|
||||
*/
|
||||
this.comms[comm.comm_id] = Promise.resolve(comm);
|
||||
comm.kernel = this.kernel;
|
||||
return comm.comm_id;
|
||||
};
|
||||
|
||||
CommManager.prototype.unregister_comm = function (comm) {
|
||||
/**
|
||||
* Remove a comm from the mapping
|
||||
*/
|
||||
delete this.comms[comm.comm_id];
|
||||
};
|
||||
|
||||
// comm message handlers
|
||||
|
||||
CommManager.prototype.comm_open = function (msg) {
|
||||
var content = msg.content;
|
||||
var that = this;
|
||||
var comm_id = content.comm_id;
|
||||
|
||||
this.comms[comm_id] = utils.load_class(content.target_name, content.target_module,
|
||||
this.targets).then(function(target) {
|
||||
var comm = new Comm(content.target_name, comm_id);
|
||||
comm.kernel = that.kernel;
|
||||
try {
|
||||
var response = target(comm, msg);
|
||||
} catch (e) {
|
||||
comm.close();
|
||||
that.unregister_comm(comm);
|
||||
var wrapped_error = new utils.WrappedError("Exception opening new comm", e);
|
||||
console.error(wrapped_error);
|
||||
return Promise.reject(wrapped_error);
|
||||
}
|
||||
// Regardless of the target return value, we need to
|
||||
// then return the comm
|
||||
return Promise.resolve(response).then(function() {return comm;});
|
||||
}, utils.reject('Could not open comm', true));
|
||||
return this.comms[comm_id];
|
||||
};
|
||||
|
||||
CommManager.prototype.comm_close = function(msg) {
|
||||
var content = msg.content;
|
||||
if (this.comms[content.comm_id] === undefined) {
|
||||
console.error('Comm promise not found for comm id ' + content.comm_id);
|
||||
return;
|
||||
}
|
||||
var that = this;
|
||||
this.comms[content.comm_id] = this.comms[content.comm_id].then(function(comm) {
|
||||
that.unregister_comm(comm);
|
||||
try {
|
||||
comm.handle_close(msg);
|
||||
} catch (e) {
|
||||
console.log("Exception closing comm: ", e, e.stack, msg);
|
||||
}
|
||||
// don't return a comm, so that further .then() functions
|
||||
// get an undefined comm input
|
||||
});
|
||||
return this.comms[content.comm_id];
|
||||
};
|
||||
|
||||
CommManager.prototype.comm_msg = function(msg) {
|
||||
var content = msg.content;
|
||||
if (this.comms[content.comm_id] === undefined) {
|
||||
console.error('Comm promise not found for comm id ' + content.comm_id);
|
||||
return;
|
||||
}
|
||||
|
||||
this.comms[content.comm_id] = this.comms[content.comm_id].then(function(comm) {
|
||||
return (Promise.resolve(comm.handle_msg(msg))
|
||||
.catch(utils.reject('Exception handling comm message'))
|
||||
.then(function() {return comm;}));
|
||||
});
|
||||
return this.comms[content.comm_id];
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// Comm base class
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
var Comm = function (target_name, comm_id) {
|
||||
this.target_name = target_name;
|
||||
this.comm_id = comm_id || utils.uuid();
|
||||
this._msg_callback = this._close_callback = null;
|
||||
};
|
||||
|
||||
// methods for sending messages
|
||||
Comm.prototype.open = function (data, callbacks, metadata, buffers) {
|
||||
var content = {
|
||||
comm_id : this.comm_id,
|
||||
target_name : this.target_name,
|
||||
data : data || {},
|
||||
};
|
||||
return this.kernel.send_shell_message("comm_open", content, callbacks, metadata, buffers);
|
||||
};
|
||||
|
||||
Comm.prototype.send = function (data, callbacks, metadata, buffers) {
|
||||
var content = {
|
||||
comm_id : this.comm_id,
|
||||
data : data || {},
|
||||
};
|
||||
return this.kernel.send_shell_message("comm_msg", content, callbacks, metadata, buffers);
|
||||
};
|
||||
|
||||
Comm.prototype.close = function (data, callbacks, metadata, buffers) {
|
||||
var content = {
|
||||
comm_id : this.comm_id,
|
||||
data : data || {},
|
||||
};
|
||||
return this.kernel.send_shell_message("comm_close", content, callbacks, metadata, buffers);
|
||||
};
|
||||
|
||||
// methods for registering callbacks for incoming messages
|
||||
Comm.prototype._register_callback = function (key, callback) {
|
||||
this['_' + key + '_callback'] = callback;
|
||||
};
|
||||
|
||||
Comm.prototype.on_msg = function (callback) {
|
||||
this._register_callback('msg', callback);
|
||||
};
|
||||
|
||||
Comm.prototype.on_close = function (callback) {
|
||||
this._register_callback('close', callback);
|
||||
};
|
||||
|
||||
// methods for handling incoming messages
|
||||
|
||||
Comm.prototype._callback = function (key, msg) {
|
||||
var callback = this['_' + key + '_callback'];
|
||||
if (callback) {
|
||||
try {
|
||||
return callback(msg);
|
||||
} catch (e) {
|
||||
console.log("Exception in Comm callback", e, e.stack, msg);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Comm.prototype.handle_msg = function (msg) {
|
||||
return this._callback('msg', msg);
|
||||
};
|
||||
|
||||
Comm.prototype.handle_close = function (msg) {
|
||||
this._callback('close', msg);
|
||||
};
|
||||
|
||||
return {
|
||||
'CommManager': CommManager,
|
||||
'Comm': Comm
|
||||
};
|
||||
});
|
1263
venv/Lib/site-packages/notebook/static/services/kernels/kernel.js
Normal file
1263
venv/Lib/site-packages/notebook/static/services/kernels/kernel.js
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,126 @@
|
|||
// Copyright (c) Jupyter Development Team.
|
||||
// Distributed under the terms of the Modified BSD License.
|
||||
|
||||
define([
|
||||
'underscore',
|
||||
], function (_) {
|
||||
"use strict";
|
||||
|
||||
var _deserialize_array_buffer = function (buf) {
|
||||
var data = new DataView(buf);
|
||||
// read the header: 1 + nbufs 32b integers
|
||||
var nbufs = data.getUint32(0);
|
||||
var offsets = [];
|
||||
var i;
|
||||
for (i = 1; i <= nbufs; i++) {
|
||||
offsets.push(data.getUint32(i * 4));
|
||||
}
|
||||
var json_bytes = new Uint8Array(buf.slice(offsets[0], offsets[1]));
|
||||
var msg = JSON.parse(
|
||||
(new TextDecoder('utf8')).decode(json_bytes)
|
||||
);
|
||||
// the remaining chunks are stored as DataViews in msg.buffers
|
||||
msg.buffers = [];
|
||||
var start, stop;
|
||||
for (i = 1; i < nbufs; i++) {
|
||||
start = offsets[i];
|
||||
stop = offsets[i+1] || buf.byteLength;
|
||||
msg.buffers.push(new DataView(buf.slice(start, stop)));
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
|
||||
var _deserialize_binary = function(data) {
|
||||
/**
|
||||
* deserialize the binary message format
|
||||
* callback will be called with a message whose buffers attribute
|
||||
* will be an array of DataViews.
|
||||
*/
|
||||
if (data instanceof Blob) {
|
||||
// data is Blob, have to deserialize from ArrayBuffer in reader callback
|
||||
var reader = new FileReader();
|
||||
var promise = new Promise(function(resolve, reject) {
|
||||
reader.onload = function () {
|
||||
var msg = _deserialize_array_buffer(this.result);
|
||||
resolve(msg);
|
||||
};
|
||||
});
|
||||
reader.readAsArrayBuffer(data);
|
||||
return promise;
|
||||
} else {
|
||||
// data is ArrayBuffer, can deserialize directly
|
||||
var msg = _deserialize_array_buffer(data);
|
||||
return msg;
|
||||
}
|
||||
};
|
||||
|
||||
var deserialize = function (data) {
|
||||
/**
|
||||
* deserialize a message and return a promise for the unpacked message
|
||||
*/
|
||||
if (typeof data === "string") {
|
||||
// text JSON message
|
||||
return Promise.resolve(JSON.parse(data));
|
||||
} else {
|
||||
// binary message
|
||||
return Promise.resolve(_deserialize_binary(data));
|
||||
}
|
||||
};
|
||||
|
||||
var _serialize_binary = function (msg) {
|
||||
/**
|
||||
* implement the binary serialization protocol
|
||||
* serializes JSON message to ArrayBuffer
|
||||
*/
|
||||
msg = _.clone(msg);
|
||||
var offsets = [];
|
||||
var buffers = [];
|
||||
var i;
|
||||
for (i = 0; i < msg.buffers.length; i++) {
|
||||
// msg.buffers elements could be either views or ArrayBuffers
|
||||
// buffers elements are ArrayBuffers
|
||||
var b = msg.buffers[i];
|
||||
buffers.push(b.buffer instanceof ArrayBuffer ? b.buffer : b);
|
||||
}
|
||||
delete msg.buffers;
|
||||
var json_utf8 = (new TextEncoder('utf8')).encode(JSON.stringify(msg));
|
||||
buffers.unshift(json_utf8);
|
||||
var nbufs = buffers.length;
|
||||
offsets.push(4 * (nbufs + 1));
|
||||
for (i = 0; i + 1 < buffers.length; i++) {
|
||||
offsets.push(offsets[offsets.length-1] + buffers[i].byteLength);
|
||||
}
|
||||
var msg_buf = new Uint8Array(
|
||||
offsets[offsets.length-1] + buffers[buffers.length-1].byteLength
|
||||
);
|
||||
// use DataView.setUint32 for network byte-order
|
||||
var view = new DataView(msg_buf.buffer);
|
||||
// write nbufs to first 4 bytes
|
||||
view.setUint32(0, nbufs);
|
||||
// write offsets to next 4 * nbufs bytes
|
||||
for (i = 0; i < offsets.length; i++) {
|
||||
view.setUint32(4 * (i+1), offsets[i]);
|
||||
}
|
||||
// write all the buffers at their respective offsets
|
||||
for (i = 0; i < buffers.length; i++) {
|
||||
msg_buf.set(new Uint8Array(buffers[i]), offsets[i]);
|
||||
}
|
||||
|
||||
// return raw ArrayBuffer
|
||||
return msg_buf.buffer;
|
||||
};
|
||||
|
||||
var serialize = function (msg) {
|
||||
if (msg.buffers && msg.buffers.length) {
|
||||
return _serialize_binary(msg);
|
||||
} else {
|
||||
return JSON.stringify(msg);
|
||||
}
|
||||
};
|
||||
|
||||
var exports = {
|
||||
deserialize : deserialize,
|
||||
serialize: serialize
|
||||
};
|
||||
return exports;
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue