##// END OF EJS Templates
Merge remote-tracking branch 'takluyver/history-request' into takluyver-history-request
Thomas Kluyver -
r3843:54f4e0bf merge
parent child Browse files
Show More
@@ -160,7 +160,7 b' class IPythonWidget(FrontendWidget):'
160 160 else:
161 161 super(IPythonWidget, self)._handle_execute_reply(msg)
162 162
163 def _handle_history_tail_reply(self, msg):
163 def _handle_history_reply(self, msg):
164 164 """ Implemented to handle history tail replies, which are only supported
165 165 by the IPython kernel.
166 166 """
@@ -212,7 +212,7 b' class IPythonWidget(FrontendWidget):'
212 212 """ Reimplemented to make a history request.
213 213 """
214 214 super(IPythonWidget, self)._started_channels()
215 self.kernel_manager.xreq_channel.history_tail(1000)
215 self.kernel_manager.xreq_channel.history(hist_access_type='tail', n=1000)
216 216
217 217 #---------------------------------------------------------------------------
218 218 # 'ConsoleWidget' public interface
@@ -46,7 +46,7 b' class QtXReqSocketChannel(SocketChannelQObject, XReqSocketChannel):'
46 46 execute_reply = QtCore.Signal(object)
47 47 complete_reply = QtCore.Signal(object)
48 48 object_info_reply = QtCore.Signal(object)
49 history_tail_reply = QtCore.Signal(object)
49 history_reply = QtCore.Signal(object)
50 50
51 51 # Emitted when the first reply comes back.
52 52 first_reply = QtCore.Signal()
@@ -122,7 +122,7 b' class Kernel(Configurable):'
122 122
123 123 # Build dict of handlers for message types
124 124 msg_types = [ 'execute_request', 'complete_request',
125 'object_info_request', 'history_tail_request',
125 'object_info_request', 'history_request',
126 126 'connect_request', 'shutdown_request']
127 127 self.handlers = {}
128 128 for msg_type in msg_types:
@@ -323,15 +323,32 b' class Kernel(Configurable):'
323 323 oinfo, parent, ident)
324 324 logger.debug(msg)
325 325
326 def history_tail_request(self, ident, parent):
326 def history_request(self, ident, parent):
327 327 # We need to pull these out, as passing **kwargs doesn't work with
328 328 # unicode keys before Python 2.6.5.
329 n = parent['content']['n']
329 hist_access_type = parent['content']['hist_access_type']
330 330 raw = parent['content']['raw']
331 331 output = parent['content']['output']
332 hist = self.shell.history_manager.get_tail(n, raw=raw, output=output)
332 if hist_access_type == 'tail':
333 n = parent['content']['n']
334 hist = self.shell.history_manager.get_tail(n, raw=raw, output=output,
335 include_latest=True)
336
337 elif hist_access_type == 'range':
338 session = parent['content']['session']
339 start = parent['content']['start']
340 stop = parent['content']['stop']
341 hist = self.shell.history_manager.get_range(session, start, stop,
342 raw=raw, output=output)
343
344 elif hist_access_type == 'search':
345 pattern = parent['content']['pattern']
346 hist = self.shell.history_manager.search(pattern, raw=raw, output=output)
347
348 else:
349 hist = []
333 350 content = {'history' : list(hist)}
334 msg = self.session.send(self.reply_socket, 'history_tail_reply',
351 msg = self.session.send(self.reply_socket, 'history_reply',
335 352 content, parent, ident)
336 353 logger.debug(str(msg))
337 354
@@ -282,24 +282,41 b' class XReqSocketChannel(ZmqSocketChannel):'
282 282 self._queue_request(msg)
283 283 return msg['header']['msg_id']
284 284
285 def history_tail(self, n=10, raw=True, output=False):
286 """Get the history list.
285 def history(self, raw=True, output=False, hist_access_type='range', **kwargs):
286 """Get entries from the history list.
287 287
288 288 Parameters
289 289 ----------
290 n : int
291 The number of lines of history to get.
292 290 raw : bool
293 291 If True, return the raw input.
294 292 output : bool
295 293 If True, then return the output as well.
294 hist_access_type : str
295 'range' (fill in session, start and stop params), 'tail' (fill in n)
296 or 'search' (fill in pattern param).
297
298 session : int
299 For a range request, the session from which to get lines. Session
300 numbers are positive integers; negative ones count back from the
301 current session.
302 start : int
303 The first line number of a history range.
304 stop : int
305 The final (excluded) line number of a history range.
306
307 n : int
308 The number of lines of history to get for a tail request.
309
310 pattern : str
311 The glob-syntax pattern for a search request.
296 312
297 313 Returns
298 314 -------
299 315 The msg_id of the message sent.
300 316 """
301 content = dict(n=n, raw=raw, output=output)
302 msg = self.session.msg('history_tail_request', content)
317 content = dict(raw=raw, output=output, hist_access_type=hist_access_type,
318 **kwargs)
319 msg = self.session.msg('history_request', content)
303 320 self._queue_request(msg)
304 321 return msg['header']['msg_id']
305 322
@@ -596,21 +596,34 b' Message type: ``history_request``::'
596 596 # If True, return the raw input history, else the transformed input.
597 597 'raw' : bool,
598 598
599 # This parameter can be one of: A number, a pair of numbers, None
600 # If not given, last 40 are returned.
601 # - number n: return the last n entries.
602 # - pair n1, n2: return entries in the range(n1, n2).
603 # - None: return all history
604 'index' : n or (n1, n2) or None,
599 # So far, this can be 'range', 'tail' or 'search'.
600 'hist_access_type' : str,
601
602 # If hist_access_type is 'range', get a range of input cells. session can
603 # be a positive session number, or a negative number to count back from
604 # the current session.
605 'session' : int,
606 # start and stop are line numbers within that session.
607 'start' : int,
608 'stop' : int,
609
610 # If hist_access_type is 'tail', get the last n cells.
611 'n' : int,
612
613 # If hist_access_type is 'search', get cells matching the specified glob
614 # pattern (with * and ? as wildcards).
615 'pattern' : str,
616
605 617 }
606 618
607 619 Message type: ``history_reply``::
608 620
609 621 content = {
610 # A dict with prompt numbers as keys and either (input, output) or input
611 # as the value depending on whether output was True or False,
612 # respectively.
613 'history' : dict,
622 # A list of 3 tuples, either:
623 # (session, line_number, input) or
624 # (session, line_number, (input, output)),
625 # depending on whether output was False or True, respectively.
626 'history' : list,
614 627 }
615 628
616 629
General Comments 0
You need to be logged in to leave comments. Login now