Skip to content

Commit

Permalink
Modernize the packaging setup via PEP 621 and Hatch.
Browse files Browse the repository at this point in the history
Doing so jettisons setuptools in favor of a more modern, well-designed,
legacy-free, and now well-supported packaging tool, Hatch.

No end-user facing behavior changes are expected for any users using a
recent packaging setup (within the past 2-3 years), so please report any
issues.

Hatch: https://hatch.pypa.io/latest/
PEP 621: https://peps.python.org/pep-0621/
  • Loading branch information
Julian committed May 28, 2022
1 parent bc61702 commit 9602996
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 101 deletions.
10 changes: 10 additions & 0 deletions .flake8
@@ -0,0 +1,10 @@
[flake8]
ban-relative-imports = true
inline-quotes = "
exclude =
jsonschema/__init__.py
jsonschema/_reflect.py
ignore =
B008, # Barring function calls in default args. Ha, no.
B306, # See https://github.com/PyCQA/flake8-bugbear/issues/131
W503, # (flake8 default) old PEP8 boolean operator line breaks
2 changes: 1 addition & 1 deletion docs/validate.rst
Expand Up @@ -205,7 +205,7 @@ to validate. Their names can be viewed by inspecting the
`FormatChecker.checkers` attribute. Certain checkers will only be
available if an appropriate package is available for use. The easiest way to
ensure you have what is needed is to install ``jsonschema`` using the
``format`` or ``format_nongpl`` setuptools extra -- i.e.
``format`` or ``format_nongpl`` collection of optional dependencies -- e.g.

.. code-block:: sh
Expand Down
97 changes: 89 additions & 8 deletions pyproject.toml
@@ -1,16 +1,97 @@
[build-system]
requires = [
# The minimum setuptools version is specific to the PEP 517 backend,
# and may be stricter than the version required in `setup.py`
"setuptools>=40.6.0",
"setuptools_scm[toml]>=3.4",
"wheel",
requires = ["hatchling", "hatch-vcs"]
build-backend = "hatchling.build"

[tool.hatch.version]
source = "vcs"

[project]
name = "jsonschema"
description = "An implementation of JSON Schema validation for Python"
readme = "README.rst"
requires-python = ">=3.7"
license = {text = "MIT"}
keywords = ["validation", "data validation", "jsonschema", "json"]
authors = [
{email = "Julian+jsonschema@GrayVines.com"},
{name = "Julian Berman"},
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
]
dynamic = ["version"]

dependencies = [
"attrs>=17.4.0",
"pyrsistent>=0.14.0,!=0.17.0,!=0.17.1,!=0.17.2",

"importlib_metadata;python_version<'3.8'",
"typing_extensions;python_version<'3.8'",
"importlib_resources>=1.4.0;python_version<'3.9'",
]

[project.optional-dependencies]
format = [
"fqdn",
"idna",
"isoduration",
"jsonpointer>1.13",
"rfc3339-validator",
"rfc3987",
"uri_template",
"webcolors>=1.11",
]
format_nongpl = [
"fqdn",
"idna",
"isoduration",
"jsonpointer>1.13",
"rfc3339-validator",
"rfc3986-validator>0.1.0",
"uri_template",
"webcolors>=1.11",
]
build-backend = "setuptools.build_meta"

[project.scripts]
jsonschema = "jsonschema.cli:main"

[project.urls]
homepage = "github.com/python-jsonschema/jsonschema"
documentation = "python-jsonschema.readthedocs.io/en/latest/"
issues = "github.com/python-jsonschema/jsonschema/issues/"
funding = "github.com/sponsors/Julian"
tidelift = "tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link"
changelog = "github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst"
source = "github.com/python-jsonschema/jsonschema"

[tool.isort]
from_first = true
include_trailing_comma = true
multi_line_output = 3

[tool.setuptools_scm]
[tool.mypy]
ignore_missing_imports = true

[tool.pydocstyle]
match = "(?!(test_|_|compat|cli)).*\\.py" # see PyCQA/pydocstyle#323
add-select = [
"D410", # Trailing whitespace plz
]
add-ignore = [
"D107", # Hah, no
"D200", # 1-line docstrings don't need to be on one line
"D202", # One line is fine.
"D412", # Trailing whitespace plz
"D413", # No trailing whitespace plz
]
91 changes: 0 additions & 91 deletions setup.cfg

This file was deleted.

2 changes: 1 addition & 1 deletion tox.ini
Expand Up @@ -97,7 +97,7 @@ deps =
pyrsistent
types-attrs
types-requests
commands = {envpython} -m mypy --config {toxinidir}/setup.cfg {posargs} {toxinidir}/jsonschema
commands = {envpython} -m mypy --config {toxinidir}/pyproject.toml {posargs} {toxinidir}/jsonschema

[testenv:docs-dirhtml]
commands = {envpython} -m sphinx -b dirhtml {toxinidir}/docs/ {envtmpdir}/build {posargs:-a -n -q -T -W}
Expand Down

0 comments on commit 9602996

Please sign in to comment.