Show More
@@ -1,3 +1,4 b'' | |||
|
1 | import logging | |
|
1 | 2 | import sys |
|
2 | 3 | import time |
|
3 | 4 | from cStringIO import StringIO |
@@ -7,6 +8,13 b' from session import extract_header, Message' | |||
|
7 | 8 | from IPython.utils import io |
|
8 | 9 | |
|
9 | 10 | #----------------------------------------------------------------------------- |
|
11 | # Globals | |
|
12 | #----------------------------------------------------------------------------- | |
|
13 | ||
|
14 | # Module-level logger | |
|
15 | logger = logging.getLogger(__name__) | |
|
16 | ||
|
17 | #----------------------------------------------------------------------------- | |
|
10 | 18 | # Stream classes |
|
11 | 19 | #----------------------------------------------------------------------------- |
|
12 | 20 | |
@@ -37,10 +45,10 b' class OutStream(object):' | |||
|
37 | 45 | data = self._buffer.getvalue() |
|
38 | 46 | if data: |
|
39 | 47 | content = {u'name':self.name, u'data':data} |
|
40 |
msg = self.session.send(self.pub_socket, u'stream', |
|
|
48 | msg = self.session.send(self.pub_socket, u'stream', | |
|
49 | content=content, | |
|
41 | 50 | parent=self.parent_header) |
|
42 |
|
|
|
43 | ||
|
51 | logger.debug(msg) | |
|
44 | 52 | self._buffer.close() |
|
45 | 53 | self._new_buffer() |
|
46 | 54 |
@@ -21,7 +21,7 b' import atexit' | |||
|
21 | 21 | import sys |
|
22 | 22 | import time |
|
23 | 23 | import traceback |
|
24 | ||
|
24 | import logging | |
|
25 | 25 | # System library imports. |
|
26 | 26 | import zmq |
|
27 | 27 | |
@@ -38,6 +38,13 b' from session import Session, Message' | |||
|
38 | 38 | from zmqshell import ZMQInteractiveShell |
|
39 | 39 | |
|
40 | 40 | #----------------------------------------------------------------------------- |
|
41 | # Globals | |
|
42 | #----------------------------------------------------------------------------- | |
|
43 | ||
|
44 | # Module-level logger | |
|
45 | logger = logging.getLogger(__name__) | |
|
46 | ||
|
47 | #----------------------------------------------------------------------------- | |
|
41 | 48 | # Main kernel class |
|
42 | 49 | #----------------------------------------------------------------------------- |
|
43 | 50 | |
@@ -80,6 +87,7 b' class Kernel(Configurable):' | |||
|
80 | 87 | # by record_ports and used by connect_request. |
|
81 | 88 | _recorded_ports = None |
|
82 | 89 | |
|
90 | ||
|
83 | 91 | def __init__(self, **kwargs): |
|
84 | 92 | super(Kernel, self).__init__(**kwargs) |
|
85 | 93 | |
@@ -121,21 +129,20 b' class Kernel(Configurable):' | |||
|
121 | 129 | # easier to trace visually the message chain when debugging. Each |
|
122 | 130 | # handler prints its message at the end. |
|
123 | 131 | # Eventually we'll move these from stdout to a logger. |
|
124 |
|
|
|
125 |
|
|
|
126 | '\n --->\n ', sep='', end='') | |
|
132 | logger.debug('\n*** MESSAGE TYPE:'+str(msg['msg_type'])+'***') | |
|
133 | logger.debug(' Content: '+str(msg['content'])+'\n --->\n ') | |
|
127 | 134 | |
|
128 | 135 | # Find and call actual handler for message |
|
129 | 136 | handler = self.handlers.get(msg['msg_type'], None) |
|
130 | 137 | if handler is None: |
|
131 |
|
|
|
138 | logger.error("UNKNOWN MESSAGE TYPE:" +str(msg)) | |
|
132 | 139 | else: |
|
133 | 140 | handler(ident, msg) |
|
134 | 141 | |
|
135 | 142 | # Check whether we should exit, in case the incoming message set the |
|
136 | 143 | # exit flag on |
|
137 | 144 | if self.shell.exit_now: |
|
138 |
|
|
|
145 | logger.debug('\nExiting IPython kernel...') | |
|
139 | 146 | # We do a normal, clean exit, which allows any actions registered |
|
140 | 147 | # via atexit (such as history saving) to take place. |
|
141 | 148 | sys.exit(0) |
@@ -183,8 +190,8 b' class Kernel(Configurable):' | |||
|
183 | 190 | code = content[u'code'] |
|
184 | 191 | silent = content[u'silent'] |
|
185 | 192 | except: |
|
186 |
|
|
|
187 |
|
|
|
193 | logger.error("Got bad msg: ") | |
|
194 | logger.error(str(Message(parent))) | |
|
188 | 195 | return |
|
189 | 196 | |
|
190 | 197 | shell = self.shell # we'll need this a lot here |
@@ -262,8 +269,9 b' class Kernel(Configurable):' | |||
|
262 | 269 | shell.payload_manager.clear_payload() |
|
263 | 270 | |
|
264 | 271 | # Send the reply. |
|
265 |
reply_msg = self.session.send(self.reply_socket, u'execute_reply', |
|
|
266 | io.raw_print(reply_msg) | |
|
272 | reply_msg = self.session.send(self.reply_socket, u'execute_reply', | |
|
273 | reply_content, parent, ident=ident) | |
|
274 | logger.debug(str(reply_msg)) | |
|
267 | 275 | |
|
268 | 276 | # Flush output before sending the reply. |
|
269 | 277 | sys.stdout.flush() |
@@ -290,7 +298,7 b' class Kernel(Configurable):' | |||
|
290 | 298 | 'status' : 'ok'} |
|
291 | 299 | completion_msg = self.session.send(self.reply_socket, 'complete_reply', |
|
292 | 300 | matches, parent, ident) |
|
293 |
|
|
|
301 | logger.debug(str(completion_msg)) | |
|
294 | 302 | |
|
295 | 303 | def object_info_request(self, ident, parent): |
|
296 | 304 | object_info = self.shell.object_inspect(parent['content']['oname']) |
@@ -298,7 +306,7 b' class Kernel(Configurable):' | |||
|
298 | 306 | oinfo = json_clean(object_info) |
|
299 | 307 | msg = self.session.send(self.reply_socket, 'object_info_reply', |
|
300 | 308 | oinfo, parent, ident) |
|
301 |
|
|
|
309 | logger.debug(msg) | |
|
302 | 310 | |
|
303 | 311 | def history_request(self, ident, parent): |
|
304 | 312 | output = parent['content']['output'] |
@@ -308,7 +316,7 b' class Kernel(Configurable):' | |||
|
308 | 316 | content = {'history' : hist} |
|
309 | 317 | msg = self.session.send(self.reply_socket, 'history_reply', |
|
310 | 318 | content, parent, ident) |
|
311 | io.raw_print(msg) | |
|
319 | logger.debug(str(msg)) | |
|
312 | 320 | |
|
313 | 321 | def connect_request(self, ident, parent): |
|
314 | 322 | if self._recorded_ports is not None: |
@@ -317,7 +325,7 b' class Kernel(Configurable):' | |||
|
317 | 325 | content = {} |
|
318 | 326 | msg = self.session.send(self.reply_socket, 'connect_reply', |
|
319 | 327 | content, parent, ident) |
|
320 |
|
|
|
328 | logger.debug(msg) | |
|
321 | 329 | |
|
322 | 330 | def shutdown_request(self, ident, parent): |
|
323 | 331 | self.shell.exit_now = True |
@@ -336,12 +344,13 b' class Kernel(Configurable):' | |||
|
336 | 344 | else: |
|
337 | 345 | assert ident is not None, \ |
|
338 | 346 | "Unexpected missing message part." |
|
339 | io.raw_print("Aborting:\n", Message(msg)) | |
|
347 | ||
|
348 | logger.debug("Aborting:\n"+str(Message(msg))) | |
|
340 | 349 | msg_type = msg['msg_type'] |
|
341 | 350 | reply_type = msg_type.split('_')[0] + '_reply' |
|
342 | 351 | reply_msg = self.session.send(self.reply_socket, reply_type, |
|
343 | 352 | {'status' : 'aborted'}, msg, ident=ident) |
|
344 |
|
|
|
353 | logger.debug(reply_msg) | |
|
345 | 354 | # We need to wait a bit for requests to come in. This can probably |
|
346 | 355 | # be set shorter for true asynchronous clients. |
|
347 | 356 | time.sleep(0.1) |
@@ -360,8 +369,8 b' class Kernel(Configurable):' | |||
|
360 | 369 | try: |
|
361 | 370 | value = reply['content']['value'] |
|
362 | 371 | except: |
|
363 |
|
|
|
364 |
|
|
|
372 | logger.error("Got bad raw_input reply: ") | |
|
373 | logger.error(str(Message(parent))) | |
|
365 | 374 | value = '' |
|
366 | 375 | return value |
|
367 | 376 | |
@@ -415,7 +424,7 b' class Kernel(Configurable):' | |||
|
415 | 424 | if self._shutdown_message is not None: |
|
416 | 425 | self.session.send(self.reply_socket, self._shutdown_message) |
|
417 | 426 | self.session.send(self.pub_socket, self._shutdown_message) |
|
418 |
|
|
|
427 | logger.debug(str(self._shutdown_message)) | |
|
419 | 428 | # A very short sleep to give zmq time to flush its message buffers |
|
420 | 429 | # before Python truly shuts down. |
|
421 | 430 | time.sleep(0.01) |
General Comments 0
You need to be logged in to leave comments.
Login now