From 00f56593a116ec1c0bec6dc873266701a7c6360e Mon Sep 17 00:00:00 2001 From: Andrey Rakhmatullin Date: Tue, 12 May 2026 23:50:09 +0500 Subject: [PATCH 1/5] Add Python 3.15 to CI. --- .github/workflows/tests-ubuntu.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests-ubuntu.yml b/.github/workflows/tests-ubuntu.yml index 524c79cdb..905016e57 100644 --- a/.github/workflows/tests-ubuntu.yml +++ b/.github/workflows/tests-ubuntu.yml @@ -83,6 +83,17 @@ jobs: env: TOXENV: mitmproxy + # 3.15 pre-release + - python-version: "3.15-beta.1" + env: + TOXENV: py + - python-version: "3.15-beta.1" + env: + TOXENV: default-reactor + - python-version: "3.15-beta.1" + env: + TOXENV: no-reactor + steps: - uses: actions/checkout@v6 @@ -92,7 +103,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install system libraries - if: contains(matrix.python-version, 'pypy') || contains(matrix.env.TOXENV, 'pinned') + if: contains(matrix.python-version, 'pypy') || contains(matrix.env.TOXENV, 'pinned') || contains(matrix.python-version, '3.15') run: | sudo apt-get update sudo apt-get install libxml2-dev libxslt-dev From 72c5775fafa4aa771b332e363cb1345a8de48004 Mon Sep 17 00:00:00 2001 From: Andrey Rakhmatullin Date: Wed, 13 May 2026 00:15:05 +0500 Subject: [PATCH 2/5] Fix the version. --- .github/workflows/tests-ubuntu.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests-ubuntu.yml b/.github/workflows/tests-ubuntu.yml index 905016e57..b72a16f67 100644 --- a/.github/workflows/tests-ubuntu.yml +++ b/.github/workflows/tests-ubuntu.yml @@ -84,13 +84,13 @@ jobs: TOXENV: mitmproxy # 3.15 pre-release - - python-version: "3.15-beta.1" + - python-version: "3.15.0-beta.1" env: TOXENV: py - - python-version: "3.15-beta.1" + - python-version: "3.15.0-beta.1" env: TOXENV: default-reactor - - python-version: "3.15-beta.1" + - python-version: "3.15.0-beta.1" env: TOXENV: no-reactor From e86717dd744e3e631f2f3e515c51f90d35a3a61c Mon Sep 17 00:00:00 2001 From: Andrey Rakhmatullin Date: Thu, 11 Jun 2026 12:16:10 +0500 Subject: [PATCH 3/5] Bump 3.15 to beta2, add it to Windows and macOS. --- .github/workflows/tests-macos.yml | 8 ++++++++ .github/workflows/tests-ubuntu.yml | 6 +++--- .github/workflows/tests-windows.yml | 11 +++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests-macos.yml b/.github/workflows/tests-macos.yml index 0409b3ef2..421336fd0 100644 --- a/.github/workflows/tests-macos.yml +++ b/.github/workflows/tests-macos.yml @@ -26,6 +26,14 @@ jobs: env: TOXENV: no-reactor + # 3.15 pre-release + - python-version: "3.15.0-beta.2" + env: + TOXENV: py + - python-version: "3.15.0-beta.2" + env: + TOXENV: no-reactor + steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/tests-ubuntu.yml b/.github/workflows/tests-ubuntu.yml index a57ea3797..2d7945322 100644 --- a/.github/workflows/tests-ubuntu.yml +++ b/.github/workflows/tests-ubuntu.yml @@ -84,13 +84,13 @@ jobs: TOXENV: mitmproxy # 3.15 pre-release - - python-version: "3.15.0-beta.1" + - python-version: "3.15.0-beta.2" env: TOXENV: py - - python-version: "3.15.0-beta.1" + - python-version: "3.15.0-beta.2" env: TOXENV: default-reactor - - python-version: "3.15.0-beta.1" + - python-version: "3.15.0-beta.2" env: TOXENV: no-reactor diff --git a/.github/workflows/tests-windows.yml b/.github/workflows/tests-windows.yml index f413782bc..a42dcae39 100644 --- a/.github/workflows/tests-windows.yml +++ b/.github/workflows/tests-windows.yml @@ -53,6 +53,17 @@ jobs: env: TOXENV: extra-deps + # 3.15 pre-release + - python-version: "3.15.0-beta.2" + env: + TOXENV: py + - python-version: "3.15.0-beta.2" + env: + TOXENV: default-reactor + - python-version: "3.15.0-beta.2" + env: + TOXENV: no-reactor + steps: - uses: actions/checkout@v6 From 3395a20eee11c530bb994ef91c6afff8499196ea Mon Sep 17 00:00:00 2001 From: Andrey Rakhmatullin Date: Thu, 11 Jun 2026 12:20:19 +0500 Subject: [PATCH 4/5] Update metadata. --- pyproject.toml | 1 + tox.ini | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2d857dc6d..134d578b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,6 +40,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", diff --git a/tox.ini b/tox.ini index 50ac7aa86..01027ba97 100644 --- a/tox.ini +++ b/tox.ini @@ -22,7 +22,7 @@ envlist = min-no-reactor min-botocore min-pypy3 - py{310,311,312,313,314} + py{310,311,312,313,314,315} extra-deps default-reactor no-reactor From 194d19d4a6429388e03892175cee431c0c727a15 Mon Sep 17 00:00:00 2001 From: Andrey Rakhmatullin Date: Mon, 15 Jun 2026 01:49:53 +0500 Subject: [PATCH 5/5] Update the walk_modules_iter() doctest for Python 3.15. --- scrapy/utils/misc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scrapy/utils/misc.py b/scrapy/utils/misc.py index 0b67eaa34..8dc9e13bf 100644 --- a/scrapy/utils/misc.py +++ b/scrapy/utils/misc.py @@ -99,10 +99,10 @@ def walk_modules_iter(path: str) -> Iterable[ModuleType]: >>> list(walk_modules_iter('scrapy.utils')) [, ...] >>> gen = walk_modules_iter('scrapy.utils.nonexistent') # error not raised until the generator is consumed - >>> list(gen) + >>> list(gen) # doctest: +ELLIPSIS Traceback (most recent call last): ... - ModuleNotFoundError: No module named 'scrapy.utils.nonexistent' + ModuleNotFoundError: No module named 'scrapy.utils.nonexistent'... """ mod = import_module(path)