Compare commits

...

24 Commits
5.4.0 ... 5.4.1

Author SHA1 Message Date
Min RK
1d4c33b24d Bump to 5.4.1 2025-10-17 08:06:20 -07:00
Min RK
89ef91b23d disable announcement in tagged release 2025-10-17 07:59:25 -07:00
Min RK
a439dc5653 Merge pull request #5172 from minrk/541
changelog for 5.4.1
2025-10-17 07:59:17 -07:00
Min RK
a0785ed718 last changes in 5.4.1 changelog 2025-10-17 07:54:17 -07:00
Min RK
c1fbdf3b13 Merge pull request #5176 from minrk/test-314
test with 3.14 (and 3.14t)
2025-10-14 16:42:15 -07:00
Min RK
fb2aed84fa add 416 to upgrade dbs 2025-10-14 16:14:56 -07:00
Min RK
70b86eb7b8 make sure now method is declared staticmethod
assigning a regular function on a class makes it a method in 3.14

calling it with self
2025-10-14 16:13:48 -07:00
Min RK
1f8465e3ff add 4.1.6 to upgrade test 2025-10-14 16:01:39 -07:00
Min RK
2f4f5ac103 skip old hub db upgrade test for too-new Python 2025-10-14 15:59:44 -07:00
Min RK
0d908dab27 test with 3.14 (and 3.14t) 2025-10-14 15:45:29 -07:00
Min RK
8b408bc0b1 Merge pull request #5174 from krassowski/update-jupytercon-links
Update JupyterCon 2025 announcement links
2025-10-13 11:26:56 -07:00
Michał Krassowski
c1c90fc923 Update JupyterCon 2025 announcement links 2025-10-13 12:04:35 +01:00
Min RK
5e3aac97fa changelog for 5.4.1
add add versionchanged for ssl_alt_names
2025-10-10 08:37:00 -07:00
Min RK
2e8ed8fa84 Merge pull request #5171 from kreuzert/patch-issue-5170
allow ssl_alt_names to be callable
2025-10-09 12:44:16 -07:00
Tim Kreuzer
801e32e564 make ssl_alt_names callable 2025-10-09 20:00:44 +02:00
Simon Li
89013dac0d Merge pull request #5169 from minrk/sr-only
fix sr-only -> visually hidden
2025-10-09 12:41:48 +01:00
Min RK
da00efea2b fix sr-only -> visually hidden
removed in bootstrap 5, but we accidentially had it from fontawesome 6 as well, which is also gone now
2025-10-08 16:29:45 -07:00
Min RK
098ba7c79f Merge pull request #5166 from jupyterhub/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2025-10-07 08:22:51 -07:00
Min RK
86d51271e1 Merge pull request #5167 from kreuzert/patch-issue-5111
demote failing API request log level to debug
2025-10-07 08:22:31 -07:00
Tim Kreuzer
6fb0d88637 demote failing API request log level to debug 2025-10-07 15:22:05 +02:00
pre-commit-ci[bot]
e9654d6752 [pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.12.11 → v0.13.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.12.11...v0.13.3)
2025-10-06 21:54:42 +00:00
Min RK
ca3b2bc079 Merge pull request #5142 from jupyterhub/choldgraf-patch-1
JupyterCon banner and jupyter colors
2025-10-06 09:25:55 -07:00
pre-commit-ci[bot]
59d7d659bf [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-09-20 15:53:15 +00:00
Chris Holdgraf
e63c403e92 JupyterCon banner and jupyter colors 2025-09-20 08:52:50 -07:00
15 changed files with 76 additions and 22 deletions

View File

@@ -82,12 +82,12 @@ jobs:
subset: singleuser
- python: "3.9"
db: mysql
- python: "3.10"
db: postgres
- python: "3.12"
db: postgres
- python: "3.13"
subdomain: subdomain
serverextension: serverextension
- python: "3.11"
- python: "3.13"
ssl: ssl
serverextension: serverextension
- python: "3.11"
@@ -101,12 +101,14 @@ jobs:
ssl: ssl
noextension: noextension
subset: singleuser
- python: "3.11"
- python: "3.13"
browser: browser
- python: "3.11"
subdomain: subdomain
browser: browser
- python: "3.12"
- python: "3.14"
main_dependencies: main_dependencies
- python: "3.14t"
main_dependencies: main_dependencies
steps:

View File

@@ -16,7 +16,7 @@ ci:
repos:
# autoformat and lint Python code
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.11
rev: v0.13.3
hooks:
- id: ruff
types_or:

View File

@@ -21,7 +21,7 @@ fi
# Configure a set of databases in the database server for upgrade tests
# this list must be in sync with versions in test_db.py:test_upgrade
set -x
for SUFFIX in '' _upgrade_110 _upgrade_122 _upgrade_130 _upgrade_150 _upgrade_211 _upgrade_311; do
for SUFFIX in '' _upgrade_110 _upgrade_122 _upgrade_130 _upgrade_150 _upgrade_211 _upgrade_311 _upgrade_416; do
$SQL_CLIENT "DROP DATABASE jupyterhub${SUFFIX};" 2>/dev/null || true
$SQL_CLIENT "CREATE DATABASE jupyterhub${SUFFIX} ${EXTRA_CREATE_DATABASE_ARGS:-};"
done

View File

@@ -7,7 +7,7 @@ info:
license:
name: BSD-3-Clause
identifier: BSD-3-Clause
version: 5.4.0
version: 5.4.1
servers:
- url: /hub/api
security:

View File

@@ -228,6 +228,7 @@ def setup(app):
app.add_directive("jupyterhub-generate-config", ConfigDirective)
app.add_directive("jupyterhub-help-all", HelpAllDirective)
app.add_directive("jupyterhub-rest-api-links", RestAPILinksDirective)
app.add_css_file("https://docs.jupyter.org/en/latest/_static/jupyter.css")
# -- Read The Docs -----------------------------------------------------------
@@ -262,6 +263,7 @@ html_static_path = ["_static"]
html_theme = "jupyterhub_sphinx_theme"
html_theme_options = {
# "announcement": "🚀 Join us in San Diego · JupyterCon 2025 · Nov 4-5 · <a href=\"https://events.linuxfoundation.org/jupytercon/program/schedule/\">SCHEDULE</a> · <a href=\"https://events.linuxfoundation.org/jupytercon/register/\">REGISTER NOW</a>",
"header_links_before_dropdown": 6,
"icon_links": [
{

View File

@@ -22,6 +22,42 @@ Contributors to major version bumps in JupyterHub include:
## 5.4
### 5.4.1 - 2025-10-17
5.4.1 fixes some small regressions in 5.4.0.
Notably:
- with new stricter internal_ssl checking, [](Spawner.ssl_alt_names) may now be callable, giving an easier path to setting the alt names of SSL destinations.
- fixes the visibility of headings meant only for assistive technologies.
([full changelog](https://github.com/jupyterhub/jupyterhub/compare/5.4.0...5.4.1))
#### New features added
- allow ssl_alt_names to be callable [#5171](https://github.com/jupyterhub/jupyterhub/pull/5171) ([@kreuzert](https://github.com/kreuzert), [@minrk](https://github.com/minrk))
#### Enhancements made
- demote failing API request log level to debug [#5167](https://github.com/jupyterhub/jupyterhub/pull/5167) ([@kreuzert](https://github.com/kreuzert), [@minrk](https://github.com/minrk))
#### Bugs fixed
- fix sr-only -> visually hidden [#5169](https://github.com/jupyterhub/jupyterhub/pull/5169) ([@minrk](https://github.com/minrk), [@manics](https://github.com/manics))
#### Maintenance and upkeep improvements
- test with 3.14 (and 3.14t) [#5176](https://github.com/jupyterhub/jupyterhub/pull/5176) ([@minrk](https://github.com/minrk))
#### Contributors to this release
The following people contributed discussions, new ideas, code and documentation contributions, and review.
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/#how-does-this-tool-define-contributions-in-the-reports).
([GitHub contributors page for this release](https://github.com/jupyterhub/jupyterhub/graphs/contributors?from=2025-10-06&to=2025-10-17&type=c))
@choldgraf ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fjupyterhub+involves%3Acholdgraf+updated%3A2025-10-06..2025-10-17&type=Issues)) | @krassowski ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fjupyterhub+involves%3Akrassowski+updated%3A2025-10-06..2025-10-17&type=Issues)) | @kreuzert ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fjupyterhub+involves%3Akreuzert+updated%3A2025-10-06..2025-10-17&type=Issues)) | @manics ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fjupyterhub+involves%3Amanics+updated%3A2025-10-06..2025-10-17&type=Issues)) | @minrk ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fjupyterhub+involves%3Aminrk+updated%3A2025-10-06..2025-10-17&type=Issues))
### 5.4.0 - 2025-10-06
JupyterHub 5.4 is a small release with a few new features and several nice bugfixes.

View File

@@ -3,7 +3,7 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
# version_info updated by running `tbump`
version_info = (5, 4, 0, "", "")
version_info = (5, 4, 1, "", "")
# pep 440 version: no dot before beta/rc, but before .dev
# 0.1.0rc1

View File

@@ -1650,7 +1650,7 @@ class UserUrlHandler(BaseHandler):
def _fail_api_request(self, user_name='', server_name=''):
"""Fail an API request to a not-running server"""
self.log.warning(
self.log.debug(
"Failing suspected API request to not-running server: %s", self.request.path
)

View File

@@ -547,7 +547,7 @@ class Expiring:
which should be unix timestamp or datetime object
"""
now = utcnow # function, must return float timestamp or datetime
now = staticmethod(utcnow) # function, must return float timestamp or datetime
expires_at = None # must be defined
@property
@@ -1078,7 +1078,7 @@ class APIToken(Hashed, Base):
session_id = Column(Unicode(255), nullable=True)
# token metadata for bookkeeping
now = utcnow # for expiry
now = staticmethod(utcnow) # for expiry
created = Column(DateTime, default=utcnow)
expires_at = Column(DateTime, default=None, nullable=True)
last_activity = Column(DateTime)

View File

@@ -1425,13 +1425,19 @@ class Spawner(LoggingConfigurable):
trusted_alt_names = List(Unicode())
ssl_alt_names = List(
Unicode(),
ssl_alt_names = Union(
[List(Unicode()), Callable()],
config=True,
help="""List of SSL alt names
help="""List of SSL alt names (list of strings).
May be set in config if all spawners should have the same value(s),
or set at runtime by Spawner that know their names.
.. versionchanged:: 5.4.1
May now be a callable.
The callable will receive the Spawner as its only argument,
and must return a list of strings.
It may be async.
""",
)
@@ -1479,7 +1485,13 @@ class Spawner(LoggingConfigurable):
default_names = ["DNS:localhost", "IP:127.0.0.1"]
alt_names = []
alt_names.extend(self.ssl_alt_names)
ssl_alt_names = self.ssl_alt_names
if callable(ssl_alt_names):
ssl_alt_names = ssl_alt_names(self)
if isawaitable(ssl_alt_names):
ssl_alt_names = await ssl_alt_names
alt_names.extend(ssl_alt_names)
if self.ssl_alt_names_include_local:
alt_names = default_names + alt_names

View File

@@ -45,9 +45,11 @@ def generate_old_db(env_dir, hub_version, db_url):
# changes to this version list must also be reflected
# in ci/init-db.sh
@pytest.mark.parametrize(
'hub_version', ['1.1.0', '1.2.2', '1.3.0', '1.5.0', '2.1.1', '3.1.1']
'hub_version', ['1.1.0', '1.2.2', '1.3.0', '1.5.0', '2.1.1', '3.1.1', '4.1.6']
)
async def test_upgrade(tmpdir, hub_version):
if sys.version_info >= (3, 13) and V(hub_version) < V("4"):
pytest.skip("jupyterhub < 4 needs Python 3.12 or earlier")
db_url = os.getenv('JUPYTERHUB_TEST_DB_URL')
if db_url:
db_url += '_upgrade_' + hub_version.replace('.', '')

View File

@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
# ref: https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
[project]
name = "jupyterhub"
version = "5.4.0"
version = "5.4.1"
dynamic = ["readme", "dependencies"]
description = "JupyterHub: A multi-user server for Jupyter notebooks"
authors = [
@@ -147,7 +147,7 @@ indent_size = 2
github_url = "https://github.com/jupyterhub/jupyterhub"
[tool.tbump.version]
current = "5.4.0"
current = "5.4.1"
# Example of a semver regexp.
# Make sure this matches current_version before

View File

@@ -4,7 +4,7 @@
{% endif %}
{% block main %}
<div class="container">
<h1 class="sr-only">JupyterHub home page</h1>
<h1 class="visually-hidden">JupyterHub home page</h1>
<div class="row">
<div class="text-center">
{% if default_server.active %}<a id="stop" role="button" class="btn btn-lg btn-danger">Stop My Server</a>{% endif %}

View File

@@ -14,7 +14,7 @@
aria-valuenow="0"
aria-valuemin="0"
aria-valuemax="100">
<span class="sr-only"><span id="sr-progress">0%</span> Complete</span>
<span class="visually-hidden"><span id="sr-progress">0%</span> Complete</span>
</div>
</div>
<p id="progress-message"></p>

View File

@@ -1,7 +1,7 @@
{% extends "page.html" %}
{% block main %}
<div class="container">
<h1 class="sr-only">Manage JupyterHub Tokens</h1>
<h1 class="visually-hidden">Manage JupyterHub Tokens</h1>
<div class="row justify-content-center">
<form id="request-token-form" class="col-lg-6">
<div class="form-group">