From ca52f3e86f289a6a9c35d489223cbb2923a842be Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Mon, 11 Jul 2022 15:56:29 +0300 Subject: [PATCH] Use stdlib tomllib instead of tomli for Python 3.11+ --- setup.cfg | 2 +- src/setuptools_scm/_integration/pyproject_reading.py | 10 +++++++--- testing/test_integration.py | 6 ++++-- tox.ini | 3 +-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/setup.cfg b/setup.cfg index a95503a..dd5e0c8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -29,9 +29,9 @@ packages = find: install_requires = packaging>=20.0 setuptools - tomli>=1.0.0 # keep in sync typing-extensions importlib-metadata;python_version < '3.8' + tomli>=1.0.0;python_version < '3.11' # keep in sync python_requires = >=3.7 package_dir = =src diff --git a/src/setuptools_scm/_integration/pyproject_reading.py b/src/setuptools_scm/_integration/pyproject_reading.py index f43e6b1c..04801b5e 100644 --- a/src/setuptools_scm/_integration/pyproject_reading.py +++ b/src/setuptools_scm/_integration/pyproject_reading.py @@ -1,5 +1,6 @@ from __future__ import annotations +import sys import warnings from typing import Any from typing import Callable @@ -28,8 +29,11 @@ def project_name(self) -> str | None: return self.project.get("name") -def lazy_tomli_load(data: str) -> TOML_RESULT: - from tomli import loads +def lazy_toml_load(data: str) -> TOML_RESULT: + if sys.version_info >= (3, 11): + from tomllib import loads + else: + from tomli import loads return loads(data) @@ -40,7 +44,7 @@ def read_pyproject( _load_toml: TOML_LOADER | None = None, ) -> PyProjectData: if _load_toml is None: - _load_toml = lazy_tomli_load + _load_toml = lazy_toml_load with open(name, encoding="UTF-8") as strm: data = strm.read() defn = _load_toml(data) diff --git a/testing/test_integration.py b/testing/test_integration.py index 939bd4b6..f21b9e0c 100644 --- a/testing/test_integration.py +++ b/testing/test_integration.py @@ -24,7 +24,8 @@ def wd(wd: WorkDir) -> WorkDir: def test_pyproject_support(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: - pytest.importorskip("tomli") + if sys.version_info <= (3, 10): + pytest.importorskip("tomli") monkeypatch.delenv("SETUPTOOLS_SCM_DEBUG") pkg = tmp_path / "package" pkg.mkdir() @@ -83,7 +84,8 @@ def test_pyproject_support(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> N @with_metadata_in def test_pyproject_support_with_git(wd: WorkDir, metadata_in: str) -> None: - pytest.importorskip("tomli") + if sys.version_info <= (3, 10): + pytest.importorskip("tomli") wd.write("pyproject.toml", PYPROJECT_FILES[metadata_in]) wd.write("setup.py", SETUP_PY_FILES[metadata_in]) wd.write("setup.cfg", SETUP_CFG_FILES[metadata_in]) diff --git a/tox.ini b/tox.ini index 1662bdfa..ae698972 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist=py{37,38,39,310}-{test,selfcheck},check_readme,check-dist,check-bootstrap +envlist=py{37,38,39,310,311}-{test,selfcheck},check_readme,check-dist,check-bootstrap [pytest] testpaths=testing @@ -27,7 +27,6 @@ skip_install= deps= pytest setuptools >= 45 - tomli virtualenv>20 typing_extensions commands=