blob: 1ec6d110f69b8f0c1581be4cae0326115ec2b3e2 [file] [log] [blame]
[build-system]
requires = ["flit_core>=3.2.0,<4"]
build-backend = "flit_core.buildapi"
[project]
name = "tomli"
version = "1.2.1" # DO NOT EDIT THIS LINE MANUALLY. LET bump2version UTILITY DO IT
description = "A lil' TOML parser"
authors = [
{ name = "Taneli Hukkinen", email = "hukkin@users.noreply.github.com" },
]
license = { file = "LICENSE" }
requires-python = ">=3.6"
readme = "README.md"
classifiers = [
"License :: OSI Approved :: MIT License",
"Operating System :: MacOS",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Software Development :: Libraries :: Python Modules",
"Typing :: Typed",
]
keywords = ["toml"]
[project.urls]
"Homepage" = "https://github.com/hukkin/tomli"
"Changelog" = "https://github.com/hukkin/tomli/blob/master/CHANGELOG.md"
[tool.flit.sdist]
exclude = [
"tests/",
"benchmark/",
"fuzzer/",
".*",
"CHANGELOG.md",
]
[tool.isort]
# Force imports to be sorted by module, independent of import type
force_sort_within_sections = true
# Group first party and local folder imports together
no_lines_before = ["LOCALFOLDER"]
# Configure isort to work without access to site-packages
known_first_party = ["tomli", "tests"]
# Settings for Black compatibility
profile = "black"
[tool.pytest.ini_options]
addopts = "--strict-markers --strict-config"
xfail_strict = true
[tool.tox]
legacy_tox_ini = '''
[tox]
# Only run pytest envs when no args given to tox
envlist = py{36,37,38,39}
isolated_build = True
[testenv:py{36,37,38,39}]
description = run tests against unpackaged source
skip_install = True
deps = -r tests/requirements.txt
commands =
pytest {posargs}
[testenv:py{36,37,38,39}-package]
description = run tests against a built package (can fail, in theory, if test dependencies need a tomli version incompatible with local state)
deps = -r tests/requirements.txt
commands =
pytest --import-mode=append {posargs}
[testenv:profile]
description = run profiler (use e.g. `firefox .tox/prof/combined.svg` to open)
skip_install = True
setenv =
PROFILER_ITERATIONS=1000
deps =
-r tests/requirements.txt
pytest-profiling
commands =
pytest tests/test_for_profiler.py --profile-svg --pstats-dir "{toxworkdir}/prof"
python -c 'import pathlib; print("profiler svg output under file://\{0\}".format(pathlib.Path(r"{toxworkdir}") / "prof" / "combined.svg"))'
[testenv:pre-commit]
description = run linters
skip_install = True
deps = pre-commit
commands = pre-commit run {posargs:--all}
[testenv:benchmark]
description = run the benchmark script against a local Tomli version
deps =
-r benchmark/requirements.txt
commands =
python -c 'import datetime; print(datetime.date.today())'
python --version
python benchmark/run.py
[testenv:benchmark-pypi]
description = run the benchmark script against the latest Tomli in PyPI
skip_install = True
deps =
tomli
-r benchmark/requirements.txt
commands =
python -c 'import datetime; print(datetime.date.today())'
python --version
python benchmark/run.py
[testenv:fuzz]
description = run the fuzzer against a local Tomli version (needs "apt install clang")
deps =
-r fuzzer/requirements.txt
allowlist_externals =
mkdir
cp
commands =
# Create a folder for persistent corpus and use benchmark data as initial seed
mkdir -p {toxworkdir}/fuzzer-corpus
cp -n benchmark/data.toml {toxworkdir}/fuzzer-corpus/data.toml
# Run fuzzer
python fuzzer/fuzz.py {toxworkdir}/fuzzer-corpus {posargs:-len_control=10000}
'''
[tool.coverage.run]
branch = true
omit = ["tests/*", "*/site-packages/*"]
[tool.coverage.report]
# Regexes for lines to exclude from consideration
exclude_lines = [
# Have to re-enable the standard pragma
"pragma: no cover",
# Code for static type checkers
"if TYPE_CHECKING:",
# Scripts
'if __name__ == .__main__.:',
]
[tool.mypy]
show_error_codes = true
warn_unreachable = true
warn_unused_ignores = true
warn_redundant_casts = true
warn_unused_configs = true
# Disabling incremental mode is required for `warn_unused_configs = true` to work
incremental = false
disallow_untyped_defs = true
check_untyped_defs = true
strict_equality = true
implicit_reexport = false
no_implicit_optional = true
[[tool.mypy.overrides]]
module = "tests.*"
disallow_untyped_defs = false
[[tool.mypy.overrides]]
# This matches `benchmark/run.py`. Since benchmark/ is
# not a package, we use the module name here.
module = "run"
ignore_errors = true
[[tool.mypy.overrides]]
# This matches `fuzzer/fuzz.py`.
module = "fuzz"
ignore_errors = true