Commit graph

1845 commits

Author SHA1 Message Date
Nathaniel Nicandro
eafbc9f967 Merge jupyter-spec-kernel and jupyter-command-kernel
The merged class is `jupyter-kernel-process`.

The `jupyter-command-kernel` class existed to launch kernels using the
`jupyter kernel` shell command. This was done to support launching
kernels on remote systems via TRAMP. The work of generating a
connection info. file was offloaded to that command since it can find
out a set of open ports more reliably on a remote system than Emacs
can.

The only difference between the two classes was that the connection
info. was generated manually for a `jupyter-spec-kernel`, so now the
`jupyter kernel` command is relied on in that case too (via
`jupyter-session-with-random-ports` from
8ad90b887a4afa161d907056ae44db5b119dbc5d).

* jupyter-kernel-process-manager.el
(jupyter-env, jupyter-kernelspec): Require.
(jupyter--after-kernel-process-ready): Remove.
(jupyter--start-kernel-process): New function.
(jupyter-start-kernel)
[jupyter-kernel-process]: Use it, set the SESSION slot of a kernel
before doing so.
(jupyter-command-kernel, jupyter-spec-kernel): Remove. Also remove all
related methods.
(jupyter-start-new-kernel): Use `jupyer--kernel-process` to replace
calls to the removed classes.

* test/jupyter-test.el
(jupyter-kernel-lifetime)
(jupyter-command-kernel): Replace references to removed classes with
`jupyter--kernel-process`
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
4164f13bdc Remove jupyter-hb-comm
* jupyter-channel-ioloop-comm.el
(jupyter-channel-ioloop-comm): Remove it from the super-class list.
Add a `hb` slot to compensate.
(jupyter-hb-beating-p, jupyter-hb-pause)
(jupyter-hb-unpause): Relocated from...

* jupyter-comm-layer.el: ...here.

* jupyter-client.el (jupyter-hb-beating-p, jupyter-hb-pause)
(jupyter-hb-unpause): Check for a `hb` slot instead of it.
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
7a11c8f0ac Add jupyter-connection.el
This file holds the `jupyter-connection` type which is an intermediate
successor of `jupyter-comm-layer` on the way towards more functional
kernel I/O.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
95f3e150b4 Add jupyter-kernel.el and related
The new files added in this commit will eventually replace the manager
and kernel classes and favor struct types to represent kernels instead
of classes.  A kernel manager was a concept ripped from the
jupyter/jupyter_client reference implementation.

In Emacs the concept makes the client implementation more complicated
and is replaced by functions that manage the lifetime of a kernel:
`jupyter-launch`, `jupyter-shutdown`, and `jupyter-interrupt`.

* jupyter-kernel-manager.el
* jupyter-kernel-process-manager.el
* jupyter-server.el
* test/jupyter-server-test.el
* test/test-helper.el: Make `jupyter-kernel`, `jupyter-server-kernel`,
  and `jupyter-kernel-process` private classes.  The new files below
  use the public names, but as structs now.

* jupyter-kernel.el
* jupyter-kernel-process.el
* jupyter-server-kernel.el: New files.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
cc60e6abe2 Ensure all tests that rely on the REST API have a server tag
* test/jupyter-server-test.el: Do it.

* test/jupyter-tramp-test.el: Do it.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
b6f89c96dd Cleanup documentation
* jupyter-rest-api (jupyter-api-kernel-websocket): Do it.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
591d51c9bc jupyter-api-get-kernel-ws -> jupyter-api-kernel-websocket
* jupyter-rest-api.el: Do it.

* test/jupyter-server-test.el: Do it.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
ffcfdb6179 Let the server validate the kernelspec
* jupyter-server.el (jupyter-server--verify-kernelspec):
  Remove. Update all callers.
2023-02-13 20:21:14 -06:00
Nathaniel Nicandro
07d444021a Add functions to aid in launching kernel processes
This is in preparation for merging `jupyter-command-kernel` and
`jupyter-spec-kernel` into just the `jupyter-kernel-process` class.

* jupyter-env.el
(jupyer-session-with-random-ports): New function.

* jupyter-kernelspec.el
(jupyter-expand-environment-variables)
(jupyter-process-environment)
(jupyter-kernel-argv): New functions.

* test/jupyter-test.el
(jupyer-session-with-random-ports)
(jupyter-expand-environment-variables)
(jupyter-process-environment)
(jupyter-kernel-argv): New tests.
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
Nathaniel Nicandro
eebeef1293 Don't attempt to byte-compile a symbol whose function value is a subr
`(byte-compile #'cons)` will return `t` which is not a function.
Passing in the `subr` to `byte-compile` will just return the `subr` so
everything works out OK.  This is an attempt at fixing issues like
nnicandro/emacs-zmq#32.
2023-02-13 20:15:56 -06:00
Nathaniel Nicandro
85f6ff84ed jupyter-org--coalesce-stream-results: Refactor 2023-02-13 20:15:56 -06:00
Ahmed Shariff
bc3b78be43 Fix available-kernelspecs failing from warning output 2023-02-04 20:24:55 -06:00
Jürgen Hötzel
4d62a88951 Use TRAMP handler for access-file
Fixes file-not-found error when using `dired`.
2023-02-04 20:18:06 -06:00
Nathaniel Nicandro
16cbda7916 Fix incorrect number of arguments 2023-02-04 16:58:12 -06:00
Nathaniel Nicandro
14899664b6 Don't use zmq-recv-decoded and zmq-send-encoded
These functions no longer exist in newer versions of `emacs-zmq`.
Closes #433.
2023-02-03 20:12:32 -06:00
Nathaniel Nicandro
3736ae753a Prevent leaking ANSI sequences when inserting text/plain results
* jupyter-mime.el (jupyter-insert): Do it.
2023-02-03 20:12:32 -06:00
Nathaniel Nicandro
2e8689227f Add a way to debug the message stream from a kernel
Previously it was hard to step through the code whenever messages were
coming in live from a kernel due to the asynchronous nature of
handling process output in Emacs.
2023-02-03 20:12:32 -06:00
Tomasz Mieszkowski
7d20c0aee2 Sort available kernelspecs; guess with ^; use guessing in jupyter-run-repl 2022-04-19 13:52:23 -05:00
Mikhail Rudenko
0a7055d7b1 Add optional image width limiting for REPL 2022-02-11 20:10:00 -06:00
Nathaniel Nicandro
42a9765897 Fix typo
Change `target-name` to `target_name`
2022-01-05 13:43:26 -06:00
Nathaniel Nicandro
df343af5e9 Remove .github/FUNDING.yml 2021-12-09 21:20:52 -06:00
Nathaniel Nicandro
c702f1e90f Add some helper functions for Org tests 2021-11-30 10:47:53 -06:00
Nathaniel Nicandro
03a4f688cc Remove superfluous and 2021-11-30 10:47:53 -06:00
Nathaniel Nicandro
113acb239d Use default-directory as :dir when executing a source block
`default-directory` is already set according to :dir when executing a
source block. This prevents `org-babel-expand-body:jupyter` from
attempting to re-expand the value of the :dir header argument.
See #302.
2021-11-30 10:47:53 -06:00
Nathaniel Nicandro
db450a9f44 Ignore ANSI escapes when testing some Org source blocks 2021-11-30 10:47:53 -06:00
Nathaniel Nicandro
a2cbebdfda Use a raw string in :dir handling code for Python source blocks 2021-11-30 10:47:53 -06:00
Nathaniel Nicandro
724d03ea20 Install pandoc during tests on Travis and Appveyor 2021-11-30 10:46:52 -06:00
Nathaniel Nicandro
4729e21184 Fix output order when using pandoc conversion
Fixes #351.
2021-11-30 10:46:52 -06:00
Tomasz Mieszkowski
57306bf385 Make scratch buffers easier to identify 2021-11-27 21:47:25 -06:00
Tomasz Mieszkowski
7b64e18144 Update dev, remove init target in Makefile (no --dev option) 2021-11-27 21:32:28 -06:00
Nathaniel Nicandro
0dec83f7e4 Remove a usage of thread-first and thread-last
This usage broke debugging of org-babel-execute:jupyter.
2021-11-20 20:32:35 -06:00
Nathaniel Nicandro
162d047e62 Add section on how to run tests in README
Closes #239
2021-11-20 10:53:09 -06:00
Nathaniel Nicandro
19aab43b9e Fix link in README 2021-11-20 10:14:58 -06:00
Nathaniel Nicandro
5b09d4d5ca Case insensitivity when checking drawer name
Fixes #328
2021-11-19 20:20:19 -06:00
Nathaniel Nicandro
bb53fdd864 Don't manually fontify ANSI escapes in error tracebacks
The fontification is handled by font-lock in the Org buffer.

See https://github.com/nnicandro/emacs-jupyter/issues/328#issuecomment-968406494.
2021-11-19 20:12:58 -06:00
Nathaniel Nicandro
b87ecf0cd3 Scroll to bottom of window on new stream output
See #244
2021-11-17 19:36:46 -06:00
Nathaniel Nicandro
f178c1c7b8 Support Lisp expressions as session names 2021-11-15 19:50:54 -06:00
Nathaniel Nicandro
6de6ccd891 Fix argument position in a call to org-babel-get-src-block-info 2021-11-15 19:30:54 -06:00
Nathaniel Nicandro
20e68a6836 Revert "Remove .github/FUNDING.yml"
This reverts commit 64dda221c0.
2021-11-02 13:00:32 -05:00
Nathaniel Nicandro
1f0612eb93 Remove unused functions
* jupyter-kernelspec.el (jupyter-read-kernelspec)
(jupyter-kernelspecs-for-mode): Do it.
2021-04-22 09:51:36 -05:00
Nathaniel Nicandro
baa291a0e8 jupyter--connection-info: Validate connection info before returning it
* jupyter-client.el (jupyter--connection-info): Do it.
(jupyter-comm-initialize): Remove validation of connection info.
2021-04-22 09:51:36 -05:00
Nathaniel Nicandro
b4304ae473 Use cl-labels in one place
* jupyter-rest-api.el (jupyter-api-get-ordered-checkpoints): Do it.
2021-04-22 09:51:36 -05:00
Nathaniel Nicandro
a6c40a44fc Reduce length of some variable names
* ob-jupyter.el
(org-babel-jupyter-initiate-session-by-key): Get rid of unnecessary
variable.
(org-babel-jupyter-cleanup-file-links): result-pos -> pos, link-path
-> path,  link-dir -> dir. Add resource-dir variable to avoid
calculating the same thing in a loop.
(org-babel-execute:jupyter): kernel-lang -> lang
2021-04-22 09:51:36 -05:00
Nathaniel Nicandro
62b3de44a4 Mention why :file is being added to source block params
* jupyter-org-client.el (jupyter-org-result): Do it.
2021-04-22 09:51:36 -05:00
Nathaniel Nicandro
d99c9b2d2a Refactor org-babel-execute:jupyter for readability
* ob-jupyter.el (org-babel-jupyter--execute): New function.
(org-babel-execute:jupyter): Use it.
2021-04-22 09:51:36 -05:00
Nathaniel Nicandro
fca3671d4e jupyter-meta-kernel -> jupyter-kernel 2021-04-22 09:51:36 -05:00
Nathaniel Nicandro
2ff99918d2 Remove unnecessary function call
* jupyter-kernel-manager.el (initialize-instance): Remove
  `jupyter-kernel-alive-p` call.  This check is already done by
  `jupyter-kill-kernel`.
2021-04-22 09:51:36 -05:00
Nathaniel Nicandro
ebf67c475e Remove two methods of jupyter-kernel-process-manager
There was an implementation of `jupyter-start-channels` for a
`jupyter-kernel-process-manager` due to the manager being able to send messages
to the kernel via a kernel's control channel.  The channel currently serves as
an implementation detail of the manager class, don't allow its status to be
controlled outside of the manager class by removing the implementation.

In addition, remove the `jupyter-stop-channels` implementation since
it is no longer needed.

* jupyter-kernel-manager.el (jupyter-start-kernel): Remove call to
`jupyter-start-channels` on MANAGER.  This should not have been done in the
first place since only `jupyter-kernel-process-manager` implemented that
method, as explained.  Also remove the `jupyter-kernel-alive-p` call, this is
already done in an :around method of `jupyter-kernel-alive-p`, see
`jupyter-kernel-lifetime`.

* jupyter-kernel-process-manager.el
(jupyter-start-channels, jupyter-stop-channels)
[jupyter-kernel-process-manager]: Remove. For `jupyter-stop-channels`, expand
body at call site.
(jupyter-start-kernel) [jupyter-kernel-process-manager]:  Start the control
channel as a final step.
(jupyter-shutdown-kernel, jupyter-interrupt-kernel): Remove
`jupyter-start-channels` call.
2021-04-22 09:51:36 -05:00