Commit graph

423 commits

Author SHA1 Message Date
Nathaniel Nicandro
b678e47666 Fix reference to free variable 2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
f859568eaf jupyter-repl-completing-read-repl-buffer: Modify return value
Return nil in the case that there are no REPL buffers available,
previously an error was raised.  Allows for a simplification at one
call site.
2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
1daf4463c1 Shutdown kernel when killing REPL buffer
This brings back the previous behavior of shutting down a kernel when
killing its REPL buffer.  Just disconnecting a client leaves around
open kernel connections, e.g. a websocket in the case of a
`jupyter-server-kernel`, that do not get cleaned up anywhere.
Shutting down the kernel when killing the REPL buffer is a stop-gap
solution until there is a more universal way of cleaning up kernel
connections when clients are no longer using them.
2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
8f66fe872d jupyter-repl-kill-buffer-query-function: Update documentation 2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
24c46ac7c0 Re-add call to deactivate interaction buffers when killing REPL buffer 2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
5a9a068734 jupyter-repl-execute-cell: Avoid setting client execution-count 2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
2381587ff8 jupyter-repl-sync-execution-state: Don't set client execution-count
Setting the execution-count already happens in
`jupyter-handle-message`, called in one of the subscribers of a
request's message publisher.
2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
d061c6eb89 Rename jupyter-reply-message -> jupyter-reply 2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
ba79115fc4 jupyter-run-repl: Abstract out server determination code 2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
6418de7ef5 Add the jupyter-use-zmq custom variable 2023-02-13 20:30:19 -06:00
Nathaniel Nicandro
5857352135 Add the jupyter-kernelspecs method
Replaces both `jupyter-available-kernelspecs` and
`jupyter-server-kernelspecs`.
2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
b55b27c0ce Fix jupyter-message-parent-type checks 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
4c5945c668 Better question when asking to kill a REPL buffer 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
c1bff794d0 Add jupyter-reply-message 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
22d2a3f327 Remove the jupyter-send method...
- Add a `message-publisher` slot to `jupyter-request`, set when
  sending a request.

- `*-request` functions now return a delayed request value instead of
  a request. Update call sites.

- Add the functions `jupyter-messages`, `jupyter-idle`,
`jupyter-message-subscribed` and `jupyter-client-subscribed`.

- Move client subscription to a request's messages to
  `jupyter-client-subscribed`.

- Request callbacks are now added via `jupyter-message-subscribed`.

- Reduce usage of callbacks in favor of searching `jupyter-messages`
  where appropriate.

- Update tests
2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
039decdc97 Remove calls of jupyter-wait-until-received 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
d89e5f104d jupyter-eval-add-callbacks -> jupyter-eval-callbacks 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
ac35f52e02 Add :callbacks and :handlers keys to request calls 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
baa01cbcac Fix wording in a few comments 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
f0712a2a4d Remove unused macro 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
a76d772716 (send ... (request ...)) -> (request ...) 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
b77dd297e3 Fix wrong number of arguments 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
63a1b846d6 Use jupyter-connected-p in one place 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
1e1399b5b6 Fix interactive spec of jupyter-run-repl 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
134167e65e Remove keyword message types 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
2f87fe3ca9 Use jupyter-default-server 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
c002c0cb0c Simplify jupyter-eval-string for REPL clients 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
421fc840b0 Make client arg optional in jupyter-repl-execute-cell 2023-02-13 20:25:05 -06:00
Nathaniel Nicandro
18027386d4 Update test helpers 2023-02-13 20:22:50 -06:00
Nathaniel Nicandro
9d801b72a3 Remove jupyter-connection.el 2023-02-13 20:22:50 -06:00
Nathaniel Nicandro
17a09d5ac8 Don't ask to shutdown kernel when killing REPL buffer 2023-02-13 20:22:50 -06:00
Nathaniel Nicandro
b84e1320c6 Add jupyter-connected-p 2023-02-13 20:22:50 -06:00
Nathaniel Nicandro
3b8865d222 Remove kernel manager related code 2023-02-13 20:22:50 -06:00
Nathaniel Nicandro
c03493d82e Fix timing bug 2023-02-13 20:22:50 -06:00
Nathaniel Nicandro
17460f8b7c Use jupyter-*-request functions 2023-02-13 20:22:50 -06:00
Nathaniel Nicandro
9aaff6bfcd Request kernel shutdown when killing REPL buffer 2023-02-13 20:22:50 -06:00
Nathaniel Nicandro
2d807d8670 Replace uses of jupyter-clients
This function is used elsewhere.
2023-02-13 20:22:49 -06:00
Nathaniel Nicandro
996d53e0b0 Use new connection interface in some places
* jupyter-repl.el
(jupyter-repl-kill-buffer-query-function): Use `jupyter-kernel`,
`jupyter-clients`, `jupyter-disconnect`, and `jupyter-shutdown`.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
348df7feb5 Remove jupyter-send-* methods
These methods were not used much internally.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
2ccab95d0e Cleanup REPL launching commands
* jupyter-repl.el
(jupyter-run-repl): Don't treat interactive calls separately from
non-interactive ones, validation of the kernel name in both types of
calls is done now by using `jupyter-guess-kernelspec`.  Use
`jupyter-client` to launch the kernel and connect a client.
(jupyter-connect-repl): Use `jupyter-client`.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
d137540061 Simplify the meaning of a jupyter-connect-repl argument
* jupyter-base.el (jupyter-read-connection): Validate connection info.

* jupyter-repl.el (jupyter--connection-info): Remove
(jupyter-connect-repl): Only allow a file path as the first argument of
`jupyter-connect-repl`.  Update doc. No need to update any callers
since the other form of the argument was not used.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
0521bca637 Add shutdown and interrupt functions to a client
Somehow this was not done until now.  I had in my mind that shutting
down and interrupting a kernel was part of the responsibility of the
manager class.  This is how it is done in the reference
jupyter/jupyter_client implementation, I think.

* jupyter-client.el (jupyter-shutdown-kernel)
(jupyter-interrupt-kernel): New functions.

* jupyter-repl.el
(jupyter-repl-restart-kernel): Use the `jupyter-shutdown-kernel`
method to restart a client's kernel.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
20c1c80bc0 Remove jupyter-client-has-manager-p
* jupyter-client.el (jupyter-client-has-manager-p): Do it.
(initialize-instance)
* jupyter-repl.el
(jupyter-repl-kill-buffer-query-function)
* test/jupyter-test.el (jupyter-repl-client-predicates): Update all callers.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
c06b71a3f0 Remove unused function
* jupyter-repl.el (jupyter-repl-display-kernel-buffer): Do it.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
805048f0f7 Pre-fix jupyter-connect-repl to allow tests to pass
Just to allow tests to pass at this commit
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
390a6c814e Replace jupyter-start-new-kernel calls with jupyter-client 2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
bdb8488bf3 Remove comm-layer and related
Remove `jupyter-channel-ioloop-comm.el`, `jupyter-comm-layer.el`, `jupyter-ioloop-comm.el`.
Remove the kcomm slot of a client, replace it with a kernel slot.
jupyter-server.el: Remove kernel communication related code.
Remove `jupyter-kernel-lifetime`.

* jupyter-kernel-manager.el (jupyter-kernel-lifetime): Do it. Update
  all subclasses. All methods it defined no longer take a type.  This
  is in preparation of removing most of them altogether.
(jupyter-kernel-manager): Update doc.

* jupyter-kernel-process-manager.el
(jupyter-kernel-process): Update documentation.
(jupyter--kernel-died-process-sentinel): Remove type check.

* test/jupyter-test.el (jupyter-local-tcp-conn-info): Remove.
(jupyter-kernel-lifetime): Remove.

[conn] Have `jupyter-kernel-manager.el` re-direct to the new interface

* jupyter-kernel-manager.el
(jupyter-kernel-alive-p): Check that the kernel is
live, not an Emacs connection to it.
(jupyter-start-kernel)
[jupyter-kernel, jupyter-kernel-manager]: Use `jupyter-launch`.
(jupyter-shutdown-kernel) [jupyter-kernel-manager]: Use `jupyer-shutdown`.
(jupyter-kill-kernel) [jupyter-kernel]: Ditto. Remove a method
definition.
(jupyter-make-client): Use `jupyter-client`.
(jupyter-interrupt-kernel) [jupyter-kernel-manager]: Use `jupyer-interrupt`.

* jupyter-kernel-process-manager.el: Remove.

Don't add finalizer to cleanup process.

Cleanup is done in other ways, e.g. in
`jupyter--gc-kernel-processes`.  Also it doesn't make sense to delete
a general kernel because the object that represents it in Emacs is no
longer accessible.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
93eeda42a6 Replace jupyter-channel-ioloop-comm internals with new impl.
* jupyter-comm-layer.el
(jupyter-comm-initialize): Remove default method.  This is in
preparation for moving over to classless communication.

* jupyter-channel-ioloop-comm (jupyter-connection): Require.
(jupyter--proxy-channel): New type.
(jupyter--make-channel-group, jupyter--channel-alive-p)
(jupyter--start-channel, jupyter--stop-channel)
(make-jupyter-async-connection): New functions.
(jupyter-channel-ioloop-comm): Remove `ioloop-class` slot, update all
callers. Remove `channels` slot, update all setters and
references. Add `conn` slot which holds a `jupyter-connection`.
(jupyter-comm-initialize): Initialize the `conn` slot to the
connection returned by `make-jupyter-async-connection`.
(jupyter-comm-start, jupyter-comm-stop)
(jupyter-comm-alive-p, jupyter-comm-id, jupyter-channel-alive-p)
(jupyter-stop-channel, jupyter-start-channel): Replace the body of these
functions with their equivalents in `conn`.

* jupyter-kernel-process-manager.el
(jupyter-make-client): Update `jupyter-channel-ioloop-comm` call.

* jupyter-repl.el:
(jupyter-connect-repl): Ditto.

* test/test-helper.el
(initialize-instance) [jupyter-echo-client]: Ditto. Replace setting of
`channel` slot with setting the `conn` clot.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
f7292ed195 Add a jupyter-kernelspec struct
* jupyter-kernel-manager.el (jupyter-kernel): Set `spec` slot type to
  `jupyter-kernelspec`.
(jupyter-kernel-name):
* jupyter-kernel-process-manager.el: Update all accessors.

* jupyter-kernelspec.el: Add `jupyter-kernelspec` struct type.
* jupyter-repl.el:
* jupyter-server.el:
* ob-jupyter.el:
* test/test-helper.el: Update all kernelspec using functions to use
  the new type.
2023-02-13 20:21:11 -06:00
Tomasz Mieszkowski
7d20c0aee2 Sort available kernelspecs; guess with ^; use guessing in jupyter-run-repl 2022-04-19 13:52:23 -05:00