diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0710862..d2a3e2d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,13 +33,13 @@ jobs: if [[ "${{ github.event_name }}" == "schedule" || "${{ github.head_ref }}" =~ ^release_ ]]; then \ echo "matrix={ \ \"os\": [ \"ubuntu-latest\", \"macos-latest\", \"windows-latest\" ], \ - \"python-version\": [ \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\" ], \ + \"python-version\": [ \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\", \"3.13\" ], \ \"package_level\": [ \"minimum\", \"latest\" ] \ }" >> $GITHUB_OUTPUT; \ else \ echo "matrix={ \ \"os\": [ \"ubuntu-latest\" ], \ - \"python-version\": [ \"3.8\", \"3.12\" ], \ + \"python-version\": [ \"3.8\", \"3.13\" ], \ \"package_level\": [ \"minimum\", \"latest\" ], \ \"include\": [ \ { \ @@ -64,7 +64,7 @@ jobs: }, \ { \ \"os\": \"macos-latest\", \ - \"python-version\": \"3.12\", \ + \"python-version\": \"3.13\", \ \"package_level\": \"minimum\" \ }, \ { \ @@ -74,7 +74,7 @@ jobs: }, \ { \ \"os\": \"windows-latest\", \ - \"python-version\": \"3.12\", \ + \"python-version\": \"3.13\", \ \"package_level\": \"minimum\" \ } \ ] \ diff --git a/base-requirements.txt b/base-requirements.txt index 124794c..4ae4dcd 100644 --- a/base-requirements.txt +++ b/base-requirements.txt @@ -8,4 +8,4 @@ pip>=23.3 setuptools>=70.0.0 setuptools-scm[toml]>=8.1.0 -wheel>=0.38.1 +wheel>=0.41.3 diff --git a/dev-requirements.txt b/dev-requirements.txt index d4187f7..f2defb5 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -18,16 +18,23 @@ pytest-cov>=2.7.0 coveralls>=3.3.0 # Safety CI by pyup.io -# Safety 3.0.0 requires exact versions of authlib==1.2.0 and jwt==1.3.1. -safety>=3.0.1 +# Safety 3.0.x pins pydantic to <2.0, preventing bug fixes. +# pydantic 2.8.0 fixes an install issue on Python 3.13. +safety>=3.1.0 +safety-schemas>=0.0.2,!=0.0.7 +pydantic>=2.8.0 # Click is used by safety # safety 2.2.0 requires Click >=8.0.2 Click>=8.0.2 # PyYAML is pulled in by dparse -# PyYAML 5.3.1 addressed issue 38100 reported by safety -PyYAML>=5.3.1 +# PyYAML is also pulled in by dparse and python-coveralls +# PyYAML 6.0 has wheel archives for Python 3.6 - 3.11 +# PyYAML 6.0.0 fails install since Cython 3 was released, see issue +# https://github.com/yaml/pyyaml/issues/724. +# PyYAML 6.0.2 provides wheel archives for Python 3.13 on Windows +PyYAML>=6.0.2 # Tox # tox 3.17 requires six>=1.14.0 - covered in requirements.txt @@ -54,7 +61,7 @@ sphinxcontrib-serializinghtml>=1.1.5; python_version == '3.8' sphinxcontrib-serializinghtml>=1.1.9; python_version >= '3.9' sphinxcontrib-websupport>=1.2.4 autodocsumm>=0.2.12 -Babel>=2.9.1 +Babel>=2.11.0 # PyLint (no imports, invoked via pylint script) pylint>=3.0.1 diff --git a/docs/changes.rst b/docs/changes.rst index 3e53337..4d8c34c 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -35,6 +35,9 @@ Released: not yet **Enhancements:** +* Added support for Python 3.13. This required increasing the minimum version + of several packages needed for development. (issue #203) + * Added '__version_tuple__' with the integer versions. (related to issue #152) * Dev: Changed from setup.py to using pyproject.toml. (issue #152) diff --git a/minimum-constraints-develop.txt b/minimum-constraints-develop.txt index 3147065..81cac67 100644 --- a/minimum-constraints-develop.txt +++ b/minimum-constraints-develop.txt @@ -26,14 +26,14 @@ pytest-cov==2.7.0 coveralls==3.3.0 # Safety CI by pyup.io -safety==3.0.1 -safety-schemas==0.0.1 +safety==3.1.0 +safety-schemas==0.0.2 # TODO: Change to dparse 0.6.4 once released dparse==0.6.4b0 ruamel.yaml==0.17.21 Authlib==1.3.1 marshmallow==3.15.0 -pydantic==1.10.13 +pydantic==2.8.0 typer==0.12.0 typer-cli==0.12.0 typer-slim==0.12.0 @@ -43,7 +43,7 @@ psutil==6.0.0 Click==8.0.2 # PyYAML is pulled in by dparse -PyYAML==5.3.1 +PyYAML==6.0.2 # Tox tox==3.21.0 @@ -66,7 +66,7 @@ sphinxcontrib-serializinghtml==1.1.5; python_version == '3.8' sphinxcontrib-serializinghtml==1.1.9; python_version >= '3.9' sphinxcontrib-websupport==1.2.4 autodocsumm==0.2.12 -Babel==2.9.1 +Babel==2.11.0 # PyLint (no imports, invoked via pylint script) pylint>=3.0.1 @@ -138,8 +138,8 @@ py==1.11.0 pydantic==1.10.13 pyparsing==2.4.7 python-dateutil==2.6.0 -pyzmq==16.0.4; python_version <= '3.11' -pyzmq==25.1.1; python_version >= '3.12' +# pyzmq 26.1.0 added wheel archives for Python 3.13 +pyzmq==26.1.0 requests==2.32.2 requests-mock==1.6.0 requests-toolbelt==0.8.0 diff --git a/minimum-constraints-install.txt b/minimum-constraints-install.txt index 751b678..086b696 100644 --- a/minimum-constraints-install.txt +++ b/minimum-constraints-install.txt @@ -11,7 +11,7 @@ pip==23.3 setuptools==70.0.0 # Note on not specifying 'setuptools-scm[toml]': Extras cannot be in constraints files setuptools-scm==8.1.0 -wheel==0.38.1 +wheel==0.41.3 # Direct dependencies for installation (must be consistent with requirements.txt) diff --git a/pyproject.toml b/pyproject.toml index bc4d17b..c35e39d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ requires = [ # minimum-constraints-install.txt "setuptools>=70.0.0", "setuptools-scm[toml]>=8.1.0", - "wheel>=0.38.1" + "wheel>=0.41.3" ] build-backend = "setuptools.build_meta" @@ -49,6 +49,7 @@ classifiers = [ 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', 'Topic :: Software Development :: Libraries :: Python Modules', ] requires-python = ">=3.8" diff --git a/tox.ini b/tox.ini index 7d0e3bd..2b65433 100644 --- a/tox.ini +++ b/tox.ini @@ -13,6 +13,7 @@ envlist = py310 py311 py312 + py313 win64_py38_32 win64_py38_64 win64_py39_32 @@ -23,11 +24,14 @@ envlist = win64_py311_64 win64_py312_32 win64_py312_64 + win64_py313_32 + win64_py313_64 cygwin64_py38 cygwin64_py39 cygwin64_py310 cygwin64_py311 cygwin64_py312 + cygwin64_py313 # For Appveyor, missing interpreters should fail. For local use, you may # want to allow to skip missing interpreters. @@ -97,6 +101,10 @@ basepython = python3.11 platform = linux2|darwin basepython = python3.12 +[testenv:py313] +platform = linux2|darwin +basepython = python3.13 + # Note: The basepython file paths for the win64* tox environments may need to # be customized. @@ -140,6 +148,14 @@ basepython = C:\Python312\python.exe platform = win32 basepython = C:\Python312-x64\python.exe +[testenv:win64_py313_32] +platform = win32 +basepython = C:\Python313\python.exe + +[testenv:win64_py313_64] +platform = win32 +basepython = C:\Python313-x64\python.exe + # Note: The 32-bit versions of CygWin do not work: # - On Python 3.6 and upwards, Tox returns success but does not do anything. @@ -162,3 +178,7 @@ basepython = python3.11 [testenv:cygwin64_py312] platform = cygwin basepython = python3.12 + +[testenv:cygwin64_py313] +platform = cygwin +basepython = python3.13