1From 938d220ce48859cfbb117fb8df42c94c64b88043 Mon Sep 17 00:00:00 2001 2From: Leona Maroni <dev@leona.is> 3Date: Mon, 11 Nov 2024 12:03:54 +0000 4Subject: [PATCH] Enable support for python 3.13 and 3.13 (#96) 5 6adapter from 938d220ce48859cfbb117fb8df42c94c64b88043 7 8--- 9 .gitignore | 1 + 10 pyproject.toml | 18 ++++++----- 11 setup.cfg | 3 ++ 12 src/tendo/tee.py | 4 +-- 13 tox.ini | 67 +++++++++++++++++++-------------------- 14 5 files changed, 49 insertions(+), 44 deletions(-) 15 16index 215dce7..a1f51a7 100644 17--- a/.gitignore 18+++ b/.gitignore 19@@ -29,3 +29,4 @@ test-distribute.sh 20 /.pytest_cache 21 venv/* 22 src/tendo/_version.py 23+coverage.lcov 24diff --git a/pyproject.toml b/pyproject.toml 25index ef76df7..ad86d7d 100644 26--- a/pyproject.toml 27+++ b/pyproject.toml 28@@ -10,18 +10,20 @@ build-backend = "setuptools.build_meta" 29 [tool.black] 30 target-version = ["py38"] 31 32+[tool.coverage.report] 33+exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:"] 34+fail_under = 100 35+skip_covered = true 36+show_missing = true 37+ 38 [tool.coverage.run] 39-source_pkgs = ["tendo"] 40-branch = true 41+source = ["src"] 42+# Do not use branch until bug is fixes: 43+# https://github.com/nedbat/coveragepy/issues/605 44+branch = false 45 parallel = true 46 concurrency = ["multiprocessing", "thread"] 47 48-[tool.coverage.paths] 49-source = ["src", ".tox/*/site-packages"] 50- 51-[tool.coverage.report] 52-exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:"] 53- 54 [tool.isort] 55 profile = "black" 56 add_imports = "from __future__ import annotations" 57diff --git a/setup.cfg b/setup.cfg 58index 0a6d8c0..bf97071 100644 59--- a/setup.cfg 60+++ b/setup.cfg 61@@ -23,6 +23,8 @@ classifier = 62 Programming Language :: Python :: 3.9 63 Programming Language :: Python :: 3.10 64 Programming Language :: Python :: 3.11 65+ Programming Language :: Python :: 3.12 66+ Programming Language :: Python :: 3.13 67 Topic :: Software Development :: Libraries :: Python Modules 68 Topic :: Internet :: WWW/HTTP 69 70@@ -52,6 +54,7 @@ test = 71 coverage[toml]>=6.5.0 72 coveralls~=3.3.1 73 pre-commit>=3.3.3 74+ pip 75 pytest-cache~=1.0 76 pytest-cov~=3.0.0 77 pytest-html~=3.1.1 78diff --git a/src/tendo/tee.py b/src/tendo/tee.py 79index 04d21cf..5b08794 100755 80--- a/src/tendo/tee.py 81+++ b/src/tendo/tee.py 82@@ -3,7 +3,7 @@ 83 import codecs 84 import logging 85 import os 86-import pipes 87+from shlex import quote 88 import subprocess 89 import sys 90 import time 91@@ -57,7 +57,7 @@ def system2( 92 # because collections.Iterable seems to be missing on Debian Python 2.5.5 93 # (but not on OS X 10.8 with Python 2.5.6) 94 if hasattr(cmd, "__iter__"): 95- cmd = " ".join(pipes.quote(s) for s in cmd) 96+ cmd = " ".join(quote(s) for s in cmd) 97 98 t = time.process_time() 99 output = [] 100diff --git a/tox.ini b/tox.ini 101index 5faabef..7f81e8b 100644 102--- a/tox.ini 103+++ b/tox.ini 104@@ -11,45 +11,44 @@ isolated_build = True 105 106 [testenv] 107 sitepackages=False 108+commands_pre = 109+ # safety measure to assure we do not accidentally run tests with broken dependencies 110+ {envpython} -m pip check 111+ # cleaning needed to prevent errors between runs 112+ sh -c "rm -f {envdir}/.coverage.* 2>/dev/null || true" 113+commands= 114+ # We add coverage options but not making them mandatory as we do not want to force 115+ # pytest users to run coverage when they just want to run a single test with `pytest -k test` 116+ coverage run -m pytest {posargs:} 117+ # needed for upload to codecov.io 118+ {py,py39,py310,py311,py312,py313}: sh -c "coverage combine -q --data-file={envdir}/.coverage {envdir}/.coverage.* && coverage xml --data-file={envdir}/.coverage -o {envdir}/coverage.xml --ignore-errors --fail-under=0 && COVERAGE_FILE={envdir}/.coverage coverage lcov --fail-under=0 --ignore-errors -q && COVERAGE_FILE={envdir}/.coverage coverage report --fail-under=0 --ignore-errors" 119+ # lcov needed for vscode integration due to https://github.com/ryanluker/vscode-coverage-gutters/issues/403 120+editable = true 121+extras = test 122 passenv = 123- CURL_CA_BUNDLE # https proxies, https://github.com/tox-dev/tox/issues/1437 124- FORCE_COLOR 125- HOME 126- LANG 127- LC_ALL 128- LC_CTYPE 129- NO_COLOR 130- PYENV_VERSION 131- PYTEST_* # allows developer to define their own preferences 132- PYTEST_REQPASS # needed for CI 133- PY_* 134- PY_COLORS 135- REQUESTS_CA_BUNDLE # https proxies 136- RTD_TOKEN 137- RTOX* 138- SSH_AUTH_SOCK 139- SSL_CERT_FILE # https proxies 140+ CURL_CA_BUNDLE # https proxies, https://github.com/tox-dev/tox/issues/1437 141+ FORCE_COLOR 142+ HOME 143+ NO_COLOR 144+ PYTEST_* # allows developer to define their own preferences 145+ PYTEST_REQPASS # needed for CI 146+ PYTHON* # PYTHONPYCACHEPREFIX, PYTHONIOENCODING, PYTHONBREAKPOINT,... 147+ PY_COLORS 148+ RTD_TOKEN 149+ REQUESTS_CA_BUNDLE # https proxies 150+ SETUPTOOLS_SCM_DEBUG 151+ SSL_CERT_FILE # https proxies 152+ SSH_AUTH_SOCK # may be needed by git 153+ LANG 154+ LC_* 155 setenv = 156- COVERAGE_FILE={env:COVERAGE_FILE:{toxworkdir}/.coverage.{envname}} 157- COVERAGE_PROCESS_START={toxinidir}/pyproject.toml 158-commands= 159- coverage run -m pytest --color=yes --html={envlogdir}/report.html --self-contained-html 160- # --pyargs tendo 161+ COVERAGE_FILE = {env:COVERAGE_FILE:{envdir}/.coverage.{envname}} 162+ COVERAGE_PROCESS_START={toxinidir}/pyproject.toml 163+ PIP_DISABLE_PIP_VERSION_CHECK = 1 164 allowlist_externals = 165 sh 166-deps = 167- --editable .[test] 168 169-[testenv:coverage] 170-description = Combines and displays coverage results 171-commands = 172- sh -c "coverage combine .tox/.coverage.*" 173- # needed by codecov github actions: 174- coverage xml 175- # just for humans running it: 176- coverage report --skip-covered --fail-under=43 177-deps = 178- coverage[toml]>=6.5.0 179+ 180 181 [testenv:docs] 182 changedir=docs 183