Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Launch into /lab by default by changing TLJH config's default value #775

Merged
merged 4 commits into from
Aug 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
26 changes: 26 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,32 @@
"fieldlist",
]


# -- Options for intersphinx extension ---------------------------------------
# ref: https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#configuration
#
# The extension makes us able to link like to other projects like below.
#
# rST - :external:py:class:`jupyterhub.spawner.Spawner`
# MyST - {external:py:class}`jupyterhub.spawner.Spawner`
#
# rST - :external:py:attribute:`jupyterhub.spawner.Spawner.default_url`
# MyST - {external:py:attribute}`jupyterhub.spawner.Spawner.default_url`
#
# To see what we can link to, do the following where "objects.inv" is appended
# to the sphinx based website:
#
# python -m sphinx.ext.intersphinx https://jupyterhub.readthedocs.io/en/stable/objects.inv
#
intersphinx_mapping = {
"jupyterhub": ("https://jupyterhub.readthedocs.io/en/stable/", None),
}

# intersphinx_disabled_reftypes set based on recommendation in
# https://docs.readthedocs.io/en/stable/guides/intersphinx.html#using-intersphinx
intersphinx_disabled_reftypes = ["*"]


# -- Options for linkcheck builder -------------------------------------------
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder
#
Expand Down
50 changes: 24 additions & 26 deletions docs/howto/user-env/notebook-interfaces.md
Original file line number Diff line number Diff line change
@@ -1,49 +1,47 @@
(howto/user-env/notebook-interfaces)=

# Change default User Interface
# Change default user interface

By default, logging into TLJH puts you in the classic Jupyter Notebook
interface we all know and love. However, there are at least two other
popular notebook interfaces you can use:
By default a user starting a server will see the JupyterLab interface. This can
be changed with TLJH config `user_environment.default_app` or with the
JupyterHub config
{external:py:attribute}`jupyterhub.spawner.Spawner.default_url` directly.

1. [JupyterLab](http://jupyterlab.readthedocs.io/en/stable/)
2. [nteract](https://nteract.io/)
The TLJH config supports the options `jupyterlab` and `classic`, which
translates to a `Spawner.default_url` config of `/lab` and `/tree`.

Both these interfaces are also shipped with TLJH by default. You can try
them temporarily, or set them to be the default interface whenever you
login.
Both these interfaces are also shipped with TLJH by default. You can try them
temporarily, or set them to be the default interface whenever you login.

## Trying an alternate interface temporarily

When you log in & start your server, by default the URL in your browser
will be something like `/user/<username>/tree`. The `/tree` is what
tells the notebook server to give you the classic notebook interface.
When you log in and start your server, by default the URL in your browser will
be something like `/user/<username>/lab`. The `/lab` is what tells the jupyter
server to give you the JupyterLab user interface.

- **For the JupyterLab interface**: change `/tree` to `/lab`.
- **For the nteract interface**: change `/tree` to `/nteract`
As an example, you can update the URL to not end with `/lab`, but instead end
with `/tree` to temporarily switch to the classic interface.

You can play around with them and see what fits your use cases best.
## Changing the default user interface using TLJH config

## Changing the default user interface
You can change the default url, and therefore the interface users get when they
log in by modifying TLJH config as an admin user.

You can change the default interface users get when they log in by
modifying `config.yaml` as an admin user.

1. To launch **JupyterLab** when users log in, run the following in an
admin console:
1. To launch the classic notebook interface when users log in, run the
following in the admin console:

```bash
sudo tljh-config set user_environment.default_app jupyterlab
sudo tljh-config set user_environment.default_app classic
```

2. Alternatively, to launch **nteract** when users log in, run the
following in the admin console:
1. To launch JupyterLab when users log in, run the following in an admin
console:

```bash
sudo tljh-config set user_environment.default_app nteract
sudo tljh-config set user_environment.default_app jupyterlab
```

3. Apply the changes by restarting JupyterHub. This should not disrupt
1. Apply the changes by restarting JupyterHub. This should not disrupt
current users.

```bash
Expand Down
5 changes: 5 additions & 0 deletions docs/reference/changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## Unreleased

- The default user interface changed to JupyterLab, to restore previous behavior
see the documentation about [User interfaces](#howto/user-env/notebook-interfaces).

## 1.0

### 1.0.0b1 - 2023-07-07
Expand Down
11 changes: 5 additions & 6 deletions tests/test_configurer.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,15 @@ def test_app_default():
Test default application with no config overrides.
"""
c = apply_mock_config({})
# default_url is not set, so JupyterHub will pick default.
assert "default_url" not in c.Spawner
assert c.Spawner.default_url == "/lab"


def test_app_jupyterlab():
def test_app_classic():
"""
Test setting JupyterLab as default application
Test setting classic as default application
"""
c = apply_mock_config({"user_environment": {"default_app": "jupyterlab"}})
assert c.Spawner.default_url == "/lab"
c = apply_mock_config({"user_environment": {"default_app": "classic"}})
assert c.Spawner.default_url == "/tree"


def test_auth_default():
Expand Down
4 changes: 3 additions & 1 deletion tljh/configurer.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
"password": "",
},
"user_environment": {
"default_app": "classic",
"default_app": "jupyterlab",
},
"services": {
"cull": {
Expand Down Expand Up @@ -231,6 +231,8 @@ def update_user_environment(c, config):
# Set default application users are launched into
if user_env["default_app"] == "jupyterlab":
c.Spawner.default_url = "/lab"
elif user_env["default_app"] == "classic":
c.Spawner.default_url = "/tree"


def update_user_account_config(c, config):
Expand Down