From 41fea54b4b81b37a85b5d3dc5eed72cba9ae3919 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Thu, 3 Oct 2024 20:35:42 -0400 Subject: [PATCH 1/2] Fix python 3.13 compatibility re: collections.abc --- ChangeLog | 6 +++++- astroid/brain/brain_collections.py | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index f607d78f7..cc29f2a52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,7 +22,11 @@ Release date: TBA * Control setting local nodes outside of the supposed local's constructor. - Closes pylint-dev/astroid/issues/1490 + Closes #1490 + +* Fix Python 3.13 compatibility re: `collections.abc` + + Closes pylint-dev/pylint#10000 What's New in astroid 3.3.4? diff --git a/astroid/brain/brain_collections.py b/astroid/brain/brain_collections.py index 22017786a..9baf3b7eb 100644 --- a/astroid/brain/brain_collections.py +++ b/astroid/brain/brain_collections.py @@ -3,15 +3,20 @@ # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt from __future__ import annotations +from typing import TYPE_CHECKING from astroid.brain.helpers import register_module_extender -from astroid.builder import extract_node, parse +from astroid.builder import extract_node, parse, AstroidBuilder +from astroid.const import PY313_PLUS from astroid.context import InferenceContext from astroid.exceptions import AttributeInferenceError from astroid.manager import AstroidManager from astroid.nodes.scoped_nodes import ClassDef +if TYPE_CHECKING: + from astroid import nodes + def _collections_transform(): return parse( """ @@ -26,6 +31,11 @@ def __getitem__(self, key): return default_factory ) +def _collections_abc_313_transform() -> nodes.Module: + """See https://github.com/python/cpython/pull/124735""" + return AstroidBuilder(AstroidManager()).string_build("from _collections_abc import *") + + def _deque_mock(): base_deque_class = """ class deque(object): @@ -118,3 +128,6 @@ def register(manager: AstroidManager) -> None: manager.register_transform( ClassDef, easy_class_getitem_inference, _looks_like_subscriptable ) + + if PY313_PLUS: + register_module_extender(manager, "collections.abc", _collections_abc_313_transform) From 59a3429c053d2f01cea852f193ea8a5b3f93d265 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 00:38:14 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- astroid/brain/brain_collections.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/astroid/brain/brain_collections.py b/astroid/brain/brain_collections.py index 9baf3b7eb..94944e67a 100644 --- a/astroid/brain/brain_collections.py +++ b/astroid/brain/brain_collections.py @@ -3,20 +3,21 @@ # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt from __future__ import annotations + from typing import TYPE_CHECKING from astroid.brain.helpers import register_module_extender -from astroid.builder import extract_node, parse, AstroidBuilder +from astroid.builder import AstroidBuilder, extract_node, parse from astroid.const import PY313_PLUS from astroid.context import InferenceContext from astroid.exceptions import AttributeInferenceError from astroid.manager import AstroidManager from astroid.nodes.scoped_nodes import ClassDef - if TYPE_CHECKING: from astroid import nodes + def _collections_transform(): return parse( """ @@ -33,7 +34,9 @@ def __getitem__(self, key): return default_factory def _collections_abc_313_transform() -> nodes.Module: """See https://github.com/python/cpython/pull/124735""" - return AstroidBuilder(AstroidManager()).string_build("from _collections_abc import *") + return AstroidBuilder(AstroidManager()).string_build( + "from _collections_abc import *" + ) def _deque_mock(): @@ -130,4 +133,6 @@ def register(manager: AstroidManager) -> None: ) if PY313_PLUS: - register_module_extender(manager, "collections.abc", _collections_abc_313_transform) + register_module_extender( + manager, "collections.abc", _collections_abc_313_transform + )