##// END OF EJS Templates
Update message spec with details about attribute, prompts, etc....
Fernando Perez -
Show More
@@ -140,6 +140,11 b" inputs, and run all multiline input in 'exec' mode. This would preserve the"
140 140 natural behavior of single-line inputs while allowing long cells to behave more
141 141 likea a script. This design will be refined as we complete the implementation.
142 142
143 .. Note::
144
145 What today we call 'prompt requests' will be encoded in the
146 ``state_template`` field.
147
143 148 Message type: ``execute_request``::
144 149
145 150 content = {
@@ -148,17 +153,44 b' Message type: ``execute_request``::'
148 153
149 154 # A boolean flag which, if True, signals the kernel to execute this
150 155 # code as quietly as possible. This means that the kernel will compile
151 # the code with 'exec' instead of 'single' (so sys.displayhook will not
152 # fire), and will *not*:
156 # the code witIPython/core/tests/h 'exec' instead of 'single' (so
157 # sys.displayhook will not fire), and will *not*:
153 158 # - broadcast exceptions on the PUB socket
154 159 # - do any logging
155 160 # - populate any history
161 #
156 162 # The default is False.
157 163 'silent' : bool,
164
165 # An optional string to request arbitrary state information from the
166 # kernel. This string is evaluated via the itpl module, and it can
167 # therefore contain arbitrary code for execution.
168
169 'state_template' : str,
158 170 }
159 171
160 Upon execution, the kernel *always* sends a reply, with a status code
161 indicating what happened and additional data depending on the outcome.
172 Execution semantics
173 Upon execution of the ``code`` field, the kernel *always* sends a reply,
174 with a status code indicating what happened and additional data depending
175 on the outcome.
176
177 Any code in the ``state_template`` string is evaluated, but full exceptions
178 that may occur are *not* propagated back. If any error occurs during the
179 evaluation, the value of the string will simply be::
180
181 [ERROR in <contents of template>: ExceptionType - Exception message]
182
183 The user can simply send the same code contained in the template for normal
184 evaluation to see a regular traceback.
185
186 Execution counter (old prompt number)
187 The kernel has a single, monotonically increasing counter of all execution
188 requests that are made with ``silent=False``. This counter is used to
189 populate the ``In[n]``, ``Out[n]`` and ``_n`` variables, so clients will
190 likely want to display it in some form to the user, which will typically
191 (but not necessarily) be done in the prompts. The value of this counter
192 will be returned as the ``execution_count`` field of all ``execute_reply```
193 messages.
162 194
163 195 Message type: ``execute_reply``::
164 196
@@ -166,30 +198,25 b' Message type: ``execute_reply``::'
166 198 # One of: 'ok' OR 'error' OR 'abort'
167 199 'status' : str,
168 200
169 # This has the same structure as the output of a prompt request, but is
170 # for the client to set up the *next* prompt (with identical limitations
171 # to a prompt request)
172 'next_prompt' : {
173 'prompt_string' : str,
174 'prompt_number' : int,
175 'input_sep' : str
176 },
201 # The global kernel counter that increases by one with each non-silent
202 # executed request. This will typically be used by clients to display
203 # prompt numbers to the user. If the request was a silent one, this will
204 # be the current value of the counter in the kernel.
205 'execution_count' : int,
177 206
178 # The prompt number of the actual execution for this code, which may be
179 # different from the one used when the code was typed, which was the
180 # 'next_prompt' field of the *previous* request. They will differ in the
181 # case where there is more than one client talking simultaneously to a
182 # kernel, since the numbers can go out of sync. GUI clients can use this
183 # to correct the previously written number in-place, terminal ones may
184 # re-print a corrected one if desired.
185 'prompt_number' : int,
207 # If the state_template was provided, this will contain the evaluated
208 # form of the template.
209 'state' : str,
186 210 }
187 211
188 212 When status is 'ok', the following extra fields are present::
189 213
190 214 {
191 # The kernel will often transform the input provided to it. This
192 # contains the transformed code, which is what was actually executed.
215 # The kernel will often transform the input provided to it. If the
216 # '---->' transform had been applied, this is filled, otherwise it's the
217 # empty string. So transformations like magics don't appear here, only
218 # autocall ones.
219
193 220 'transformed_code' : str,
194 221
195 222 # The execution payload is a dict with string keys that may have been
@@ -235,31 +262,65 b" When status is 'error', the following extra fields are present::"
235 262 When status is 'abort', there are for now no additional data fields. This
236 263 happens when the kernel was interrupted by a signal.
237 264
265 Kernel attribute access
266 -----------------------
267
268 While this protocol does not specify full RPC access to arbitrary methods of
269 the kernel object, the kernel does allow read (and in some cases write) access
270 to certain attributes.
271
272 The policy for which attributes can be read is: any attribute of the kernel, or
273 its sub-objects, that belongs to a :class:`Configurable` object and has been
274 declared at the class-level with Traits validation, is in principle accessible
275 as long as its name does not begin with a leading underscore. The attribute
276 itself will have metadata indicating whether it allows remote read and/or write
277 access. The message spec follows for attribute read and write requests.
238 278
239 Prompt
240 ------
279 Message type: ``getattr_request``::
241 280
242 A simple request for a current prompt string.
281 content = {
282 # The (possibly dotted) name of the attribute
283 'name' : str
284 }
243 285
244 Message type: ``prompt_request``::
286 When a ``getattr_request`` fails, there are two possible error types:
245 287
246 content = {}
288 - AttributeError: this type of error was raised when trying to access the
289 given name by the kernel itself. This means that the attribute likely
290 doesn't exist.
247 291
248 In the reply, the prompt string comes back with the prompt number placeholder
249 *unevaluated*. The message format is:
292 - AccessError: the attribute exists but its value is not readable remotely.
250 293
251 Message type: ``prompt_reply``::
294
295 Message type: ``getattr_reply``::
252 296
253 297 content = {
254 'prompt_string' : str,
255 'prompt_number' : int,
256 'input_sep' : str
298 # One of ['ok', 'AttributeError', 'AccessError'].
299 'status' : str
300 # If status is 'ok', a JSON object.
301 'value' : object
257 302 }
258 303
259 Clients can produce a prompt with ``prompt_string.format(prompt_number)``, but
260 they should be aware that the actual prompt number for that input could change
261 later, in the case where multiple clients are interacting with a single
262 kernel.
304 Message type: ``setattr_request``::
305
306 content = {
307 # The (possibly dotted) name of the attribute
308 'name' : str
309
310 # A JSON-encoded object, that will be validated by the Traits
311 # information in the kernel
312 'value' : object
313 }
314
315 When a ``setattr_request`` fails, there are also two possible error types with
316 similar meanings as those of the ``getattr_request`` case, but for writing.
317
318 Message type: ``setattr_reply``::
319
320 content = {
321 # One of ['ok', 'AttributeError', 'AccessError'].
322 'status' : str
323 }
263 324
264 325
265 326 Object information
@@ -315,9 +376,29 b' Message type: ``object_info_reply``::'
315 376 'file' : str,
316 377
317 378 # For pure Python callable objects, we can reconstruct the object
318 # definition line which provides its call signature
379 # definition line which provides its call signature. For convenience this
380 # is returned as a single 'definition' field, but below the raw parts that
381 # compose it are also returned as the argspec field.
319 382 'definition' : str,
320 383
384 # The individual parts that together form the definition string. Clients
385 # with rich display capabilities may use this to provide a richer and more
386 # precise representation of the definition line (e.g. by highlighting
387 # arguments based on the user's cursor position). For non-callable
388 # objects, this field is empty.
389 'argspec' : { # The names of all the arguments
390 args : list,
391 # The name of the varargs (*args), if any
392 varargs : str,
393 # The name of the varkw (**kw), if any
394 varkw : str
395 # The values (as strings) of all default arguments. Note
396 # that these must be matched *in reverse* with the 'args'
397 # list above, since the first positional args have no default
398 # value at all.
399 func_defaults : list
400 }
401
321 402 # For instances, provide the constructor signature (the definition of
322 403 # the __init__ method):
323 404 'init_definition' : str,
General Comments 0
You need to be logged in to leave comments. Login now