iruby 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +5 -0
- data/IRuby-Example.ipynb +142 -682
- data/examples/display.ipynb +1 -1
- data/examples/history.ipynb +171 -0
- data/examples/stdout.ipynb +1 -1
- data/examples/table.ipynb +40 -1
- data/lib/iruby/backend.rb +40 -4
- data/lib/iruby/comm.rb +11 -25
- data/lib/iruby/command.rb +2 -2
- data/lib/iruby/formatter.rb +13 -5
- data/lib/iruby/kernel.rb +58 -111
- data/lib/iruby/ostream.rb +1 -1
- data/lib/iruby/session.rb +42 -22
- data/lib/iruby/utils.rb +1 -1
- data/lib/iruby/version.rb +1 -1
- metadata +2 -1
data/examples/display.ipynb
CHANGED
@@ -0,0 +1,171 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "code",
|
5
|
+
"execution_count": 1,
|
6
|
+
"metadata": {
|
7
|
+
"collapsed": false
|
8
|
+
},
|
9
|
+
"outputs": [
|
10
|
+
{
|
11
|
+
"data": {
|
12
|
+
"text/plain": [
|
13
|
+
":out1"
|
14
|
+
]
|
15
|
+
},
|
16
|
+
"execution_count": 1,
|
17
|
+
"metadata": {},
|
18
|
+
"output_type": "execute_result"
|
19
|
+
}
|
20
|
+
],
|
21
|
+
"source": [
|
22
|
+
":out1"
|
23
|
+
]
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"cell_type": "code",
|
27
|
+
"execution_count": 2,
|
28
|
+
"metadata": {
|
29
|
+
"collapsed": false
|
30
|
+
},
|
31
|
+
"outputs": [
|
32
|
+
{
|
33
|
+
"data": {
|
34
|
+
"text/plain": [
|
35
|
+
":out2"
|
36
|
+
]
|
37
|
+
},
|
38
|
+
"execution_count": 2,
|
39
|
+
"metadata": {},
|
40
|
+
"output_type": "execute_result"
|
41
|
+
}
|
42
|
+
],
|
43
|
+
"source": [
|
44
|
+
":out2"
|
45
|
+
]
|
46
|
+
},
|
47
|
+
{
|
48
|
+
"cell_type": "code",
|
49
|
+
"execution_count": 3,
|
50
|
+
"metadata": {
|
51
|
+
"collapsed": false
|
52
|
+
},
|
53
|
+
"outputs": [
|
54
|
+
{
|
55
|
+
"data": {
|
56
|
+
"text/plain": [
|
57
|
+
":out3"
|
58
|
+
]
|
59
|
+
},
|
60
|
+
"execution_count": 3,
|
61
|
+
"metadata": {},
|
62
|
+
"output_type": "execute_result"
|
63
|
+
}
|
64
|
+
],
|
65
|
+
"source": [
|
66
|
+
":out3"
|
67
|
+
]
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"cell_type": "code",
|
71
|
+
"execution_count": 4,
|
72
|
+
"metadata": {
|
73
|
+
"collapsed": false
|
74
|
+
},
|
75
|
+
"outputs": [
|
76
|
+
{
|
77
|
+
"name": "stdout",
|
78
|
+
"output_type": "stream",
|
79
|
+
"text": [
|
80
|
+
":out1\n",
|
81
|
+
":out2\n",
|
82
|
+
":out3\n",
|
83
|
+
":out1\n",
|
84
|
+
":out2\n",
|
85
|
+
":out3\n",
|
86
|
+
":out1\n",
|
87
|
+
":out2\n",
|
88
|
+
":out3\n",
|
89
|
+
":out1\n",
|
90
|
+
":out2\n",
|
91
|
+
":out3\n",
|
92
|
+
":out1\n",
|
93
|
+
":out2\n",
|
94
|
+
":out3\n",
|
95
|
+
"out1\n",
|
96
|
+
"out2\n",
|
97
|
+
"out3\n",
|
98
|
+
"out1\n",
|
99
|
+
"out2\n",
|
100
|
+
"out3\n",
|
101
|
+
"out1\n",
|
102
|
+
"out2\n",
|
103
|
+
"out3\n",
|
104
|
+
"out1\n",
|
105
|
+
"out2\n",
|
106
|
+
"out3\n",
|
107
|
+
"out1\n",
|
108
|
+
"out2\n",
|
109
|
+
"out3\n"
|
110
|
+
]
|
111
|
+
}
|
112
|
+
],
|
113
|
+
"source": [
|
114
|
+
"puts _iii\n",
|
115
|
+
"puts _ii\n",
|
116
|
+
"puts _i\n",
|
117
|
+
"\n",
|
118
|
+
"puts _i1\n",
|
119
|
+
"puts _i2\n",
|
120
|
+
"puts _i3\n",
|
121
|
+
"\n",
|
122
|
+
"puts _ih[1]\n",
|
123
|
+
"puts _ih[2]\n",
|
124
|
+
"puts _ih[3]\n",
|
125
|
+
"\n",
|
126
|
+
"puts In[1]\n",
|
127
|
+
"puts In[2]\n",
|
128
|
+
"puts In[3]\n",
|
129
|
+
"\n",
|
130
|
+
"puts In[-3]\n",
|
131
|
+
"puts In[-2]\n",
|
132
|
+
"puts In[-1]\n",
|
133
|
+
"\n",
|
134
|
+
"puts ___\n",
|
135
|
+
"puts __\n",
|
136
|
+
"puts _\n",
|
137
|
+
"\n",
|
138
|
+
"puts _1\n",
|
139
|
+
"puts _2\n",
|
140
|
+
"puts _3\n",
|
141
|
+
"\n",
|
142
|
+
"puts _oh[1]\n",
|
143
|
+
"puts _oh[2]\n",
|
144
|
+
"puts _oh[3]\n",
|
145
|
+
"\n",
|
146
|
+
"puts Out[1]\n",
|
147
|
+
"puts Out[2]\n",
|
148
|
+
"puts Out[3]\n",
|
149
|
+
"\n",
|
150
|
+
"puts Out[-3]\n",
|
151
|
+
"puts Out[-2]\n",
|
152
|
+
"puts Out[-1]"
|
153
|
+
]
|
154
|
+
}
|
155
|
+
],
|
156
|
+
"metadata": {
|
157
|
+
"kernelspec": {
|
158
|
+
"display_name": "Ruby 2.1.2",
|
159
|
+
"language": "ruby",
|
160
|
+
"name": "ruby"
|
161
|
+
},
|
162
|
+
"language_info": {
|
163
|
+
"file_extension": "rb",
|
164
|
+
"mimetype": "text/ruby",
|
165
|
+
"name": "ruby",
|
166
|
+
"version": "2.1.2"
|
167
|
+
}
|
168
|
+
},
|
169
|
+
"nbformat": 4,
|
170
|
+
"nbformat_minor": 0
|
171
|
+
}
|
data/examples/stdout.ipynb
CHANGED
data/examples/table.ipynb
CHANGED
@@ -306,11 +306,50 @@
|
|
306
306
|
"source": [
|
307
307
|
"IRuby.display IRuby.table({a:1,b:2,c:[3,4]})"
|
308
308
|
]
|
309
|
+
},
|
310
|
+
{
|
311
|
+
"cell_type": "code",
|
312
|
+
"execution_count": 6,
|
313
|
+
"metadata": {
|
314
|
+
"collapsed": false
|
315
|
+
},
|
316
|
+
"outputs": [
|
317
|
+
{
|
318
|
+
"data": {
|
319
|
+
"text/html": [
|
320
|
+
"<table><tr><th><span style='color:red'>a</span></th><th>b</th><th>c</th></tr><tr><td>1</td><td>2</td><td>3</td></tr><tr><td></td><td></td><td><span style='color:red'>4</span></td></tr></table>"
|
321
|
+
],
|
322
|
+
"text/plain": [
|
323
|
+
"\"<table><tr><th><span style='color:red'>a</span></th><th>b</th><th>c</th></tr><tr><td>1</td><td>2</td><td>3</td></tr><tr><td></td><td></td><td><span style='color:red'>4</span></td></tr></table>\""
|
324
|
+
]
|
325
|
+
},
|
326
|
+
"metadata": {},
|
327
|
+
"output_type": "display_data"
|
328
|
+
}
|
329
|
+
],
|
330
|
+
"source": [
|
331
|
+
"class Red < String\n",
|
332
|
+
" def to_html\n",
|
333
|
+
" \"<span style='color:red'>#{self}</span>\"\n",
|
334
|
+
" end\n",
|
335
|
+
"end\n",
|
336
|
+
"\n",
|
337
|
+
"IRuby.display IRuby.table({Red.new(\"a\") => 1, b:2, c: [3, Red.new(\"4\")]})"
|
338
|
+
]
|
339
|
+
},
|
340
|
+
{
|
341
|
+
"cell_type": "code",
|
342
|
+
"execution_count": null,
|
343
|
+
"metadata": {
|
344
|
+
"collapsed": true
|
345
|
+
},
|
346
|
+
"outputs": [],
|
347
|
+
"source": []
|
309
348
|
}
|
310
349
|
],
|
311
350
|
"metadata": {
|
312
351
|
"kernelspec": {
|
313
|
-
"display_name": "Ruby",
|
352
|
+
"display_name": "Ruby 2.1.2",
|
314
353
|
"language": "ruby",
|
315
354
|
"name": "ruby"
|
316
355
|
},
|
data/lib/iruby/backend.rb
CHANGED
@@ -1,10 +1,45 @@
|
|
1
1
|
module IRuby
|
2
|
+
In, Out = [nil], [nil]
|
3
|
+
::In, ::Out = In, Out
|
4
|
+
|
5
|
+
module HistoryVariables
|
6
|
+
def eval(code, store_history)
|
7
|
+
b = TOPLEVEL_BINDING
|
8
|
+
|
9
|
+
b.local_variable_set(:_ih, In) unless b.local_variable_defined?(:_ih)
|
10
|
+
b.local_variable_set(:_oh, Out) unless b.local_variable_defined?(:_oh)
|
11
|
+
|
12
|
+
out = super
|
13
|
+
|
14
|
+
# TODO Add IRuby.cache_size which controls the size of the Out array
|
15
|
+
# and sets the oldest entries and _<n> variables to nil.
|
16
|
+
if store_history
|
17
|
+
b.local_variable_set("_#{Out.size}", out)
|
18
|
+
b.local_variable_set("_i#{In.size}", code)
|
19
|
+
|
20
|
+
Out << out
|
21
|
+
In << code
|
22
|
+
|
23
|
+
b.local_variable_set(:___, Out[-3])
|
24
|
+
b.local_variable_set(:__, Out[-2])
|
25
|
+
b.local_variable_set(:_, Out[-1])
|
26
|
+
b.local_variable_set(:_iii, In[-3])
|
27
|
+
b.local_variable_set(:_ii, In[-2])
|
28
|
+
b.local_variable_set(:_i, In[-1])
|
29
|
+
end
|
30
|
+
|
31
|
+
out
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
2
35
|
class PlainBackend
|
36
|
+
prepend HistoryVariables
|
37
|
+
|
3
38
|
def initialize
|
4
39
|
Bond.start(debug: true)
|
5
40
|
end
|
6
41
|
|
7
|
-
def eval(code)
|
42
|
+
def eval(code, store_history)
|
8
43
|
TOPLEVEL_BINDING.eval(code)
|
9
44
|
end
|
10
45
|
|
@@ -14,6 +49,8 @@ module IRuby
|
|
14
49
|
end
|
15
50
|
|
16
51
|
class PryBackend
|
52
|
+
prepend HistoryVariables
|
53
|
+
|
17
54
|
def initialize
|
18
55
|
require 'pry'
|
19
56
|
Pry.pager = false # Don't use the pager
|
@@ -23,11 +60,10 @@ module IRuby
|
|
23
60
|
raise 'Falling back to plain backend since your version of Pry is too old (the Pry instance doesn\'t support #eval). You may need to install the pry gem with --pre enabled.' unless @pry.respond_to?(:eval)
|
24
61
|
end
|
25
62
|
|
26
|
-
def eval(code)
|
27
|
-
@pry.last_result = nil
|
63
|
+
def eval(code, store_history)
|
28
64
|
raise SystemExit unless @pry.eval(code)
|
29
65
|
raise @pry.last_exception if @pry.last_result_is_exception?
|
30
|
-
@pry.push_initial_binding unless @pry.current_binding
|
66
|
+
@pry.push_initial_binding unless @pry.current_binding # ensure that we have a binding
|
31
67
|
@pry.last_result
|
32
68
|
end
|
33
69
|
|
data/lib/iruby/comm.rb
CHANGED
@@ -5,9 +5,8 @@ module IRuby
|
|
5
5
|
attr_writer :on_msg, :on_close
|
6
6
|
|
7
7
|
class << self
|
8
|
-
def
|
9
|
-
|
10
|
-
end
|
8
|
+
def target; @target ||= {} end
|
9
|
+
def comm; @comm ||= {} end
|
11
10
|
end
|
12
11
|
|
13
12
|
def initialize(target_name, comm_id = SecureRandom.uuid)
|
@@ -15,30 +14,17 @@ module IRuby
|
|
15
14
|
end
|
16
15
|
|
17
16
|
def open(**data)
|
18
|
-
|
19
|
-
|
20
|
-
data: data,
|
21
|
-
target_name: @target_name
|
22
|
-
}
|
23
|
-
Kernel.instance.session.send(:publish, 'comm_open', content)
|
24
|
-
Kernel.instance.comms[@comm_id] = self
|
17
|
+
Kernel.instance.session.send(:publish, :comm_open, comm_id: @comm_id, data: data, target_name: @target_name)
|
18
|
+
Comm.comm[@comm_id] = self
|
25
19
|
end
|
26
20
|
|
27
21
|
def send(**data)
|
28
|
-
|
29
|
-
comm_id: @comm_id,
|
30
|
-
data: data
|
31
|
-
}
|
32
|
-
Kernel.instance.session.send(:publish, 'comm_msg', content)
|
22
|
+
Kernel.instance.session.send(:publish, :comm_msg, comm_id: @comm_id, data: data)
|
33
23
|
end
|
34
24
|
|
35
25
|
def close(**data)
|
36
|
-
|
37
|
-
|
38
|
-
data: data
|
39
|
-
}
|
40
|
-
Kernel.instance.session.send(:publish, 'comm_close', content)
|
41
|
-
Kernel.instance.comms.delete(@comm_id)
|
26
|
+
Kernel.instance.session.send(:publish, :comm_close, comm_id: @comm_id, data: data)
|
27
|
+
Comm.comm.delete(@comm_id)
|
42
28
|
end
|
43
29
|
|
44
30
|
def on_msg(&b)
|
@@ -49,12 +35,12 @@ module IRuby
|
|
49
35
|
@on_close = b
|
50
36
|
end
|
51
37
|
|
52
|
-
def
|
53
|
-
@on_msg.call(
|
38
|
+
def handle_msg(data)
|
39
|
+
@on_msg.call(data) if @on_msg
|
54
40
|
end
|
55
41
|
|
56
|
-
def
|
57
|
-
@on_close.call if @on_close
|
42
|
+
def handle_close(data)
|
43
|
+
@on_close.call(data) if @on_close
|
58
44
|
end
|
59
45
|
end
|
60
46
|
end
|
data/lib/iruby/command.rb
CHANGED
@@ -18,7 +18,7 @@ module IRuby
|
|
18
18
|
case @args.first
|
19
19
|
when 'version', '-v', '--version'
|
20
20
|
require 'iruby/version'
|
21
|
-
puts IRuby::VERSION
|
21
|
+
puts "IRuby #{IRuby::VERSION}, Ruby #{RUBY_VERSION}"
|
22
22
|
when 'help', '-h', '--help'
|
23
23
|
print_help
|
24
24
|
when 'register'
|
@@ -103,7 +103,7 @@ Try `ipython help` for more information.
|
|
103
103
|
FileUtils.mkpath(@kernel_dir)
|
104
104
|
File.write(@kernel_file, %{{
|
105
105
|
"argv": [ "#{File.expand_path $0}", "kernel", "{connection_file}" ],
|
106
|
-
"display_name": "Ruby",
|
106
|
+
"display_name": "Ruby #{RUBY_VERSION}",
|
107
107
|
"language": "ruby"
|
108
108
|
}
|
109
109
|
})
|
data/lib/iruby/formatter.rb
CHANGED
@@ -92,8 +92,8 @@ module IRuby
|
|
92
92
|
table = '<table>'
|
93
93
|
|
94
94
|
if header1 && options[:header] != false
|
95
|
-
table << '<tr>' << header1.map {|k| "<th>#{k}</th>" }.join
|
96
|
-
table << "<th>…</th>" << header2.map {|k| "<th>#{k}</th>" }.join if keys2
|
95
|
+
table << '<tr>' << header1.map {|k| "<th>#{cell k}</th>" }.join
|
96
|
+
table << "<th>…</th>" << header2.map {|k| "<th>#{cell k}</th>" }.join if keys2
|
97
97
|
table << '</tr>'
|
98
98
|
end
|
99
99
|
|
@@ -112,16 +112,24 @@ module IRuby
|
|
112
112
|
|
113
113
|
private
|
114
114
|
|
115
|
+
def cell(obj)
|
116
|
+
obj.respond_to?(:to_html) ? obj.to_html : obj
|
117
|
+
end
|
118
|
+
|
119
|
+
def elem(row, k)
|
120
|
+
cell((row[k] rescue nil))
|
121
|
+
end
|
122
|
+
|
115
123
|
def row_block(table, rows, keys1, keys2)
|
116
124
|
cols = keys1.size
|
117
125
|
cols += keys2.size + 1 if keys2
|
118
126
|
rows.each_with_index do |row, i|
|
119
127
|
table << '<tr>'
|
120
128
|
if row.respond_to?(:map)
|
121
|
-
row_html = keys1.map {|k| "<td>#{row
|
129
|
+
row_html = keys1.map {|k| "<td>#{elem row, k}</td>" }.join
|
122
130
|
if keys2
|
123
131
|
row_html << "<td#{rows.size > 1 ? " rowspan='#{rows.size}'" : ''}>…</td>" if i == 0
|
124
|
-
row_html << keys2.map {|k| "<td>#{row
|
132
|
+
row_html << keys2.map {|k| "<td>#{elem row, k}</td>" }.join
|
125
133
|
end
|
126
134
|
if row_html.empty?
|
127
135
|
table << "<td#{cols > 1 ? " colspan='#{cols}'" : ''}></td>"
|
@@ -129,7 +137,7 @@ module IRuby
|
|
129
137
|
table << row_html
|
130
138
|
end
|
131
139
|
else
|
132
|
-
table << "<td#{cols > 1 ? " colspan='#{cols}'" : ''}>#{row}</td>"
|
140
|
+
table << "<td#{cols > 1 ? " colspan='#{cols}'" : ''}>#{cell row}</td>"
|
133
141
|
end
|
134
142
|
table << '</tr>'
|
135
143
|
end
|
data/lib/iruby/kernel.rb
CHANGED
@@ -8,43 +8,20 @@ module IRuby
|
|
8
8
|
attr_accessor :instance
|
9
9
|
end
|
10
10
|
|
11
|
-
attr_reader :session
|
11
|
+
attr_reader :session
|
12
12
|
|
13
13
|
def initialize(config_file)
|
14
14
|
@config = MultiJson.load(File.read(config_file))
|
15
|
-
|
16
15
|
IRuby.logger.debug("IRuby kernel start with config #{@config}")
|
17
|
-
|
18
16
|
Kernel.instance = self
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
reply_socket = c.socket(:ROUTER)
|
24
|
-
reply_socket.bind(connection % @config['shell_port'])
|
25
|
-
|
26
|
-
pub_socket = c.socket(:PUB)
|
27
|
-
pub_socket.bind(connection % @config['iopub_port'])
|
28
|
-
|
29
|
-
Thread.new do
|
30
|
-
begin
|
31
|
-
hb_socket = c.socket(:REP)
|
32
|
-
hb_socket.bind(connection % @config['hb_port'])
|
33
|
-
ZMQ.proxy(hb_socket, hb_socket)
|
34
|
-
rescue Exception => ex
|
35
|
-
IRuby.logger.fatal "Kernel heartbeat died: #{ex.message}\n"#{ex.backtrace.join("\n")}"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
@session = Session.new('kernel', @config, publish: pub_socket, reply: reply_socket)
|
40
|
-
|
41
|
-
$stdout = OStream.new(@session, 'stdout')
|
42
|
-
$stderr = OStream.new(@session, 'stderr')
|
18
|
+
@session = Session.new(@config)
|
19
|
+
$stdout = OStream.new(@session, :stdout)
|
20
|
+
$stderr = OStream.new(@session, :stderr)
|
43
21
|
|
44
22
|
@execution_count = 0
|
45
23
|
@backend = create_backend
|
46
24
|
@running = true
|
47
|
-
@comms = {}
|
48
25
|
end
|
49
26
|
|
50
27
|
def create_backend
|
@@ -55,55 +32,48 @@ module IRuby
|
|
55
32
|
end
|
56
33
|
|
57
34
|
def run
|
58
|
-
send_status
|
35
|
+
send_status :starting
|
59
36
|
while @running
|
60
|
-
|
37
|
+
msg = @session.recv(:reply)
|
61
38
|
type = msg[:header]['msg_type']
|
62
39
|
if type =~ /comm_|_request\Z/ && respond_to?(type)
|
63
|
-
send_status
|
64
|
-
send(type,
|
65
|
-
send_status
|
40
|
+
send_status :busy
|
41
|
+
send(type, msg)
|
42
|
+
send_status :idle
|
66
43
|
else
|
67
44
|
IRuby.logger.error "Unknown message type: #{msg[:header]['msg_type']} #{msg.inspect}"
|
68
45
|
end
|
69
46
|
end
|
70
47
|
end
|
71
48
|
|
72
|
-
def kernel_info_request(
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
}
|
85
|
-
@session.send(:reply, 'kernel_info_reply', content, ident)
|
49
|
+
def kernel_info_request(msg)
|
50
|
+
@session.send(:reply, :kernel_info_reply,
|
51
|
+
protocol_version: '5.0',
|
52
|
+
implementation: 'iruby',
|
53
|
+
banner: "IRuby #{IRuby::VERSION}",
|
54
|
+
implementation_version: IRuby::VERSION,
|
55
|
+
language_info: {
|
56
|
+
name: 'ruby',
|
57
|
+
version: RUBY_VERSION,
|
58
|
+
mimetype: 'text/ruby',
|
59
|
+
file_extension: 'rb'
|
60
|
+
})
|
86
61
|
end
|
87
62
|
|
88
63
|
def send_status(status)
|
89
|
-
@session.send(:publish,
|
64
|
+
@session.send(:publish, :status, execution_state: status)
|
90
65
|
end
|
91
66
|
|
92
|
-
def execute_request(
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
IRuby.logger.fatal "Got bad message: #{msg.inspect}"
|
97
|
-
return
|
98
|
-
end
|
99
|
-
@execution_count += 1 unless msg[:content].fetch('silent', false)
|
100
|
-
@session.send(:publish, 'execute_input', {code: code, execution_count: @execution_count}, ident)
|
67
|
+
def execute_request(msg)
|
68
|
+
code = msg[:content]['code']
|
69
|
+
@execution_count += 1 if msg[:content]['store_history']
|
70
|
+
@session.send(:publish, :execute_input, code: code, execution_count: @execution_count)
|
101
71
|
|
102
72
|
result = nil
|
103
73
|
begin
|
104
|
-
result = @backend.eval(code)
|
74
|
+
result = @backend.eval(code, msg[:content]['store_history'])
|
105
75
|
content = {
|
106
|
-
status:
|
76
|
+
status: :ok,
|
107
77
|
payload: [],
|
108
78
|
user_expressions: {},
|
109
79
|
execution_count: @execution_count
|
@@ -112,90 +82,67 @@ module IRuby
|
|
112
82
|
raise
|
113
83
|
rescue Exception => e
|
114
84
|
content = {
|
115
|
-
status:
|
85
|
+
status: :error,
|
116
86
|
ename: e.class.to_s,
|
117
87
|
evalue: e.message,
|
118
88
|
traceback: ["#{RED}#{e.class}#{RESET}: #{e.message}", *e.backtrace.map { |l| "#{WHITE}#{l}#{RESET}" }],
|
119
89
|
execution_count: @execution_count
|
120
90
|
}
|
121
|
-
@session.send(:publish,
|
91
|
+
@session.send(:publish, :error, content)
|
122
92
|
end
|
123
|
-
@session.send(:reply,
|
93
|
+
@session.send(:reply, :execute_reply, content)
|
124
94
|
unless result.nil? || msg[:content]['silent']
|
125
|
-
@session.send(:publish,
|
95
|
+
@session.send(:publish, :execute_result, data: Display.display(result), metadata: {}, execution_count: @execution_count)
|
126
96
|
end
|
127
97
|
end
|
128
98
|
|
129
|
-
def complete_request(
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
}
|
136
|
-
@session.send(:reply, 'complete_reply', content, ident)
|
99
|
+
def complete_request(msg)
|
100
|
+
@session.send(:reply, :complete_reply,
|
101
|
+
matches: @backend.complete(msg[:content]['code']),
|
102
|
+
status: :ok,
|
103
|
+
cursor_start: 0,
|
104
|
+
cursor_end: msg[:content]['cursor_pos'])
|
137
105
|
end
|
138
106
|
|
139
|
-
def connect_request(
|
140
|
-
|
141
|
-
shell_port: config['shell_port'],
|
142
|
-
iopub_port: config['iopub_port'],
|
143
|
-
stdin_port: config['stdin_port'],
|
144
|
-
hb_port: config['hb_port']
|
145
|
-
}
|
146
|
-
@session.send(:reply, 'connect_reply', content, ident)
|
107
|
+
def connect_request(msg)
|
108
|
+
@session.send(:reply, :connect_reply, Hash[%w(shell_port iopub_port stdin_port hb_port).map {|k| [k, @config[k]] }])
|
147
109
|
end
|
148
110
|
|
149
|
-
def shutdown_request(
|
150
|
-
@session.send(:reply,
|
111
|
+
def shutdown_request(msg)
|
112
|
+
@session.send(:reply, :shutdown_reply, msg[:content])
|
151
113
|
@running = false
|
152
114
|
end
|
153
115
|
|
154
|
-
def history_request(
|
116
|
+
def history_request(msg)
|
155
117
|
# we will just send back empty history for now, pending clarification
|
156
118
|
# as requested in ipython/ipython#3806
|
157
|
-
|
158
|
-
history: []
|
159
|
-
}
|
160
|
-
@session.send(:reply, 'history_reply', content, ident)
|
119
|
+
@session.send(:reply, :history_reply, history: [])
|
161
120
|
end
|
162
121
|
|
163
|
-
def inspect_request(
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
isalias: false,
|
170
|
-
docstring: '', # TODO
|
171
|
-
type_class: o.class.superclass.to_s,
|
172
|
-
string_form: o.inspect
|
173
|
-
}
|
174
|
-
content[:length] = o.length if o.respond_to?(:length)
|
175
|
-
@session.send(:reply, 'inspect_reply', content, ident)
|
122
|
+
def inspect_request(msg)
|
123
|
+
result = @backend.eval(msg[:content]['code'])
|
124
|
+
@session.send(:reply, :inspect_reply,
|
125
|
+
status: :ok,
|
126
|
+
data: Display.display(result),
|
127
|
+
metadata: {})
|
176
128
|
rescue Exception
|
177
|
-
|
178
|
-
oname: msg[:content]['oname'],
|
179
|
-
found: false
|
180
|
-
}
|
181
|
-
@session.send(:reply, 'inspect_reply', content, ident)
|
129
|
+
@session.send(:reply, :inspect_reply, status: 'error')
|
182
130
|
end
|
183
131
|
|
184
|
-
def comm_open(
|
132
|
+
def comm_open(msg)
|
185
133
|
comm_id = msg[:content]['comm_id']
|
186
134
|
target_name = msg[:content]['target_name']
|
187
|
-
|
188
|
-
@comms[comm_id] = target.new(target_name, comm_id)
|
135
|
+
Comm.comm[comm_id] = Comm.target[target_name].new(target_name, comm_id)
|
189
136
|
end
|
190
137
|
|
191
|
-
def comm_msg(
|
192
|
-
|
138
|
+
def comm_msg(msg)
|
139
|
+
Comm.comm[msg[:content]['comm_id']].handle_msg(msg[:content]['data'])
|
193
140
|
end
|
194
141
|
|
195
|
-
def comm_close(
|
142
|
+
def comm_close(msg)
|
196
143
|
comm_id = msg[:content]['comm_id']
|
197
|
-
|
198
|
-
|
144
|
+
Comm.comm[comm_id].handle_close(msg[:content]['data'])
|
145
|
+
Comm.comm.delete(comm_id)
|
199
146
|
end
|
200
147
|
end
|
201
148
|
end
|