commit
0aaafce4af
@ -0,0 +1,198 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// Copyright (C) 2013 The IPython Development Team
|
||||
//
|
||||
// Distributed under the terms of the BSD License. The full license is in
|
||||
// the file COPYING, distributed as part of this software.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//============================================================================
|
||||
// Comm and CommManager bases
|
||||
//============================================================================
|
||||
/**
|
||||
* Base Comm classes
|
||||
* @module IPython
|
||||
* @namespace IPython
|
||||
* @submodule comm
|
||||
*/
|
||||
|
||||
var IPython = (function (IPython) {
|
||||
"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) {
|
||||
// Create a new Comm, register it, and open its Kernel-side counterpart
|
||||
// Mimics the auto-registration in `Comm.__init__` in the IPython Comm
|
||||
var comm = new Comm(target_name);
|
||||
this.register_comm(comm);
|
||||
comm.open(data, callbacks, metadata);
|
||||
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] = comm;
|
||||
comm.kernel = this.kernel;
|
||||
return comm.comm_id;
|
||||
};
|
||||
|
||||
CommManager.prototype.unregister_comm = function (comm_id) {
|
||||
// Remove a comm from the mapping
|
||||
delete this.comms[comm_id];
|
||||
};
|
||||
|
||||
// comm message handlers
|
||||
|
||||
CommManager.prototype.comm_open = function (msg) {
|
||||
var content = msg.content;
|
||||
var f = this.targets[content.target_name];
|
||||
if (f === undefined) {
|
||||
console.log("No such target registered: ", content.target_name);
|
||||
console.log("Available targets are: ", this.targets);
|
||||
return;
|
||||
}
|
||||
var comm = new Comm(content.target_name, content.comm_id);
|
||||
this.register_comm(comm);
|
||||
try {
|
||||
f(comm, msg);
|
||||
} catch (e) {
|
||||
console.log("Exception opening new comm:", e, msg);
|
||||
comm.close();
|
||||
this.unregister_comm(comm);
|
||||
}
|
||||
};
|
||||
|
||||
CommManager.prototype.comm_close = function (msg) {
|
||||
var content = msg.content;
|
||||
var comm = this.comms[content.comm_id];
|
||||
if (comm === undefined) {
|
||||
return;
|
||||
}
|
||||
delete this.comms[content.comm_id];
|
||||
try {
|
||||
comm.handle_close(msg);
|
||||
} catch (e) {
|
||||
console.log("Exception closing comm: ", e, msg);
|
||||
}
|
||||
};
|
||||
|
||||
CommManager.prototype.comm_msg = function (msg) {
|
||||
var content = msg.content;
|
||||
var comm = this.comms[content.comm_id];
|
||||
if (comm === undefined) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
comm.handle_msg(msg);
|
||||
} catch (e) {
|
||||
console.log("Exception handling comm msg: ", e, msg);
|
||||
}
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// Comm base class
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
var Comm = function (target_name, comm_id) {
|
||||
this.target_name = target_name;
|
||||
this.comm_id = comm_id || IPython.utils.uuid();
|
||||
this._msg_callback = this._close_callback = null;
|
||||
};
|
||||
|
||||
// methods for sending messages
|
||||
Comm.prototype.open = function (data, callbacks, metadata) {
|
||||
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);
|
||||
};
|
||||
|
||||
Comm.prototype.send = function (data, callbacks, metadata) {
|
||||
var content = {
|
||||
comm_id : this.comm_id,
|
||||
data : data || {},
|
||||
};
|
||||
return this.kernel.send_shell_message("comm_msg", content, callbacks, metadata);
|
||||
};
|
||||
|
||||
Comm.prototype.close = function (data, callbacks, metadata) {
|
||||
var content = {
|
||||
comm_id : this.comm_id,
|
||||
data : data || {},
|
||||
};
|
||||
return this.kernel.send_shell_message("comm_close", content, callbacks, metadata);
|
||||
};
|
||||
|
||||
// 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._maybe_callback = function (key, msg) {
|
||||
var callback = this['_' + key + '_callback'];
|
||||
if (callback) {
|
||||
try {
|
||||
callback(msg);
|
||||
} catch (e) {
|
||||
console.log("Exception in Comm callback", e, msg);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Comm.prototype.handle_msg = function (msg) {
|
||||
this._maybe_callback('msg', msg);
|
||||
};
|
||||
|
||||
Comm.prototype.handle_close = function (msg) {
|
||||
this._maybe_callback('close', msg);
|
||||
};
|
||||
|
||||
IPython.CommManager = CommManager;
|
||||
IPython.Comm = Comm;
|
||||
|
||||
return IPython;
|
||||
|
||||
}(IPython));
|
||||
|
||||
@ -0,0 +1,269 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": ""
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
"worksheets": [
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 1,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Basic Output"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from IPython.display import display"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"print 'hi'"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"display('hi')"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"1"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%matplotlib inline\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"plt.plot([1,3,2])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%%javascript\n",
|
||||
"console.log(\"I ran!\");"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%%html\n",
|
||||
"<b>bold</b>"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%%latex\n",
|
||||
"$$\n",
|
||||
"a = 5\n",
|
||||
"$$"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 1,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"input_request"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"raw_input(\"prompt > \")"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 1,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"set_next_input"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%%writefile tst.py\n",
|
||||
"def foo():\n",
|
||||
" pass\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%load tst.py"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 1,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Pager in execute_reply"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"plt?"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 1,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"object_info"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"# press tab after parentheses\n",
|
||||
"int("
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 1,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"complete"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"# pres tab after f\n",
|
||||
"f"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 1,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"clear_output"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import sys\n",
|
||||
"from IPython.display import clear_output"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"for i in range(10):\n",
|
||||
" clear_output()\n",
|
||||
" time.sleep(0.25)\n",
|
||||
" print i\n",
|
||||
" sys.stdout.flush()\n",
|
||||
" time.sleep(0.25)\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"for i in range(10):\n",
|
||||
" clear_output(wait=True)\n",
|
||||
" time.sleep(0.25)\n",
|
||||
" print i\n",
|
||||
" sys.stdout.flush()\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Reference in new issue