Fancy Profile UI for jupyterhub-kubespawner
Project description
jupyterhub-fancy-profiles
A react based, fancy implementation of user selectable profiles for use with jupyterhub-kubespawner.
Features
-
Interpret a
profileList
given to kubespawner, and render a better looking and more featureful selector. This includes descriptions for various options, as well as better descriptions for allowing users to 'write-in' a choice. -
If enabled, interact with a binderhub deployed as a JupyterHub service to allow users to dynamically build images they want to use, without requiring it to be pre-built.
Limitations
-
While multiple
profile_options
are supported, only a singleprofile
is supported. -
The forms values don't remember their previous state upon refresh
How to use
Using with z2jh
This package can be used with any installation of KubeSpawner, but is most
commonly used with an installation of z2jh. It requires installing jupyterhub-fancy-profiles
in the hub
image used by z2jh.
As a convenience, we build and push docker images that can be automatically used with z2jh!
-
Look at the list of available tags and find a tag that matches the version of z2jh you are using.
-
Use this image in the z2jh config. In the
values.yaml
file you pass tohelm
, use the following:hub: image: name: quay.io/yuvipanda/z2jh-hub-with-fancy-profiles tag: <tag-from-the-list> extraConfig: 01-enable-fancy-profiles: | from jupyterhub_fancy_profiles import setup_ui setup_ui(c)
-
Run a
helm upgrade
and you should have fancy profiles enabled!
Using directly with KubeSpawner
After the package is installed, you can have kubespawner use the templates shipped
with this package to provide appropriate UI, by adding the following snippet
to your jupyterhub_config.py
file:
from jupyterhub_fancy_profiles import setup_ui
setup_ui(c)
The setup_ui
function will setup all the appropriate config as needed. Currently,
it will:
- Setup extra templates to be made available to kubespawner, to render the
base HTML for
profile_list
. - Setup extra HTTP handlers, primarily for serving our static assets.
What is in here?
The primary contents are:
jupyterhub_fancy_profiles/templates
contains jinja2 templates, primarilyHTML
for constructing the form itself. This can contain multiple templates that are composed together using all of jinja2's composition features (likeinclude
)src/
contains JS and CSS that are packaged via standard frontend bundling tools (webpack
andbabel
), outputing assets intojupyterhub_fancy_profiles/static/
. This allows us to use standard frontend tooling to write JS & CSS - for example, xterm.js can be used without many complications.
Why React?
/* If this file gets over 200 lines of code long (not counting docs / comments), start using a framework
(from the BinderHub JS Source Code)
Dear Reader, the file did get more than 200 lines long, but alas there was no time to start using a framework. Lesson learnt from that is we should use a very lightweight framework right from the start, something mainstream that can attract frontend devs without being so fancy that nobody else can work on it. Given the size and complexity of this - a complex UI but only a single page - plain react without typescript seems the correct choice. We will not make this into a super-heavy, complex application - just a fairly simple one that uses react.
Making a Release
We have automation set up to make releases to PyPI. We should release early and often!
-
On your local checkout, make sure you are up to date with the
main
branchgit checkout main git stash git pull upstream main # or git pull origin main, as needed
-
Create a new git tag, with the version of the release.
git tag -a v<version-number>
Leave a simple message here. While ideally a changelog would also be nice, at a minimum simply say
Version <version-number>
-
Push your tag to GitHub
git push origin --tags
-
That's it! A new release should be on PyPI shortly.
Funding
Funded in part by GESIS in cooperation with NFDI4DS 460234259 and CESSDA.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file jupyterhub_fancy_profiles-0.3.4.tar.gz
.
File metadata
- Download URL: jupyterhub_fancy_profiles-0.3.4.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4d56ab5e44d6cc4475a1114b170e68ab5a340531bbf102a7a5e00b3d4b7f523 |
|
MD5 | 590baa5d019584ce006a1de16f688b9d |
|
BLAKE2b-256 | 5ad8fa9f211d4c5276e56383ceb8f5209416fc25da49ef13be29e0cab79c6ef5 |
File details
Details for the file jupyterhub_fancy_profiles-0.3.4-py3-none-any.whl
.
File metadata
- Download URL: jupyterhub_fancy_profiles-0.3.4-py3-none-any.whl
- Upload date:
- Size: 975.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f33a10afd95bf78db3f06919e1fe09a0071d2a3c445d775eb685b6e83969c945 |
|
MD5 | 4f19cd01493e37ee7b4f1c1080cfd280 |
|
BLAKE2b-256 | 900c8239e177f0bea497376b5309288e366b80a500878861df2e31eccce1cbd6 |