From daba375a4c424ee114123122e5c1285e3db4d62e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sat, 31 May 2025 10:52:38 +0200 Subject: [PATCH 1/5] Loosen exception regexps for Python 3.14 Python 3.14 changes the exception message for passing wrong types to `await` to: TypeError: 'int' object can't be awaited Loosen the regular expression to accept both the old and the new exception message. --- tests/test_async_py3.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_async_py3.py b/tests/test_async_py3.py index 0d9450b..3fbba18 100644 --- a/tests/test_async_py3.py +++ b/tests/test_async_py3.py @@ -498,7 +498,7 @@ def test_await_1(lop): async def foo(): await 1 - with pytest.raises(TypeError, match='object int can.t.*await'): + with pytest.raises(TypeError, match='int.*can.t.*await'): run_async(lop.Proxy(foo)) @@ -506,7 +506,7 @@ def test_await_2(lop): async def foo(): await [] - with pytest.raises(TypeError, match='object list can.t.*await'): + with pytest.raises(TypeError, match='list.*can.t.*await'): run_async(lop.Proxy(foo)) From 2afe874edb2ed56bc4fb3414767fbb880ef61850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sat, 31 May 2025 10:59:45 +0200 Subject: [PATCH 2/5] Ignore `asyncio.set_event_loop_policy()` deprecation warning in test Ignore `asyncio.set_event_loop_policy()` deprecation warning when called directly in test. I have scoped the ignore to the test call rather than doing that globally in `pytest.ini`, so that it will be caught if introduced elsewhere in the code. --- tests/test_async_py3.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_async_py3.py b/tests/test_async_py3.py index 3fbba18..86f5f9c 100644 --- a/tests/test_async_py3.py +++ b/tests/test_async_py3.py @@ -1733,6 +1733,8 @@ async def f(): pass finally: loop.close() - asyncio.set_event_loop_policy(None) + with warnings.catch_warnings(): + warnings.simplefilter('ignore', DeprecationWarning) + asyncio.set_event_loop_policy(None) assert buffer == [1, 2, 'MyException'] From ae0b2217d99c5796696b62f904f459eaed145362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sat, 31 May 2025 11:07:35 +0200 Subject: [PATCH 3/5] Add python3.14 to tox environments --- tox.ini | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index dbe24b9..f62f01f 100644 --- a/tox.ini +++ b/tox.ini @@ -14,7 +14,7 @@ envlist = clean, check, docs, - {py39,py310,py311,py312,py313,py313-ft,pypy39,pypy310}-{cover,nocov}, + {py39,py310,py311,py312,py313,py313-ft,py314,py314-ft,pypy39,pypy310}-{cover,nocov}, report ignore_basepython_conflict = true @@ -28,6 +28,8 @@ basepython = py312: {env:TOXPYTHON:python3.12} py313: {env:TOXPYTHON:python3.13} py313ft: {env:TOXPYTHON:python3.13t} + py314: {env:TOXPYTHON:python3.14} + py314ft: {env:TOXPYTHON:python3.14t} {bootstrap,clean,check,report,docs,codecov,coveralls,extension-coveralls}: {env:TOXPYTHON:python3} setenv = PYTHONPATH={toxinidir}/tests From b460b428c959a50beb80e3748854b3b2d38765c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sat, 31 May 2025 11:08:40 +0200 Subject: [PATCH 4/5] Add python3.14 CI workflows --- .github/workflows/github-actions.yml | 180 +++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml index 446b4da..20d4734 100644 --- a/.github/workflows/github-actions.yml +++ b/.github/workflows/github-actions.yml @@ -559,6 +559,186 @@ jobs: cibw_build: 'cp313t-*' cibw_ft: 'true' os: 'macos-latest' + - name: 'py314-cover (ubuntu/x86_64)' + artifact: 'py314-ubuntu-x86_64' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'x64' + tox_env: 'py314-cover' + cover: true + cibw_arch: 'x86_64' + cibw_build: false + os: 'ubuntu-latest' + - name: 'py314-cover (windows/AMD64)' + artifact: 'py314-windows-AMD64' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'x64' + tox_env: 'py314-cover' + cover: true + cibw_arch: 'AMD64' + cibw_build: false + os: 'windows-latest' + - name: 'py314-cover (macos/arm64)' + artifact: 'py314-macos-arm64' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'arm64' + tox_env: 'py314-cover' + cover: true + cibw_arch: 'arm64' + cibw_build: false + os: 'macos-latest' + - name: 'py314-nocov (ubuntu/x86_64/manylinux)' + artifact: 'py314-ubuntu-x86_64-manylinux' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'x64' + tox_env: 'py314-nocov' + cibw_arch: 'x86_64' + cibw_build: 'cp314-*manylinux*' + cibw_ft: 'false' + os: 'ubuntu-latest' + - name: 'py314-nocov (ubuntu/x86_64/musllinux)' + artifact: 'py314-ubuntu-x86_64-musllinux' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'x64' + tox_env: 'py314-nocov' + cibw_arch: 'x86_64' + cibw_build: 'cp314-*musllinux*' + cibw_ft: 'false' + os: 'ubuntu-latest' + - name: 'py314-nocov (ubuntu/aarch64/manylinux)' + artifact: 'py314-ubuntu-aarch64-manylinux' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'x64' + tox_env: 'py314-nocov' + cibw_arch: 'aarch64' + cibw_build: 'cp314-*manylinux*' + cibw_ft: 'false' + os: 'ubuntu-latest' + - name: 'py314-nocov (ubuntu/aarch64/musllinux)' + artifact: 'py314-ubuntu-aarch64-musllinux' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'x64' + tox_env: 'py314-nocov' + cibw_arch: 'aarch64' + cibw_build: 'cp314-*musllinux*' + cibw_ft: 'false' + os: 'ubuntu-latest' + - name: 'py314-nocov (windows/AMD64)' + artifact: 'py314-windows-AMD64' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'x64' + tox_env: 'py314-nocov' + cibw_arch: 'AMD64' + cibw_build: 'cp314-*' + cibw_ft: 'false' + os: 'windows-latest' + - name: 'py314-nocov (macos/arm64)' + artifact: 'py314-macos-arm64' + python: '3.14-dev' + toxpython: 'python3.14' + python_arch: 'arm64' + tox_env: 'py314-nocov' + cibw_arch: 'arm64' + cibw_build: 'cp314-*' + cibw_ft: 'false' + os: 'macos-latest' + - name: 'py314-ft-cover (ubuntu/x86_64)' + artifact: 'py314-ft-ubuntu-x86_64' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'x64-freethreaded' + tox_env: 'py314-ft-cover' + cover: true + cibw_arch: 'x86_64' + cibw_build: false + os: 'ubuntu-latest' + - name: 'py314-ft-cover (windows/AMD64)' + artifact: 'py314-ft-windows-AMD64' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'x64-freethreaded' + tox_env: 'py314-ft-cover' + cover: true + cibw_arch: 'AMD64' + cibw_build: false + os: 'windows-latest' + - name: 'py314-ft-cover (macos/arm64)' + artifact: 'py314-ft-macos-arm64' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'arm64-freethreaded' + tox_env: 'py314-ft-cover' + cover: true + cibw_arch: 'arm64' + cibw_build: false + os: 'macos-latest' + - name: 'py314-ft-nocov (ubuntu/x86_64/manylinux)' + artifact: 'py314-ft-ubuntu-x86_64-manylinux' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'x64-freethreaded' + tox_env: 'py314-ft-nocov' + cibw_arch: 'x86_64' + cibw_build: 'cp314t-*manylinux*' + cibw_ft: 'true' + os: 'ubuntu-latest' + - name: 'py314-ft-nocov (ubuntu/x86_64/musllinux)' + artifact: 'py314-ft-ubuntu-x86_64-musllinux' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'x64-freethreaded' + tox_env: 'py314-ft-nocov' + cibw_arch: 'x86_64' + cibw_build: 'cp314t-*musllinux*' + cibw_ft: 'true' + os: 'ubuntu-latest' + - name: 'py314-ft-nocov (ubuntu/aarch64/manylinux)' + artifact: 'py314-ft-ubuntu-aarch64-manylinux' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'x64-freethreaded' + tox_env: 'py314-ft-nocov' + cibw_arch: 'aarch64' + cibw_build: 'cp314t-*manylinux*' + cibw_ft: 'true' + os: 'ubuntu-latest' + - name: 'py314-ft-nocov (ubuntu/aarch64/musllinux)' + artifact: 'py314-ft-ubuntu-aarch64-musllinux' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'x64-freethreaded' + tox_env: 'py314-ft-nocov' + cibw_arch: 'aarch64' + cibw_build: 'cp314t-*musllinux*' + cibw_ft: 'true' + os: 'ubuntu-latest' + - name: 'py314-ft-nocov (windows/AMD64)' + artifact: 'py314-ft-windows-AMD64' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'x64-freethreaded' + tox_env: 'py314-ft-nocov' + cibw_arch: 'AMD64' + cibw_build: 'cp314t-*' + cibw_ft: 'true' + os: 'windows-latest' + - name: 'py314-ft-nocov (macos/arm64)' + artifact: 'py314-ft-macos-arm64' + python: '3.14-dev' + toxpython: 'python3.14t' + python_arch: 'arm64-freethreaded' + tox_env: 'py314-ft-nocov' + cibw_arch: 'arm64' + cibw_build: 'cp314t-*' + cibw_ft: 'true' + os: 'macos-latest' - name: 'pypy39-cover (ubuntu/x86_64)' artifact: 'pypy39-ubuntu-x86_64' python: 'pypy-3.9' From 52481cbea70acfe60bec178b1711b25aa1623a5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Sat, 31 May 2025 11:09:20 +0200 Subject: [PATCH 5/5] Add Python 3.14 trove classifier --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 2cd958f..284834c 100755 --- a/setup.py +++ b/setup.py @@ -111,6 +111,7 @@ def read(*names, **kwargs): 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', # uncomment if you test on these interpreters: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy