Skip to content

Commit 945880e

Browse files
jacobtylerwallsPierre-Sassoulascdce8p
authored
Add support for Python 3.14 (#10467)
* Fix ForwardRef for Python 3.14 * Fix ThreadPoolExecutor, ProcessPoolExecutor imports for Python 3.14 * Remove ByteString from tests (it was removed in Python 3.14) Co-authored-by: Pierre Sassoulas <[email protected]> Co-authored-by: Marc Mueller <[email protected]>
1 parent d363fca commit 945880e

File tree

10 files changed

+49
-41
lines changed

10 files changed

+49
-41
lines changed

.github/workflows/primer-test.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
timeout-minutes: 5
3131
strategy:
3232
matrix:
33-
python-version: ["3.10", "3.11", "3.12", "3.13"]
33+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14-dev"]
3434
outputs:
3535
python-key: ${{ steps.generate-python-key.outputs.key }}
3636
steps:
@@ -72,7 +72,7 @@ jobs:
7272
needs: prepare-tests-linux
7373
strategy:
7474
matrix:
75-
python-version: ["3.10", "3.11", "3.12", "3.13"]
75+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14-dev"]
7676
steps:
7777
- name: Check out code from GitHub
7878
uses: actions/[email protected]

.github/workflows/tests.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
fail-fast: false
3232
matrix:
3333
os: [ubuntu-latest]
34-
python-version: ["3.10", "3.11", "3.12", "3.13"]
34+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14-dev"]
3535
include:
3636
- os: macos-latest
3737
python-version: "3.10"
@@ -188,7 +188,7 @@ jobs:
188188
strategy:
189189
fail-fast: false
190190
matrix:
191-
python-version: ["3.10", "3.11", "3.12", "3.13"]
191+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14-dev"]
192192
steps:
193193
- name: Set temp directory
194194
run: echo "TEMP=$env:USERPROFILE\AppData\Local\Temp" >> $env:GITHUB_ENV

doc/whatsnew/fragments/10467.feature

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Add support for Python 3.14.
2+
3+
Refs #10467

pylint/checkers/base/basic_error_checker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
ABC_METACLASSES = {"_py_abc.ABCMeta", "abc.ABCMeta"} # Python 3.7+,
2121
# List of methods which can be redefined
2222
REDEFINABLE_METHODS = frozenset(("__module__",))
23-
TYPING_FORWARD_REF_QNAME = "typing.ForwardRef"
23+
FORWARD_REF_QNAME = {"typing.ForwardRef", "annotationlib.ForwardRef"}
2424

2525

2626
def _get_break_loop_node(break_node: nodes.Break) -> nodes.For | nodes.While | None:
@@ -575,7 +575,7 @@ def _check_redefinition(
575575
if (
576576
inferred
577577
and isinstance(inferred, astroid.Instance)
578-
and inferred.qname() == TYPING_FORWARD_REF_QNAME
578+
and inferred.qname() in FORWARD_REF_QNAME
579579
):
580580
return
581581

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dependencies = [
3838
# Also upgrade requirements_test_min.txt.
3939
# Pinned to dev of second minor update to allow editable installs and fix primer issues,
4040
# see https://github.com/pylint-dev/astroid/issues/1341
41-
"astroid>=4.0.0b0,<=4.1.0.dev0",
41+
"astroid>=4.0.0b2,<=4.1.0.dev0",
4242
"colorama>=0.4.5; sys_platform=='win32'",
4343
"dill>=0.2; python_version<'3.11'",
4444
"dill>=0.3.6; python_version>='3.11'",

requirements_test_min.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
.[testutils,spelling]
22
# astroid dependency is also defined in pyproject.toml
3-
astroid==4.0.0b0 # Pinned to a specific version for tests
3+
astroid==4.0.0b2 # Pinned to a specific version for tests
44
typing-extensions~=4.14
55
py~=1.11.0
66
pytest~=8.4

tests/functional/c/consider/consider_using_with.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,20 @@
44
import multiprocessing
55
import pathlib
66
import subprocess
7+
import sys
78
import tarfile
89
import tempfile
910
import threading
1011
import urllib
1112
import zipfile
12-
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
1313
from pathlib import Path
1414

15+
if sys.version_info >= (3, 14):
16+
from concurrent.futures.process import ProcessPoolExecutor
17+
from concurrent.futures.thread import ThreadPoolExecutor
18+
else:
19+
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
20+
1521

1622
def test_pathlib_open():
1723
_ = pathlib.Path("foo").open(encoding="utf8") # [consider-using-with]
Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
consider-using-with:17:8:17:49:test_pathlib_open:Consider using 'with' for resource-allocating operations:UNDEFINED
2-
consider-using-with:18:8:18:41:test_pathlib_open:Consider using 'with' for resource-allocating operations:UNDEFINED
3-
consider-using-with:20:8:20:34:test_pathlib_open:Consider using 'with' for resource-allocating operations:UNDEFINED
4-
consider-using-with:26:9:26:40:test_codecs_open:Consider using 'with' for resource-allocating operations:UNDEFINED
5-
consider-using-with:31:8:31:55:test_urlopen:Consider using 'with' for resource-allocating operations:UNDEFINED
6-
consider-using-with:39:8:39:40:test_named_temporary_file:Consider using 'with' for resource-allocating operations:UNDEFINED
7-
consider-using-with:43:8:43:42:test_spooled_temporary_file:Consider using 'with' for resource-allocating operations:UNDEFINED
8-
consider-using-with:47:8:47:37:test_temporary_directory:Consider using 'with' for resource-allocating operations:UNDEFINED
9-
consider-using-with:51:12:51:44:test_zipfile:Consider using 'with' for resource-allocating operations:UNDEFINED
10-
consider-using-with:52:8:52:30:test_zipfile:Consider using 'with' for resource-allocating operations:UNDEFINED
11-
consider-using-with:56:12:56:46:test_pyzipfile:Consider using 'with' for resource-allocating operations:UNDEFINED
12-
consider-using-with:61:8:61:30:test_pyzipfile:Consider using 'with' for resource-allocating operations:UNDEFINED
13-
consider-using-with:68:9:68:43:test_tarfile:Consider using 'with' for resource-allocating operations:UNDEFINED
14-
consider-using-with:74:9:74:47:test_tarfile:Consider using 'with' for resource-allocating operations:UNDEFINED
15-
consider-using-with:83:4:83:18:test_lock_acquisition:Consider using 'with' for resource-allocating operations:UNDEFINED
16-
consider-using-with:90:4:90:19:test_lock_acquisition:Consider using 'with' for resource-allocating operations:UNDEFINED
17-
consider-using-with:97:4:97:18:test_lock_acquisition:Consider using 'with' for resource-allocating operations:UNDEFINED
18-
consider-using-with:104:4:104:26:test_lock_acquisition:Consider using 'with' for resource-allocating operations:UNDEFINED
19-
consider-using-with:140:8:140:30:test_multiprocessing:Consider using 'with' for resource-allocating operations:UNDEFINED
20-
consider-using-with:145:4:145:19:test_multiprocessing:Consider using 'with' for resource-allocating operations:UNDEFINED
21-
consider-using-with:150:4:150:19:test_multiprocessing:Consider using 'with' for resource-allocating operations:UNDEFINED
22-
consider-using-with:156:8:156:30:test_popen:Consider using 'with' for resource-allocating operations:UNDEFINED
23-
consider-using-with:210:4:210:26::Consider using 'with' for resource-allocating operations:UNDEFINED
24-
consider-using-with:211:4:211:26::Consider using 'with' for resource-allocating operations:UNDEFINED
1+
consider-using-with:23:8:23:49:test_pathlib_open:Consider using 'with' for resource-allocating operations:UNDEFINED
2+
consider-using-with:24:8:24:41:test_pathlib_open:Consider using 'with' for resource-allocating operations:UNDEFINED
3+
consider-using-with:26:8:26:34:test_pathlib_open:Consider using 'with' for resource-allocating operations:UNDEFINED
4+
consider-using-with:32:9:32:40:test_codecs_open:Consider using 'with' for resource-allocating operations:UNDEFINED
5+
consider-using-with:37:8:37:55:test_urlopen:Consider using 'with' for resource-allocating operations:UNDEFINED
6+
consider-using-with:45:8:45:40:test_named_temporary_file:Consider using 'with' for resource-allocating operations:UNDEFINED
7+
consider-using-with:49:8:49:42:test_spooled_temporary_file:Consider using 'with' for resource-allocating operations:UNDEFINED
8+
consider-using-with:53:8:53:37:test_temporary_directory:Consider using 'with' for resource-allocating operations:UNDEFINED
9+
consider-using-with:57:12:57:44:test_zipfile:Consider using 'with' for resource-allocating operations:UNDEFINED
10+
consider-using-with:58:8:58:30:test_zipfile:Consider using 'with' for resource-allocating operations:UNDEFINED
11+
consider-using-with:62:12:62:46:test_pyzipfile:Consider using 'with' for resource-allocating operations:UNDEFINED
12+
consider-using-with:67:8:67:30:test_pyzipfile:Consider using 'with' for resource-allocating operations:UNDEFINED
13+
consider-using-with:74:9:74:43:test_tarfile:Consider using 'with' for resource-allocating operations:UNDEFINED
14+
consider-using-with:80:9:80:47:test_tarfile:Consider using 'with' for resource-allocating operations:UNDEFINED
15+
consider-using-with:89:4:89:18:test_lock_acquisition:Consider using 'with' for resource-allocating operations:UNDEFINED
16+
consider-using-with:96:4:96:19:test_lock_acquisition:Consider using 'with' for resource-allocating operations:UNDEFINED
17+
consider-using-with:103:4:103:18:test_lock_acquisition:Consider using 'with' for resource-allocating operations:UNDEFINED
18+
consider-using-with:110:4:110:26:test_lock_acquisition:Consider using 'with' for resource-allocating operations:UNDEFINED
19+
consider-using-with:146:8:146:30:test_multiprocessing:Consider using 'with' for resource-allocating operations:UNDEFINED
20+
consider-using-with:151:4:151:19:test_multiprocessing:Consider using 'with' for resource-allocating operations:UNDEFINED
21+
consider-using-with:156:4:156:19:test_multiprocessing:Consider using 'with' for resource-allocating operations:UNDEFINED
22+
consider-using-with:162:8:162:30:test_popen:Consider using 'with' for resource-allocating operations:UNDEFINED
2523
consider-using-with:216:4:216:26::Consider using 'with' for resource-allocating operations:UNDEFINED
24+
consider-using-with:217:4:217:26::Consider using 'with' for resource-allocating operations:UNDEFINED
2625
consider-using-with:222:4:222:26::Consider using 'with' for resource-allocating operations:UNDEFINED
27-
consider-using-with:238:18:238:40:test_subscript_assignment:Consider using 'with' for resource-allocating operations:UNDEFINED
28-
consider-using-with:240:24:240:46:test_subscript_assignment:Consider using 'with' for resource-allocating operations:UNDEFINED
26+
consider-using-with:228:4:228:26::Consider using 'with' for resource-allocating operations:UNDEFINED
27+
consider-using-with:244:18:244:40:test_subscript_assignment:Consider using 'with' for resource-allocating operations:UNDEFINED
28+
consider-using-with:246:24:246:46:test_subscript_assignment:Consider using 'with' for resource-allocating operations:UNDEFINED

tests/functional/g/generic_alias/generic_alias_mixed_py39.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
var_iterable: collections.abc.Iterable[int]
1616
var_awaitable: collections.abc.Awaitable[int]
1717
var_pattern: re.Pattern[int]
18-
var_bytestring: collections.abc.ByteString
1918
var_hashable: collections.abc.Hashable
2019
var_context_manager: contextlib.AbstractContextManager[int]
2120

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
abstract-method:29:0:29:21:DerivedHashable:Method '__hash__' is abstract in class 'Hashable' but is not overridden in child class 'DerivedHashable':INFERENCE
2-
abstract-method:32:0:32:21:DerivedIterable:Method '__iter__' is abstract in class 'Iterable' but is not overridden in child class 'DerivedIterable':INFERENCE
3-
abstract-method:35:0:35:23:DerivedCollection:Method '__contains__' is abstract in class 'Container' but is not overridden in child class 'DerivedCollection':INFERENCE
4-
abstract-method:35:0:35:23:DerivedCollection:Method '__iter__' is abstract in class 'Iterable' but is not overridden in child class 'DerivedCollection':INFERENCE
5-
abstract-method:35:0:35:23:DerivedCollection:Method '__len__' is abstract in class 'Sized' but is not overridden in child class 'DerivedCollection':INFERENCE
1+
abstract-method:28:0:28:21:DerivedHashable:Method '__hash__' is abstract in class 'Hashable' but is not overridden in child class 'DerivedHashable':INFERENCE
2+
abstract-method:31:0:31:21:DerivedIterable:Method '__iter__' is abstract in class 'Iterable' but is not overridden in child class 'DerivedIterable':INFERENCE
3+
abstract-method:34:0:34:23:DerivedCollection:Method '__contains__' is abstract in class 'Container' but is not overridden in child class 'DerivedCollection':INFERENCE
4+
abstract-method:34:0:34:23:DerivedCollection:Method '__iter__' is abstract in class 'Iterable' but is not overridden in child class 'DerivedCollection':INFERENCE
5+
abstract-method:34:0:34:23:DerivedCollection:Method '__len__' is abstract in class 'Sized' but is not overridden in child class 'DerivedCollection':INFERENCE

0 commit comments

Comments
 (0)