Skip to content

Use tomllib from the standard library on Python 3.11+ #2463

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Aug 29, 2022
Merged
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ repos:
rev: v1.12.1
hooks:
- id: blacken-docs
additional_dependencies: [ black==21.12b0 ]
additional_dependencies: [ black==22.6 ]
- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.9.0
hooks:
1 change: 1 addition & 0 deletions docs/changelog/2463.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Use ``tomllib`` on Python 3.11 or later and ``tomli`` instead of ``toml`` library on lower versions - by :user:`gaborbernat`.
2 changes: 1 addition & 1 deletion docs/example/jenkins.rst
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ with this:
url = "https://bitbucket.org/hpk42/tox/raw/default/toxbootstrap.py"
# os.environ['USETOXDEV']="1" # use tox dev version
d = dict(__file__="toxbootstrap.py")
exec urllib.urlopen(url).read() in d
exec(urllib.urlopen(url).read(), globals=d)
d["cmdline"](["--recreate"])

The downloaded ``toxbootstrap.py`` file downloads all necessary files to
3 changes: 2 additions & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -39,10 +39,11 @@ install_requires =
pluggy>=0.12.0
py>=1.4.17
six>=1.14.0 # required when virtualenv>=20
toml>=0.9.4
virtualenv!=20.0.0,!=20.0.1,!=20.0.2,!=20.0.3,!=20.0.4,!=20.0.5,!=20.0.6,!=20.0.7,>=16.0.0
colorama>=0.4.1 ;platform_system=="Windows"
importlib-metadata>=0.12;python_version<"3.8"
toml;python_version=="2.7"
tomli>=2.0.1;python_version>="3.5" and python_version<"3.11"
python_requires = >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*

[options.packages.find]
25 changes: 21 additions & 4 deletions src/tox/config/__init__.py
Original file line number Diff line number Diff line change
@@ -20,7 +20,24 @@
import pluggy
import py
import six
import toml

if sys.version_info >= (3, 11):
import tomllib as toml_loader

toml_mode = "rb"
toml_encoding = None
elif sys.version_info >= (3,):
import tomli as toml_loader

toml_mode = "rb"
toml_encoding = None
else:
import toml as toml_loader

toml_mode = "r"
toml_encoding = "UTF-8"


from packaging import requirements
from packaging.utils import canonicalize_name
from packaging.version import Version
@@ -304,9 +321,9 @@ def parseconfig(args, plugins=()):


def get_py_project_toml(path):
with io.open(str(path), encoding="UTF-8") as file_handler:
config_data = toml.load(file_handler)
return config_data
with io.open(str(path), mode=toml_mode, encoding=toml_encoding) as file_handler:
config_data = toml_loader.load(file_handler)
return config_data


def propose_configs(cli_config_file):
12 changes: 6 additions & 6 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -48,7 +48,7 @@ passenv =
basepython = python3.10
skip_install = true
deps =
pre-commit>=2.16
pre-commit>=2.20
extras =
lint
commands =
@@ -65,8 +65,8 @@ setenv =
COVERAGE_FILE = {toxworkdir}/.coverage
skip_install = true
deps =
coverage>=6.2
diff-cover>=6.4
coverage>=6.4.4
diff-cover>=6.5.1
parallel_show_output = true
commands =
coverage combine
@@ -90,7 +90,7 @@ description = check that the long description is valid
basepython = python3.9
skip_install = true
deps =
twine>=3.7.1
twine>=4.0.1
extras =
commands =
pip wheel -w {envtmpdir}/build --no-deps .
@@ -114,9 +114,9 @@ passenv =
*
basepython = python3.10
deps =
gitpython>=3.1.24
gitpython>=3.1.27
packaging>=21.3
towncrier>=21.3
towncrier>=21.9
commands =
python {toxinidir}/tasks/release.py --version {posargs}