diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 9240a16f4..ff279e9fd 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -12,7 +12,7 @@ jobs: fail-fast: false matrix: include: - - python-version: "3.12" + - python-version: "3.13" env: TOXENV: pylint - python-version: "3.9" @@ -24,7 +24,7 @@ jobs: - python-version: "3.12" # Keep in sync with .readthedocs.yml env: TOXENV: docs - - python-version: "3.12" + - python-version: "3.13" env: TOXENV: twinecheck diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5ce48be61..2cd556516 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: 3.12 + python-version: "3.13" - run: | pip install --upgrade build twine python -m build diff --git a/.github/workflows/tests-macos.yml b/.github/workflows/tests-macos.yml index 27ea0613d..9e78e26e3 100644 --- a/.github/workflows/tests-macos.yml +++ b/.github/workflows/tests-macos.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/tests-ubuntu.yml b/.github/workflows/tests-ubuntu.yml index 29c870e6a..b2a5681df 100644 --- a/.github/workflows/tests-ubuntu.yml +++ b/.github/workflows/tests-ubuntu.yml @@ -24,7 +24,10 @@ jobs: - python-version: "3.12" env: TOXENV: py - - python-version: "3.12" + - python-version: "3.13" + env: + TOXENV: py + - python-version: "3.13" env: TOXENV: asyncio - python-version: pypy3.9 @@ -51,10 +54,10 @@ jobs: env: TOXENV: botocore-pinned - - python-version: "3.12" + - python-version: "3.13" env: TOXENV: extra-deps - - python-version: "3.12" + - python-version: "3.13" env: TOXENV: botocore diff --git a/.github/workflows/tests-windows.yml b/.github/workflows/tests-windows.yml index 5728c6fd0..67a32aac6 100644 --- a/.github/workflows/tests-windows.yml +++ b/.github/workflows/tests-windows.yml @@ -24,7 +24,10 @@ jobs: - python-version: "3.12" env: TOXENV: py - - python-version: "3.12" + - python-version: "3.13" + env: + TOXENV: py + - python-version: "3.13" env: TOXENV: asyncio diff --git a/setup.py b/setup.py index ec9ac6597..6cc1150a5 100644 --- a/setup.py +++ b/setup.py @@ -62,6 +62,7 @@ setup( "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", diff --git a/tests/test_utils_python.py b/tests/test_utils_python.py index 4c60deafe..5681ff9a4 100644 --- a/tests/test_utils_python.py +++ b/tests/test_utils_python.py @@ -1,6 +1,7 @@ import functools import operator import platform +import sys from twisted.trial import unittest @@ -238,16 +239,18 @@ class UtilsPythonTestCase(unittest.TestCase): self.assertEqual(get_func_args(str.split, stripself=True), ["sep", "maxsplit"]) self.assertEqual(get_func_args(" ".join, stripself=True), ["iterable"]) - if platform.python_implementation() == "CPython": - # This didn't work on older versions of CPython: https://github.com/python/cpython/issues/86951 + if sys.version_info >= (3, 13) or platform.python_implementation() == "PyPy": + # the correct and correctly extracted signature + self.assertEqual( + get_func_args(operator.itemgetter(2), stripself=True), ["obj"] + ) + elif platform.python_implementation() == "CPython": + # ["args", "kwargs"] is a correct result for the pre-3.13 incorrect function signature + # [] is an incorrect result on even older CPython (https://github.com/python/cpython/issues/86951) self.assertIn( get_func_args(operator.itemgetter(2), stripself=True), [[], ["args", "kwargs"]], ) - elif platform.python_implementation() == "PyPy": - self.assertEqual( - get_func_args(operator.itemgetter(2), stripself=True), ["obj"] - ) def test_without_none_values(self): self.assertEqual(without_none_values([1, None, 3, 4]), [1, 3, 4]) diff --git a/tox.ini b/tox.ini index fbbce48d4..a526fc120 100644 --- a/tox.ini +++ b/tox.ini @@ -11,7 +11,7 @@ minversion = 1.7.0 deps = attrs pexpect >= 4.8.0 - pyftpdlib >= 1.5.8 + pyftpdlib >= 2.0.1 pygments pytest pytest-cov==4.0.0