1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
[build-system]
requires = ["hatchling", "hatch-vcs", "hatch-fancy-pypi-readme"]
build-backend = "hatchling.build"
[tool.hatch.version]
source = "vcs"
[project]
name = "jsonschema"
description = "An implementation of JSON Schema validation for Python"
requires-python = ">=3.9"
license = "MIT"
license-files = ["COPYING"]
keywords = [
"validation",
"data validation",
"jsonschema",
"json",
"json schema",
]
authors = [
{ name = "Julian Berman", email = "Julian+jsonschema@GrayVines.com" },
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: File Formats :: JSON",
"Topic :: File Formats :: JSON :: JSON Schema",
]
dynamic = ["version", "readme"]
dependencies = [
"attrs>=22.2.0",
"jsonschema-specifications>=2023.03.6",
"referencing>=0.28.4",
"rpds-py>=0.7.1",
]
[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",
"rfc3987-syntax>=1.1.0",
"uri_template",
"webcolors>=24.6.0",
]
[project.scripts]
jsonschema = "jsonschema.cli:main"
[project.urls]
Homepage = "https://github.com/python-jsonschema/jsonschema"
Documentation = "https://python-jsonschema.readthedocs.io/"
Issues = "https://github.com/python-jsonschema/jsonschema/issues/"
Funding = "https://github.com/sponsors/Julian"
Tidelift = "https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link"
Changelog = "https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst"
Source = "https://github.com/python-jsonschema/jsonschema"
[dependency-groups]
test = ["virtue", "jsonpath-ng"]
[tool.hatch.metadata.hooks.fancy-pypi-readme]
content-type = "text/x-rst"
[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]
path = "README.rst"
end-before = ".. start cut from PyPI"
[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]
path = "README.rst"
start-after = ".. end cut from PyPI\n\n\n"
[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]
text = """
Release Information
-------------------
"""
[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]
path = "CHANGELOG.rst"
pattern = "(^v.+?)\nv"
[tool.coverage.html]
show_contexts = true
skip_covered = false
[tool.coverage.run]
branch = true
source = ["jsonschema"]
dynamic_context = "test_function"
[tool.coverage.report]
exclude_also = [
"if TYPE_CHECKING:",
"\\s*\\.\\.\\.\\s*",
]
omit = [
"*/jsonschema/__main__.py",
"*/jsonschema/benchmarks/*",
"*/jsonschema/tests/fuzz_validate.py",
]
show_missing = true
skip_covered = true
[tool.doc8]
ignore = [
"D000", # see PyCQA/doc8#125
"D001", # one sentence per line, so max length doesn't make sense
]
[tool.mypy]
ignore_missing_imports = true
show_error_codes = true
exclude = ["jsonschema/benchmarks/*"]
[tool.ruff]
line-length = 79
extend-exclude = ["json"]
[tool.ruff.lint]
select = ["ALL"]
ignore = [
"A001", # It's fine to shadow builtins
"A002",
"A003",
"A005",
"ARG", # This is all wrong whenever an interface is involved
"ANN", # Just let the type checker do this
"B006", # Mutable arguments require care but are OK if you don't abuse them
"B008", # It's totally OK to call functions for default arguments.
"B904", # raise SomeException(...) is fine.
"B905", # No need for explicit strict, this is simply zip's default behavior
"C408", # Calling dict is fine when it saves quoting the keys
"C901", # Not really something to focus on
"D105", # It's fine to not have docstrings for magic methods.
"D107", # __init__ especially doesn't need a docstring
"D200", # This rule makes diffs uglier when expanding docstrings
"D203", # No blank lines before docstrings.
"D212", # Start docstrings on the second line.
"D400", # This rule misses sassy docstrings ending with ! or ?
"D401", # This rule is too flaky.
"D406", # Section headers should end with a colon not a newline
"D407", # Underlines aren't needed
"D412", # Plz spaces after section headers
"EM101", # These don't bother me, it's fine there's some duplication.
"EM102",
"FBT", # It's worth avoiding boolean args but I don't care to enforce it
"FIX", # Yes thanks, if I could it wouldn't be there
"N", # These naming rules are silly
"PERF203", # try/excepts in loops are sometimes needed
"PLC0415", # too noisy, there are too many cases this is fine
"PLR0911", # These metrics are fine to be aware of but not to enforce
"PLR0912",
"PLR0913",
"PLR0915",
"PLR1714", # This makes for uglier comparisons sometimes
"PLW0642", # Shadowing self also isn't a big deal.
"PLW2901", # Shadowing for loop variables is occasionally fine.
"PT", # We use unittest
"PYI025", # wat, I'm not confused, thanks.
"RET502", # Returning None implicitly is fine
"RET503",
"RET505", # These push you to use `if` instead of `elif`, but for no reason
"RET506",
"RSE102", # Ha, what, who even knew you could leave the parens off. But no.
"SIM300", # Not sure what heuristic this uses, but it's easily incorrect
"SLF001", # Private usage within this package itself is fine
"TD", # These TODO style rules are also silly
"TRY003", # Some exception classes are essentially intended for free-form
"UP007", # We support 3.9
]
[tool.ruff.lint.flake8-pytest-style]
mark-parentheses = false
[tool.ruff.lint.flake8-quotes]
docstring-quotes = "double"
[tool.ruff.lint.isort]
combine-as-imports = true
from-first = true
[tool.ruff.lint.per-file-ignores]
"noxfile.py" = ["ANN", "D100", "S101", "T201"]
"docs/*" = ["ANN", "D", "INP001"]
"jsonschema/tests/*" = [
"ANN",
"D",
"RUF012",
"S",
"PLR",
"PLW1641",
"PYI024",
"TRY",
]
"jsonschema/tests/test_format.py" = ["ERA001"]
"jsonschema/benchmarks/*" = ["ANN", "D", "INP001", "S101"]
|