Commit graph

279 commits

Author SHA1 Message Date
Nathaniel Nicandro
3897eff3ba Update comment section headers 2018-01-13 22:51:27 -06:00
Nathaniel Nicandro
0ad92ce933 Fix use of jupyter-include-other-output 2018-01-13 14:05:03 -06:00
Nathaniel Nicandro
2d83b757a6 Fix problems with with-jupyter-client-buffer
- Supply `with-current-buffer` with an actual buffer
- Actually expand the `client` argument
2018-01-13 13:34:02 -06:00
Nathaniel Nicandro
a5d188e32f Move jupyter-wait-until-startup to jupyter-kernel-manager.el
Also make `jupyter-wait-until-startup` private by renaming to
`jupyter--wait-until-startup`. Startup messages are only sent once at kernel
startup, since the only way to start a kernel is through a
`jupyter-kernel-manager` it makes more sense to only allow a kernel manager to
wait for a startup message.
2018-01-12 18:14:04 -06:00
Nathaniel Nicandro
7d516f2126 No need for apply-partially 2018-01-12 18:07:39 -06:00
Nathaniel Nicandro
6b5742e4cf Introduce message hook variables for received messages
The `jupyter-<channel>-message-hook` variables (where <channel> is one of
`shell`, `stdin`, or `iopub`) are run as the first step when calling the
`jupyter-handle-message` methods for a channel. The hooks take a single
argument, the message which was received on the channel.

Adding a function to `jupyter-iopub-message-hook` in combination with setting
`jupyter-include-other-output` to t eliminate the need for
`jupyter-missing-request` which was a way to add callbacks for messages which
did not have a parent header. Namely the status: starting message.
2018-01-12 18:07:02 -06:00
Nathaniel Nicandro
eae62a50af Remove cl requirement
It was previously only used for `lexical-let`, but the file now sets
`lexical-binding` to t.
2018-01-12 17:51:31 -06:00
Nathaniel Nicandro
1a81182112 Add missing group definition 2018-01-12 17:51:16 -06:00
Nathaniel Nicandro
5f8717981b Add jupyter-include-other-output 2018-01-12 17:50:24 -06:00
Nathaniel Nicandro
10f8115b8e Add with-jupyter-client-buffer, jupyter-set, jupyter-get
Use a client's IOLoop subprocess buffer as a way to store variables local to a
client
2018-01-12 17:49:22 -06:00
Nathaniel Nicandro
8ac8d2de15 Update doc strings 2018-01-12 17:43:55 -06:00
Nathaniel Nicandro
15583eab19 Refactor of jupyter--ioloop-pop-request 2018-01-12 17:42:53 -06:00
Nathaniel Nicandro
12b11e421b Cleanup comments in jupyter-kernel-client shell handler method 2018-01-12 17:41:53 -06:00
Nathaniel Nicandro
af82c55b1c Introduce jupyter-wait-until-startup 2018-01-11 12:14:35 -06:00
Nathaniel Nicandro
8f774120c9 Better handling of when to remove requests from a client's request table
For each message received in response to a request, record the
`last-message-time` of any received messages for a request. When a request's
`idle-received-p` field is non-nil and the `last-message-time` is larger than
some number of seconds, remove the request from the request table.
2018-01-11 12:06:26 -06:00
Nathaniel Nicandro
62691611e4 Add jupyter--ioloop-collect-messages to simplify jupyter--ioloop even more 2018-01-11 12:04:42 -06:00
Nathaniel Nicandro
46b70e85d0 Refactor jupyter-initialize-connection
- Use `ignore-errors` around `jupyter-connection` slots since they can be
  inherited by the `parent-instance`. Note that checking if the slot is
  available does not also check if the slots availability in the
  `parent-instance`

- Set `addr` where it is used, namely in `cl-loop`
2018-01-11 00:26:03 -06:00
Nathaniel Nicandro
34b0d45078 Use quoted lists 2018-01-11 00:25:08 -06:00
Nathaniel Nicandro
56e5f047bd car instead of caar in jupyter--ioloop-queue-message
`elem` is a list not a list of lists
2018-01-11 00:22:19 -06:00
Nathaniel Nicandro
f705dc96fe Indentation 2018-01-09 00:44:35 -06:00
Nathaniel Nicandro
f3951ee9af Fix debug message 2018-01-09 00:44:35 -06:00
Nathaniel Nicandro
839e5d855a [WIP] Add ability to stop channels initially in jupyter-start-channels
Also add TODO about channel methods
2018-01-09 00:44:35 -06:00
Nathaniel Nicandro
a9f2bac2c8 Better logic on when to send queued messages in an ioloop subprocess 2018-01-09 00:44:34 -06:00
Nathaniel Nicandro
b198a02f45 Add note about how `jupyter-channel's are used in a client 2018-01-09 00:44:34 -06:00
Nathaniel Nicandro
912a367190 Error out when no ioloop process is present in jupyter-send 2018-01-09 00:44:34 -06:00
Nathaniel Nicandro
c358e37b23 Add missing initform 2018-01-09 00:44:34 -06:00
Nathaniel Nicandro
c7dee4aa55 Simplify kernel shutdown and interruptions in a kernel manager 2018-01-09 00:44:34 -06:00
Nathaniel Nicandro
9ba6ad331e Remove uses of lexical-let 2018-01-09 00:44:34 -06:00
Nathaniel Nicandro
326ff15d92 Add standard header comments 2018-01-09 00:44:33 -06:00
Nathaniel Nicandro
ebd616998e Add/update lots of documentation 2018-01-09 00:44:33 -06:00
Nathaniel Nicandro
7e36ea1101 Add jupyter-missing-request
This is a function which should be called on a `jupyter-kernel-client` and it
returns a request object which can be used to add callbacks to messages that
have no parent message such as the status: startup message sent be a kernel.
2018-01-09 00:44:33 -06:00
Nathaniel Nicandro
7169c5072a warn instead of error when handling unknown message types 2018-01-09 00:44:33 -06:00
Nathaniel Nicandro
44c75944d3 Fix missing argument 2018-01-09 00:44:33 -06:00
Nathaniel Nicandro
f904dc7d2a Rename jupyter-push-message -> jupyter-queue-message 2018-01-09 00:44:33 -06:00
Nathaniel Nicandro
c706d07f02 Refactor jupyter--ioloop
Break it into several macros which perform various subtasks like processing a
command received from the parent emacs process and collecting messages into a
sorted list based on `jupyter-message-time`
2018-01-09 00:44:33 -06:00
Nathaniel Nicandro
b846af6c00 Remove unreachable code 2018-01-07 19:54:52 -06:00
Nathaniel Nicandro
71c4314a86 jupyter-connection inherits from eieio-instance-inheritor
This way when creating kernel clients with `jupyter-kernel-manager`, we can set
the `parent-instance` of the newly created client to the manager thereby
inheriting the `jupyter-session` from the kernel manager.

Also have `jupyter-channel` objects inherit from a `jupyter-connection` so that
we can define `jupyter-send` and `jupyter-recv` methods for channels in the future.
2018-01-07 14:53:12 -06:00
Nathaniel Nicandro
f003e40101 Add more documentation 2018-01-07 14:06:14 -06:00
Nathaniel Nicandro
aff8f7dc5d Fix wrong number of arguments 2018-01-07 14:03:55 -06:00
Nathaniel Nicandro
ada66074f5 Fix some checkdoc warnings 2018-01-07 13:35:05 -06:00
Nathaniel Nicandro
b31aa780a3 Use cl-defgeneric for client handlers and requests methods
This way eldoc works with the method arguments
2018-01-06 22:50:55 -06:00
Nathaniel Nicandro
4896c6b75b Use pcase in jupyter--ioloop-filter
Also change the type of objects emitted by `jupyter--ioloop` to lists
2018-01-06 21:04:03 -06:00
Nathaniel Nicandro
f42a22c586 Update jupyter--ioloop to take into account changes in with-zmq-poller
Namely that `current-zmq-poller` is no longer available and the first argument of `with-zmq-poller` will be bound to a poller object.
2018-01-06 21:03:37 -06:00
Nathaniel Nicandro
3d78e2f00f Update comments and documentation 2018-01-06 19:56:54 -06:00
Nathaniel Nicandro
4944a5d75a Update callback interface
- Rename `jupyter-received-message-types` to `jupyter-message-types` and add
  message types for requests as well. Also change the keys to keywords instead
  of symbols. Using plists with keywords is in line with `jupyter-messages` and
  the arguments of the jupyter request functions.

- Rename `jupyter-request-run-callbacks` to `jupyter--run-callbacks`. This is
  more of an internal function so mark it as such.

- Change the order of the first two arguments in `jupyter-add-callback` and
  `jupyter-wait-until`. In both cases you are adding a callback to a request or
  waiting for some condition to be satisfied on the request not on the message
  type. This is also the reason why `jupyter-wait-until-received` keeps the
  message type as the first argument. We are waiting until a message of a
  certain type is received for a request, but the more important object in this
  case is the message type.

- Update other files to take into account these changes.
2018-01-06 19:55:46 -06:00
Nathaniel Nicandro
95dbc187eb Be consistent with how channels are initialized in jupyter-initialize-connection 2018-01-06 19:55:46 -06:00
Nathaniel Nicandro
cfdf68eb43 Remove channel in some jupyter-channel method names 2018-01-06 19:55:46 -06:00
Nathaniel Nicandro
b3b1066624 Re-organization of code base
- `jupyter-client.el` only contains client related code

- `jupyter-kernel-manager` related code is placed in `jupyter-kernel-manager.el`

- Socket creating functions and generating connection info plist function are
  placed in `jupyter-connection.el`. This also contains the
  `jupyter-connection` class.

- Kernelspec related functions are placed in `jupyter-kernelspec.el`

- Move general utility functions and variables requires necessary for `jupyter`
  into `jupyter-base.el`. This also contains the `jupyter-session` and
  `jupyter-request` struct definitions.
2018-01-06 19:55:45 -06:00
Nathaniel Nicandro
cc3719dedd Rename jupyter-client-initialize-connection to jupyter-initialize-connection
Also update the documentation.
2018-01-06 19:55:45 -06:00
Nathaniel Nicandro
bf1b1dae42 Add jupyter-default-timeout variable 2018-01-06 19:55:45 -06:00