Files
jupyterhub/pyproject.toml
2025-07-04 14:23:38 +01:00

186 lines
5.0 KiB
TOML

# PEP 621 build info
[build-system]
requires = ["setuptools>=61", "setuptools-scm"]
build-backend = "setuptools.build_meta"
# Project metadata
# ref: https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
[project]
name = "jupyterhub"
version = "5.4.0.dev"
dynamic = ["readme", "dependencies"]
description = "JupyterHub: A multi-user server for Jupyter notebooks"
authors = [
{ name = "Jupyter Development Team", email = "jupyter@googlegroups.com" },
]
keywords = ["Interactive", "Interpreter", "Shell", "Web", "Jupyter"]
license = { text = "BSD-3-Clause" }
requires-python = ">=3.8"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Intended Audience :: System Administrators",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: BSD License",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Operating System :: POSIX",
"Framework :: Jupyter",
]
[project.urls]
Homepage = "https://hub.jupyter.org"
Documentation = "https://jupyterhub.readthedocs.io"
Funding = "https://jupyter.org/about"
Source = "https://github.com/jupyterhub/jupyterhub"
Tracker = "https://github.com/jupyterhub/jupyterhub/issues"
[project.optional-dependencies]
# note: updating test dependencies here
# may require matching updates in ci/oldest-dependencies/
test = [
"beautifulsoup4[html5lib]",
"coverage",
# cryptography is an optional dependency for jupyterhub that we test
# against by default
"cryptography",
"jsonschema",
"jupyterlab>=3",
"mock",
# nbclassic provides the '/tree/' handler that we tests against in
# the test test_nbclassic_control_panel.
"nbclassic",
"pytest>=3.3",
"pytest-asyncio>=0.17,!=0.23.*,<1.0.0",
"pytest-cov",
"pytest-rerunfailures",
"requests-mock",
"playwright",
"virtualenv",
]
[project.scripts]
jupyterhub = "jupyterhub.app:main"
jupyterhub-singleuser = "jupyterhub.singleuser:main"
[project.entry-points."jupyterhub.authenticators"]
default = "jupyterhub.auth:PAMAuthenticator"
pam = "jupyterhub.auth:PAMAuthenticator"
dummy = "jupyterhub.auth:DummyAuthenticator"
shared-password = "jupyterhub.authenticators.shared:SharedPasswordAuthenticator"
null = "jupyterhub.auth:NullAuthenticator"
[project.entry-points."jupyterhub.proxies"]
default = "jupyterhub.proxy:ConfigurableHTTPProxy"
configurable-http-proxy = "jupyterhub.proxy:ConfigurableHTTPProxy"
[project.entry-points."jupyterhub.spawners"]
default = "jupyterhub.spawner:LocalProcessSpawner"
localprocess = "jupyterhub.spawner:LocalProcessSpawner"
simple = "jupyterhub.spawner:SimpleLocalProcessSpawner"
[tool.setuptools]
zip-safe = false
license-files = ["LICENSE"]
include-package-data = true
[tool.setuptools.packages.find]
where = [""]
include = ["jupyterhub*"]
# dynamic sources of metadata in other files
[tool.setuptools.dynamic]
readme = { file = "README.md", content-type = "text/markdown" }
dependencies = { file = "requirements.txt" }
# setuptools_scm needs a section to be present
[tool.setuptools_scm]
# we don't actually use setuptools_scm for versions,
# only the file-finder
fallback_version = "0.0.0"
# declarative data-files doesn't quite work right
# this is still in setup.py:get_data_files
# [tool.setuptools.data-files]
# "share/jupyterhub" = ["share/jupyterhub/**"]
# ruff is our linter and formatter
[tool.ruff.format]
quote-style = "preserve"
[tool.ruff.lint]
ignore = [
"F841", # unused variable
]
select = [
"E9", # syntax
"I", # isort
"UP", # pyupgrade
"F", # flake8
]
# djlint lints/formats our jinja templates
# https://djlint.com/docs/configuration/
[tool.djlint]
indent = 2
# ignore often-incorrect lint
# H006: image height/width attributes
# ignore style lint that formatter doesn't catch
# H008: double-quotes
# H029: form method case
ignore = "H006,H008,H021,H029"
use_gitignore = true
format_js = true
[tool.djlint.js]
indent_size = 2
# tbump is used to simplify and standardize the release process when updating
# the version, making a git commit and tag, and pushing changes.
#
# ref: https://github.com/your-tools/tbump#readme
#
[tool.tbump]
# Uncomment this if your project is hosted on GitHub:
github_url = "https://github.com/jupyterhub/jupyterhub"
[tool.tbump.version]
current = "5.4.0.dev"
# Example of a semver regexp.
# Make sure this matches current_version before
# using tbump
regex = '''
(?P<major>\d+)
\.
(?P<minor>\d+)
\.
(?P<patch>\d+)
(?P<pre>((a|b|rc)\d+)|)
\.?
(?P<dev>(?<=\.)dev\d*|)
'''
[tool.tbump.git]
message_template = "Bump to {new_version}"
tag_template = "{new_version}"
# For each file to patch, add a [[tool.tbump.file]] config
# section containing the path of the file, relative to the
# pyproject.toml location.
[[tool.tbump.file]]
src = "pyproject.toml"
search = 'version = "{current_version}"'
[[tool.tbump.file]]
src = "jupyterhub/_version.py"
version_template = '({major}, {minor}, {patch}, "{pre}", "{dev}")'
search = "version_info = {current_version}"
[[tool.tbump.file]]
src = "docs/source/_static/rest-api.yml"
search = "version: {current_version}"