jupyter / nbclassic

Jupyter Notebook as a Jupyter Server extension
https://nbclassic.readthedocs.io/en/latest
BSD 3-Clause "New" or "Revised" License
69 stars 60 forks source link

500 Error at launch (KeyError: 'terminals_available' in self.settings) #255

Open defjaf opened 11 months ago

defjaf commented 11 months ago

Also reported on discourse.

macOS 13.5, Python 3.11.4 (homebrew)

With the recent move to notebook 7, I have been having issues with both notebook (documented here and here) and nbclassic.

For the latter, I am seeing a traceback, followed by a 500 error in the browser:

[E 2023-07-26 08:40:30.645 ServerApp] Uncaught exception GET /nbclassic/tree?token=e2a5e04ac6410a588e1132bac555b4f1fce1c781e1c9b4e0 (::1)
    HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/nbclassic/tree?token=e2a5e04ac6410a588e1132bac555b4f1fce1c781e1c9b4e0', version='HTTP/1.1', remote_ip='::1')
    Traceback (most recent call last):
      File "/opt/homebrew/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/homebrew/lib/python3.11/site-packages/tornado/gen.py", line 786, in run
        yielded = self.gen.send(value)
                  ^^^^^^^^^^^^^^^^^^^^
      File "/opt/homebrew/lib/python3.11/site-packages/nbclassic/tree/handlers.py", line 69, in get
        terminals_available=self.settings['terminals_available'],
                            ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
    KeyError: 'terminals_available'

If I change "/opt/homebrew/lib/python3.11/site-packages/nbclassic/tree/handlers.py", line 69 from

terminals_available=self.settings['terminals_available'],

to

terminals_available=self.settings.get('terminals_available', False),

(as is done in notebook/app.py) it works (no errors, no 500), but I assume this shouldn't be necessary (and perhaps hides a real bug or config issue)?

I assume it is a local config issue somehow, but in fact even if I get rid of all of the current directories listed with jupyter --paths it does not seem to help.

(There seem to be other interface problems as documented in my jupyter/notebook issue. Also, if relevant: Python 3.11 is installed by homebrew, but all packages, including jupyter, notebook, etc. are installed with pip.)

Any ideas?

defjaf commented 11 months ago

Partial fix:

JUPYTER_PATH=/opt/homebrew/share/jupyter JUPYTER_CONFIG_PATH=/opt/homebrew/etc/jupyter jupyter nbclassic

seems to partially fix it -- there are errors in the terminal, but it runs.

This appears to be a config problem in some interaction between how homebrew and jupyter set paths?

(As such, I suspect that this is closely related to https://github.com/jupyter/notebook/issues/6974)

jtpio commented 11 months ago

cc @echarles @RRosio @ericsnekbytes for awareness

defjaf commented 11 months ago

See also https://github.com/jupyterlab/jupyterlab/issues/14890

lp9052 commented 5 months ago

jupyter_server_terminals's latest update added the following to respect terminal setting:

        """Initialize settings."""
        if not self.serverapp.terminals_enabled:
            return
        self.initialize_configurables()
        self.settings.update(
            {"terminals_available": True, "terminal_manager": self.terminal_manager}
        )

So if enable_terminal is set to false then it is guaranteed to fail the nbclassic/tree. the latest code will fix this. Will we have a release soon?

Link to jupyter_server_terminals: https://github.com/jupyter-server/jupyter_server_terminals/issues/85