Files
jupyterhub/examples/service-announcement
Min RK 75c947be59 address djlint lint
and autoformat js in templates
2024-04-19 10:46:50 +02:00
..
2024-04-19 10:46:50 +02:00
2022-03-31 12:33:26 +02:00

Simple Announcement Service Example

This is a simple service that allows administrators to manage announcements that appear when JupyterHub renders pages.

To run the service as a hub-managed service simply include in your JupyterHub configuration file something like:

📓Info: You can run the announcement service example from the examples directory, using one of the several services provided by JupyterHub.


import sys

from pathlib import Path
# absolute path to announcement.py
announcement_py = str(Path(__file__).parent.joinpath("announcement.py").resolve())

#ensure get_config() is added in
 c = get_config()

...
..

c.JupyterHub.services = [
        {
            'name': 'announcement',
            'url': 'http://127.0.0.1:8888',
            'command': [sys.executable, announcement_py, "--port", "8888"],
        }
]

This starts the announcements service up at /services/announcement/ when JupyterHub launches. By default the announcement text is empty.

The announcement module has a configurable port (default 8888) and an API prefix setting. By default the API prefix is JUPYTERHUB_SERVICE_PREFIX if that environment variable is set or / if it is not.

Managing the Announcement

Users with permission can set the announcement text with an API token:

$ curl -X POST -H "Authorization: token <token>"                        \
    -d '{"announcement":"JupyterHub will be upgraded on August 14!"}'   \
    https://.../services/announcement/

To grant permission, add a role (JupyterHub 2.0) with access to the announcement service:

# grant the 'announcer' permission to access the announcement service
c.JupyterHub.load_roles = [
    {
        "name": "announcers",
        "users": ["announcer"], # or groups
        "scopes": ["access:services!service=announcement"],
    }
]

Anyone can read the announcement:

$ curl https://.../services/announcement/ | python -m json.tool
{
    announcement: "JupyterHub will be upgraded on August 14!",
    timestamp: "...",
    user: "..."
}

The time the announcement was posted is recorded in the timestamp field and the user who posted the announcement is recorded in the user field.

To clear the announcement text, send a DELETE request. This has the same permission requirement.

$ curl -X DELETE -H "Authorization: token <token>"                        \
    https://.../services/announcement/

Seeing the Announcement in JupyterHub

To be able to render the announcement, include the provide page.html template that extends the base page.html template. Set c.JupyterHub.template_paths in JupyterHub's configuration to include the path to the extending template. The template changes the announcement element and does a JQuery $.get() call to retrieve the announcement text.

JupyterHub's configurable announcement template variables can be set for various pages like login, logout, spawn, and home. Including the template provided in this example overrides all of those.