1. 24 Sep, 2019 9 commits
  2. 23 Sep, 2019 1 commit
    • Ludovic Courtès's avatar
      messages: Use a larger buffer for incoming messages. · 78d429fe
      Ludovic Courtès authored
      This "fixes" the Matplotlib example.  Previously, we'd silently truncate
      the "display_data" message containing the plot as we forwarded it,
      resulting in breakage down the road.
      
      * jupyter/messages.scm <top level>: Add call to 'zmq-set-buffer-size'.
      78d429fe
  3. 20 Sep, 2019 7 commits
    • Ludovic Courtès's avatar
      Update example. · 04635011
      Ludovic Courtès authored
      * guix-kernel-demo.ipynb: Update.
      04635011
    • Ludovic Courtès's avatar
      Don't spawn a default environment upfront. · beb421ac
      Ludovic Courtès authored
      This ensures we reply to "kernel_info_request" in a timely fashion, and
      that we don't spawn a useless environment.  It also allows the user to
      not repeat ";;guix run my-env" in subsequent cells since the default
      environment is now recorded across cells.
      
      * guix-jupyter-kernel.scm (%default-environment-property): New variable.
      (proxy-state-default-environment, set-proxy-state-default-environment):
      New procedures.
      (create-environment): Call 'set-proxy-state-default-environment'.
      (reply-execute-request): Use the environment returned by
      'proxy-state-default-environment'.  Print an error as HTML when it's
      false.
      <top level>: Remove call to 'start-container' for the "default"
      environment.
      beb421ac
    • Ludovic Courtès's avatar
      kernels: 'spawn-kernel' searches for executables in $PATH. · def14612
      Ludovic Courtès authored
      * jupyter/kernels.scm (spawn-kernel): Use 'execlp' instead of 'exec'.
      This is useful notably for "irkernel", which just says "R" without an
      absolute file name.
      def14612
    • Ludovic Courtès's avatar
      Terminate and unregister existing proxy when recreating an environment. · f115d70a
      Ludovic Courtès authored
      * guix/jupyter/proxy.scm (unregister-proxied, terminate-proxied-kernel):
      New procedures.
      * guix-jupyter-kernel.scm (reply-execute-request): When 'lookup-proxied'
      returns true, call 'unmonitor-client' and 'terminate-proxied-kernel',
      and then 'create-environment'.
      f115d70a
    • Ludovic Courtès's avatar
      proxy: Unmonitor kernels that are terminated. · 5945ac36
      Ludovic Courtès authored
      * guix/jupyter/proxy.scm (terminate-proxied-kernels): Add call to
      'unmonitor-client'.
      5945ac36
    • Ludovic Courtès's avatar
      kernels: Increase timeout in kernel start-up test. · 87f44a41
      Ludovic Courtès authored
      * tests/kernels.scm ("run-kernel python3"): Increase timeout to 5000ms
      to increase the chances of getting a "starting" status message.
      87f44a41
    • Ludovic Courtès's avatar
      servers: Add 'unmonitor-client'. · 88e4b3e0
      Ludovic Courtès authored
      * jupyter/servers.scm (unmonitor-client): New procedure.
      (serve-kernels)[handle-abort]: Change to simply accumulate requests.
      [handle-requests]: New procedure.
      Adjust call to 'handle-message' accordingly.
      * tests/servers.scm ("ping pong, many clients leaving dynamically,
      shell"): New test.
      88e4b3e0
  4. 19 Sep, 2019 6 commits
    • Ludovic Courtès's avatar
      Environment contents are now displayed by the kernel. · f985eaac
      Ludovic Courtès authored
      The kernel has access to the manifest, so it can display its actual
      contents (including version numbers) upfront, before the environment is
      built.
      
      * guix/jupyter/inner-proxy.scm (kernel-info->shtml)
      (kernel-info->html): Remove.
      (reply-execute-request): Simply reply "Done!".
      * guix-jupyter-kernel.scm (manifest->shtml)
      (reply-for-environment, create-environment): New procedures.
      (reply-execute-request): Call 'create-environment'.
      f985eaac
    • Ludovic Courtès's avatar
      Pass the store connection as a state property. · 647d5afd
      Ludovic Courtès authored
      * guix-jupyter-kernel.scm (%store-property): New variable.
      (proxy-state-store): New procedure.
      (reply-execute-request): Use it instead of using 'with-store'.
      (kernel): Use 'with-store' and pass the store as a state property.
      647d5afd
    • Ludovic Courtès's avatar
      inner-proxy: Save the ZeroMQ context as a state property. · 6d550be4
      Ludovic Courtès authored
      * guix/jupyter/inner-proxy.scm (%context): Remove.
      (%zmq-context-property): New variable.
      (reply-execute-request): Use 'proxy-state-property' instead of referring
      to '%context'.
      (run-inner-proxy): Call 'zmq-create-context' here, and save the context
      as a %ZMQ-CONTEXT-PROPERTY property of the state.
      6d550be4
    • Ludovic Courtès's avatar
      proxy: Add user-defined properties to <proxy-state>. · 95fdf89d
      Ludovic Courtès authored
      * guix/jupyter/proxy.scm (<proxy-state>)[properties]: New field.
      (proxy-state): Adjust accordingly.
      (proxy-state-property, set-proxy-state-property): New procedures.
      95fdf89d
    • Ludovic Courtès's avatar
      Add (guix jupyter inner-proxy). · 1201d247
      Ludovic Courtès authored
      * guix-jupyter-container.scm: Rename to...
      * guix/jupyter/inner-proxy.scm: ... this, and turn into a module.
      * Makefile.am (SOURCES): Add 'inner-proxy.scm' and remove
      'guix-jupyter-container.scm'.
      * guix-jupyter-kernel.scm (container-path): Remove.
      (start-container)[spawn]: Use (guix jupyter inner-proxy).
      1201d247
    • Ludovic Courtès's avatar
      environment: Rewrite to use a profile manifest and 'eval/container*'. · 24c8abfd
      Ludovic Courtès authored
      * guix/jupyter/environ.scm: Remove.
      * guix/jupyter/environment.scm, guix/jupyter/containers.scm: New files.
      * tests/environ.scm: Remove.
      * Makefile.am (SOURCES): Adjust accordingly.
      (SCM_TESTS): Remove tests/environ.scm.
      * guix-jupyter-container.scm <top level>: Turn into...
      (run-inner-proxy): ... this.  New procedure.
      * guix-jupyter-kernel.scm (%inferior): New variable.
      (reply-execute-request): Use 'string-tokenize' and
      'specifications->manifest'.  Pass the manifest to 'start-container'.
      (module-to-import?): New procedure.
      (start-container): Rewrite to take a manifest and to evaluate code with
      'eval/container*'.  Set the 'GUIX_ENVIRONMENT' and 'JUPYTER_PATH'
      environment variables.
      * jupyter/kernels.scm (jupyter-kernel-path): Remove "GUIX_PROFILE"
      hack.
      24c8abfd
  5. 17 Sep, 2019 2 commits
  6. 16 Sep, 2019 2 commits
    • Ludovic Courtès's avatar
      Require Guile-Gcrypt >= 0.2.0. · 84c4fdb6
      Ludovic Courtès authored
      * configure.ac: Ensure we have the (gcrypt mac) module.
      * jupyter/kernels.scm: Use (gcrypt mac) instead of (gcrypt hmac).
      (generate-key): Call 'generate-signing-key'.
      * jupyter/messages.scm: Use (gcrypt mac).
      (get-signature): Use 'mac-algorithm' instead of a symbol.
      84c4fdb6
    • Ludovic Courtès's avatar
      json: Remove workaround for Guile-JSON 3.1.0. · 536d9f98
      Ludovic Courtès authored
      * jupyter/json.scm <top level>: Remove workaround for Guile-JSON 3.1.0.
      536d9f98
  7. 13 Sep, 2019 8 commits
    • Ludovic Courtès's avatar
      Move remaining kernel modules under (guix jupyter ...). · 887d6fe4
      Ludovic Courtès authored
      * guix-kernel/environ.scm: Rename to...
      * guix/jupyter/environ.scm: ... this.
      * guix-kernel/magic.scm: Rename to...
      * guix/jupyter/magic.scm: ... this
      * guix-jupyter-container.scm, guix-jupyter-kernel.scm,
      tests/environ.scm, tests/magic.scm: Adjust accordingly.
      * Makefile.am (SOURCES): Adjust accordingly.
      887d6fe4
    • Ludovic Courtès's avatar
      messages: Add JSON-mapped record types for "kernel_info_reply". · 8c6ac7f0
      Ludovic Courtès authored
      * jupyter/messages.scm (%current-protocol-version): New variable.
      (<language-info>, <kernel-info-reply>): New record types.
      * guix/jupyter/kernel.scm: New file.
      * Makefile.am (SOURCES): Add it.
      * guix-jupyter-kernel.scm (KERNEL-INFO): Remove.
      (reply-kernel-info-request): Use 'kernel-info-reply->json'.
      * tests/kernels.scm ("kernel_info_request"): Use
      'json->kernel-info-reply' and associated record types.
      8c6ac7f0
    • Ludovic Courtès's avatar
      json: Rebase on top of 'define-record-type*'. · b01b7af1
      Ludovic Courtès authored
      * jupyter/json.scm (json, <=>): New variables.
      (define-json-reader): Adjust to the new syntax for SPEC.
      (define-json-writer): Likewise.
      (define-json-mapping): Rebase on top of 'define-record-type*'.  Move
      JSON field spec under the 'json' keyword.
      * jupyter/kernels.scm (<kernel-specs>, <connection>): Adjust
      accordingly.
      (find-kernel-specs, allocate-connection): Use new syntactic
      constructors.
      b01b7af1
    • Ludovic Courtès's avatar
      proxy: Factorize global request handler. · c824394e
      Ludovic Courtès authored
      * guix-jupyter-container.scm (general-handler, dispatch): Remove.
      <top level>: Use 'proxy-request-handler' instead.
      * guix-jupyter-kernel.scm (general-handler, dispatch): Remove.
      <top level>: Use 'proxy-request-handler' instead.
      * guix/jupyter/proxy.scm (proxy-request-handler): New procedure.
      c824394e
    • Ludovic Courtès's avatar
      kernels: 'reply-html' doesn't set a recipient on iopub messages. · 0ff99a32
      Ludovic Courtès authored
      * jupyter/kernels.scm (reply-html): Pass #:recipient only when SOCKET is
      'kernel-shell'.
      0ff99a32
    • Ludovic Courtès's avatar
      Factorize proxy state handling in (guix jupyter proxy). · 1e334a55
      Ludovic Courtès authored
      * guix/jupyter/proxy.scm: New file.
      * Makefile.am (SOURCES): Add it.
      * guix-jupyter-container.scm (%main-kernel, %main-kernel-id)
      (register-kernel, kernel-by-name): Remove.
      (local-eval): No longer return COUNTER.
      (general-handler): Rewrite to expect a <proxy-state> and to pass a
      <proxy-state> to all the message type handlers.
      (ignore-request, reply-execute-request, shutdown): Adjust accordingly.
      <top level>: Create a <proxy-state> and pass it to 'server-kernels'.
      * guix-jupyter-kernel.scm (%main-kernel, %main-kernel-id)
      (register-proxy, proxy-by-name): Remove.
      (general-handler): Rewrite to expect a <proxy-state> and to pass a
      <proxy-state> to all the message type handlers.
      (ignore-request, reply-execute-request, shutdown): Adjust accordingly.
      (kill-containers): Remove.
      <top level>: Create a <proxy-state> and pass it to 'server-kernels'.
      1e334a55
    • Ludovic Courtès's avatar
      kernels: 'reply-html' replies to the message sender. · aa902cec
      Ludovic Courtès authored
      * jupyter/kernels.scm (reply-html): Pass #:recipient to 'send-message'.
      aa902cec
    • Ludovic Courtès's avatar
      Rewrite proxy to use 'serve-kernels'. · 1726ccb3
      Ludovic Courtès authored
      * jupyter/kernels.scm (generate-key): New procedure.
      (relay-message): Remove.
      * jupyter/messages.scm (<message>): Use 'define-immutable-record-type'
      and define 'set-message-content'.
      * guix-jupyter-container.scm (local-eval): Rewrite in terms of
      'send-message'.
      (reply-html-to-kernel): Remove.
      (general-handler): Copy from *-kernel.scm.
      (execute-request-sans-magic): New procedure.
      (ignore-request, reply-execute-request, shutdown): Adjust to new calling
      convention.
      (%main-kernel, %main-kernel-id): New variables.
      <top level>: Use 'serve-kernels'.
      * guix-jupyter-kernel.scm (%main-kernel, %main-kernel-id): New
      variables.
      (general-handler): Check whether we're talking to %MAIN-KERNEL.
      (reply-kernel-info-request, reply-execute-request, shutdown): Add 'kind'
      parameter.
      (new-container-connect): Remove.
      (start-container): Return a <kernel>.
      <top level>: Pass both the "default" container kernel and our client to
      'server-kernels'.  Set %MAIN-KERNEL.
      1726ccb3
  8. 12 Sep, 2019 4 commits
    • Ludovic Courtès's avatar
      Add (guix jupyter logging). · 82363869
      Ludovic Courtès authored
      * guix/jupyter/logging.scm: New file.
      * Makefile.am (SOURCES): Add it.
      82363869
    • Ludovic Courtès's avatar
      guix-jupyter-kernel: Use 'serve-kernels'. · 6446ff08
      Ludovic Courtès authored
      * guix-jupyter-kernel.scm (heartbeat-handler, start-kernel): Remove.
      (general-handler): Adjust prototype to match what 'serve-kernels'
      expects.
      <top level>: Use 'serve-kernels'.
      6446ff08
    • Ludovic Courtès's avatar
      kernels: Allow for OS-allocated TCP port numbers. · 150c006f
      Ludovic Courtès authored
      * jupyter/kernels.scm (allocate-connection): #:first-port defaults to #f.
      [allocate-port]: New procedure
      [try-connect]: New procedure.
      Use it in lieu of 'test-bind', and remove the extra 'zmq-connect'
      calls.
      (test-bind): Remove.
      150c006f
    • Ludovic Courtès's avatar
      servers: Add 'serve-kernels'. · fe70f6da
      Ludovic Courtès authored
      * jupyter/kernels.scm (kernel-socket-kind): New procedure.
      (zmq-poll*, allocate-connection): Export.
      * jupyter/servers.scm (%server-scheduler-prompt, %server-exit-prompt):
      New variables.
      * jupyter/servers.scm (monitor-client, leave-server-loop)
      (serve-kernels): New procedures.
      * tests/servers.scm: New file.
      fe70f6da
  9. 09 Sep, 2019 1 commit