##// END OF EJS Templates
updates per review...
MinRK -
Show More
@@ -133,7 +133,10 b' def _detect_screen_size(screen_lines_def):'
133 133 #screen_cols,'columns.' # dbg
134 134
135 135 def page(strng, start=0, screen_lines=0, pager_cmd=None):
136 """Print a string, piping through a pager after a certain length.
136 """Display a string, piping through a pager after a certain length.
137
138 strng can be a mime-bundle dict, supplying multiple representations,
139 keyed by mime-type.
137 140
138 141 The screen_lines parameter specifies the number of *usable* lines of your
139 142 terminal screen (total lines minus lines you need to reserve to show other
@@ -40,8 +40,8 b' version = __version__ # backwards compatibility name'
40 40 version_info = (_version_major, _version_minor, _version_patch, _version_extra)
41 41
42 42 # Change this when incrementing the kernel protocol version
43 kernel_protocol_version_info = (5, 0, 0)
44 kernel_protocol_version = "%i.%i.%i" % kernel_protocol_version_info
43 kernel_protocol_version_info = (5, 0)
44 kernel_protocol_version = "%i.%i" % kernel_protocol_version_info
45 45
46 46 description = "IPython: Productive Interactive Computing"
47 47
@@ -251,11 +251,6 b' var IPython = (function (IPython) {'
251 251 this.reset_tabs_function (cell, text);
252 252 }
253 253
254 // don't do anything if line begins with '(' or is empty
255 // if (text === "" || text === "(") {
256 // return;
257 // }
258
259 254 this.tabs_functions[this._consecutive_counter](cell, text, cursor_pos);
260 255
261 256 // then if we are at the end of list function, reset
@@ -270,7 +270,7 b' class ShellChannel(ZMQSocketChannel):'
270 270 self._queue_send(msg)
271 271 return msg['header']['msg_id']
272 272
273 def complete(self, code, cursor_pos=0, block=None):
273 def complete(self, code, cursor_pos=None):
274 274 """Tab complete text in the kernel's namespace.
275 275
276 276 Parameters
@@ -280,17 +280,20 b' class ShellChannel(ZMQSocketChannel):'
280 280 Can be anything between a variable name and an entire cell.
281 281 cursor_pos : int, optional
282 282 The position of the cursor in the block of code where the completion was requested.
283 Default: ``len(code)``
283 284
284 285 Returns
285 286 -------
286 287 The msg_id of the message sent.
287 288 """
289 if cursor_pos is None:
290 cursor_pos = len(code)
288 291 content = dict(code=code, cursor_pos=cursor_pos)
289 292 msg = self.session.msg('complete_request', content)
290 293 self._queue_send(msg)
291 294 return msg['header']['msg_id']
292 295
293 def inspect(self, code, cursor_pos=0, detail_level=0):
296 def inspect(self, code, cursor_pos=None, detail_level=0):
294 297 """Get metadata information about an object in the kernel's namespace.
295 298
296 299 It is up to the kernel to determine the appropriate object to inspect.
@@ -302,6 +305,7 b' class ShellChannel(ZMQSocketChannel):'
302 305 Can be anything between a variable name and an entire cell.
303 306 cursor_pos : int, optional
304 307 The position of the cursor in the block of code where the info was requested.
308 Default: ``len(code)``
305 309 detail_level : int, optional
306 310 The level of detail for the introspection (0-2)
307 311
@@ -309,6 +313,8 b' class ShellChannel(ZMQSocketChannel):'
309 313 -------
310 314 The msg_id of the message sent.
311 315 """
316 if cursor_pos is None:
317 cursor_pos = len(code)
312 318 content = dict(code=code, cursor_pos=cursor_pos,
313 319 detail_level=detail_level,
314 320 )
@@ -94,13 +94,17 b' class InProcessShellChannel(InProcessChannel):'
94 94 self._dispatch_to_kernel(msg)
95 95 return msg['header']['msg_id']
96 96
97 def complete(self, code, cursor_pos=0):
97 def complete(self, code, cursor_pos=None):
98 if cursor_pos is None:
99 cursor_pos = len(code)
98 100 content = dict(code=code, cursor_pos=cursor_pos)
99 101 msg = self.client.session.msg('complete_request', content)
100 102 self._dispatch_to_kernel(msg)
101 103 return msg['header']['msg_id']
102 104
103 def inspect(self, code, cursor_pos=0, detail_level=0):
105 def inspect(self, code, cursor_pos=None, detail_level=0):
106 if cursor_pos is None:
107 cursor_pos = len(code)
104 108 content = dict(code=code, cursor_pos=cursor_pos,
105 109 detail_level=detail_level,
106 110 )
@@ -59,11 +59,20 b' class Reference(HasTraits):'
59 59 except TraitError as e:
60 60 assert False, str(e)
61 61
62
62 63 class Version(Unicode):
64 def __init__(self, *args, **kwargs):
65 self.min = kwargs.pop('min', None)
66 self.max = kwargs.pop('max', None)
67 kwargs['default_value'] = self.min
68 super(Version, self).__init__(*args, **kwargs)
69
63 70 def validate(self, obj, value):
64 min_version = self.default_value
65 if V(value) < V(min_version):
66 raise TraitError("bad version: %s < %s" % (value, min_version))
71 if self.min and V(value) < V(self.min):
72 raise TraitError("bad version: %s < %s" % (value, self.min))
73 if self.max and (V(value) > V(self.max)):
74 raise TraitError("bad version: %s > %s" % (value, self.max))
75
67 76
68 77 class RMessage(Reference):
69 78 msg_id = Unicode()
@@ -83,9 +92,9 b' class RHeader(Reference):'
83 92 msg_type = Unicode()
84 93 session = Unicode()
85 94 username = Unicode()
86 version = Version('5.0')
95 version = Version(min='5.0')
87 96
88 mime_pat = re.compile(r'\w+/\w+')
97 mime_pat = re.compile(r'^[\w\-\+\.]+/[\w\-\+\.]+$')
89 98
90 99 class MimeBundle(Reference):
91 100 metadata = Dict()
@@ -143,10 +152,10 b' class CompleteReply(Reference):'
143 152
144 153
145 154 class KernelInfoReply(Reference):
146 protocol_version = Version('5.0')
155 protocol_version = Version(min='5.0')
147 156 implementation = Unicode('ipython')
148 implementation_version = Version('2.1')
149 language_version = Version('2.7')
157 implementation_version = Version(min='2.1')
158 language_version = Version(min='2.7')
150 159 language = Unicode('python')
151 160 banner = Unicode()
152 161
@@ -369,9 +369,13 b' class Kernel(Configurable):'
369 369 getpass.getpass = self._save_getpass
370 370
371 371 def set_parent(self, ident, parent):
372 """Record the parent state
372 """Set the current parent_header
373 373
374 For associating side effects with their requests.
374 Side effects (IOPub messages) and replies are associated with
375 the request that caused them via the parent_header.
376
377 The parent identity is used to route input_request messages
378 on the stdin channel.
375 379 """
376 380 self._parent_ident = ident
377 381 self._parent_header = parent
@@ -617,9 +621,6 b' class Kernel(Configurable):'
617 621 shell = self.shell
618 622 shell.set_parent(parent)
619 623
620 # execute_input_msg = self.session.msg(u'execute_input',{u'code':code}, parent=parent)
621 # self.iopub_socket.send(execute_input_msg)
622 # self.session.send(self.iopub_socket, u'execute_input', {u'code':code},parent=parent)
623 624 md = self._make_metadata(parent['metadata'])
624 625 try:
625 626 working = shell.user_ns
@@ -512,10 +512,6 b' class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin):'
512 512 info = self._request_info.get('call_tip')
513 513 if info and info.id == rep['parent_header']['msg_id'] and \
514 514 info.pos == cursor.position():
515 # Get the information for a call tip. For now we format the call
516 # line as string, later we can pass False to format_call and
517 # syntax-highlight it ourselves for nicer formatting in the
518 # calltip.
519 515 content = rep['content']
520 516 if content.get('status') == 'ok':
521 517 self._call_tip_widget.show_inspect_data(content)
@@ -10,14 +10,12 b' The execution of use code consists of the following phases:'
10 10 3. Execute the ``code`` field, see below for details.
11 11 4. If execution succeeds, expressions in ``user_expressions`` are computed.
12 12 This ensures that any error in the expressions don't affect the main code execution.
13 5. Fire the post_execute eventCall any method registered with :meth:`register_post_execute`.
13 5. Fire the post_execute event.
14 14
15 .. warning::
15 .. seealso::
16
17 :doc:`config/callbacks`
16 18
17 The API for running code before/after the main code block is likely to
18 change soon. Both the ``pre_runcode_hook`` and the
19 :meth:`register_post_execute` are susceptible to modification, as we find a
20 consistent model for both.
21 19
22 20 To understand how the ``code`` field is executed, one must know that Python
23 21 code can be compiled in one of three modes (controlled by the ``mode`` argument
@@ -64,7 +62,3 b" execution in 'single' mode, and then:"
64 62 unit.
65 63
66 64
67 Errors in any registered post_execute functions are reported,
68 and the failing function is removed from the post_execution set so that it does
69 not continue triggering failures.
70
@@ -9,7 +9,7 b' Versioning'
9 9 ==========
10 10
11 11 The IPython message specification is versioned independently of IPython.
12 The current version of the specification is 5.0.0.
12 The current version of the specification is 5.0.
13 13
14 14
15 15 Introduction
@@ -107,7 +107,7 b' A message is defined by the following four-dictionary structure::'
107 107 # All recognized message type strings are listed below.
108 108 'msg_type' : str,
109 109 # the message protocol version
110 'version' : '5.0.0',
110 'version' : '5.0',
111 111 },
112 112
113 113 # In a chain of messages, the header from the parent is copied so that
@@ -122,7 +122,7 b' A message is defined by the following four-dictionary structure::'
122 122 'content' : dict,
123 123 }
124 124
125 .. versionchanged:: 5.0.0
125 .. versionchanged:: 5.0
126 126
127 127 ``version`` key added to the header.
128 128
@@ -281,7 +281,7 b' Message type: ``execute_request``::'
281 281 'allow_stdin' : True,
282 282 }
283 283
284 .. versionchanged:: 5.0.0
284 .. versionchanged:: 5.0
285 285
286 286 ``user_variables`` removed, because it is redundant with user_expressions.
287 287
@@ -366,7 +366,7 b" When status is 'ok', the following extra fields are present::"
366 366 'user_expressions' : dict,
367 367 }
368 368
369 .. versionchanged:: 5.0.0
369 .. versionchanged:: 5.0
370 370
371 371 ``user_variables`` is removed, use user_expressions instead.
372 372
@@ -433,11 +433,11 b' Message type: ``inspect_request``::'
433 433 'detail_level' : 0 or 1,
434 434 }
435 435
436 .. versionchanged:: 5.0.0
436 .. versionchanged:: 5.0
437 437
438 438 ``object_info_request`` renamed to ``inspect_request``.
439 439
440 .. versionchanged:: 5.0.0
440 .. versionchanged:: 5.0
441 441
442 442 ``name`` key replaced with ``code`` and ``cursor_pos``,
443 443 moving the lexing responsibility to the kernel.
@@ -457,11 +457,11 b' Message type: ``inspect_reply``::'
457 457 'metadata' : dict,
458 458 }
459 459
460 .. versionchanged:: 5.0.0
460 .. versionchanged:: 5.0
461 461
462 462 ``object_info_reply`` renamed to ``inspect_reply``.
463 463
464 .. versionchanged:: 5.0.0
464 .. versionchanged:: 5.0
465 465
466 466 Reply is changed from structured data to a mime bundle, allowing formatting decisions to be made by the kernel.
467 467
@@ -480,7 +480,7 b' Message type: ``complete_request``::'
480 480 'cursor_pos' : int,
481 481 }
482 482
483 .. versionchanged:: 5.0.0
483 .. versionchanged:: 5.0
484 484
485 485 ``line``, ``block``, and ``text`` keys are removed in favor of a single ``code`` for context.
486 486 Lexing is up to the kernel.
@@ -507,7 +507,7 b' Message type: ``complete_reply``::'
507 507 'status' : 'ok'
508 508 }
509 509
510 .. versionchanged:: 5.0.0
510 .. versionchanged:: 5.0
511 511
512 512 - ``matched_text`` is removed in favor of ``cursor_start`` and ``cursor_end``.
513 513 - ``metadata`` is added for extended information.
@@ -638,15 +638,15 b' Message type: ``kernel_info_reply``::'
638 638 'banner' : str,
639 639 }
640 640
641 .. versionchanged:: 5.0.0
641 .. versionchanged:: 5.0
642 642
643 643 Versions changed from lists of integers to strings.
644 644
645 .. versionchanged:: 5.0.0
645 .. versionchanged:: 5.0
646 646
647 647 ``ipython_version`` is removed.
648 648
649 .. versionchanged:: 5.0.0
649 .. versionchanged:: 5.0
650 650
651 651 ``implementation``, ``implementation_version``, and ``banner`` keys are added.
652 652
@@ -760,7 +760,7 b' of images::'
760 760 }
761 761
762 762
763 .. versionchanged:: 5.0.0
763 .. versionchanged:: 5.0
764 764
765 765 `application/json` data should be unpacked JSON data,
766 766 not double-serialized as a JSON string.
@@ -822,7 +822,7 b' Message type: ``execute_input``::'
822 822 'execution_count' : int
823 823 }
824 824
825 .. versionchanged:: 5.0.0
825 .. versionchanged:: 5.0
826 826
827 827 ``pyin`` is renamed to ``execute_input``.
828 828
@@ -868,7 +868,7 b' Message type: ``error``::'
868 868 # except the 'status' field is omitted.
869 869 }
870 870
871 .. versionchanged:: 5.0.0
871 .. versionchanged:: 5.0
872 872
873 873 ``pyerr`` renamed to ``error``
874 874
@@ -937,7 +937,7 b' Message type: ``input_reply``::'
937 937
938 938 When ``password`` is True, the frontend should not echo the input as it is entered.
939 939
940 .. versionchanged:: 5.0.0
940 .. versionchanged:: 5.0
941 941
942 942 ``password`` key added.
943 943
General Comments 0
You need to be logged in to leave comments. Login now