diff options
Diffstat (limited to 'dev-python/astroid')
-rw-r--r-- | dev-python/astroid/Manifest | 7 | ||||
-rw-r--r-- | dev-python/astroid/astroid-3.2.4.ebuild | 94 | ||||
-rw-r--r-- | dev-python/astroid/astroid-3.3.2.ebuild (renamed from dev-python/astroid/astroid-3.2.2.ebuild) | 19 | ||||
-rw-r--r-- | dev-python/astroid/files/astroid-3.2.2-py313.patch | 177 |
4 files changed, 293 insertions, 4 deletions
diff --git a/dev-python/astroid/Manifest b/dev-python/astroid/Manifest index c2eb4e1efcae..161b0686684a 100644 --- a/dev-python/astroid/Manifest +++ b/dev-python/astroid/Manifest @@ -1,3 +1,6 @@ -DIST astroid-3.2.2.gh.tar.gz 465306 BLAKE2B f5bda1377eb825f4166804473eab592d07c6353295dca01517c3facf783ec71f281a27f6344699097784dde7315f794a62cbfae86879b2bbe446fb1191d40995 SHA512 1330f557664b5066309879b8bf05e29102000a6e08c63d94a7e7033f1e2295a3a9c3114f3587b9867f71b49e11428036438e4f22352498494f914f7c9f60d4ea -EBUILD astroid-3.2.2.ebuild 1963 BLAKE2B ed12519eb12af0c2720e2b3a1613fcf1b1f35c6c67ef552ff3fe1395636387f91464f2581819cbb08efdbac9ca36cc03cfae402e644207feed2e7f8e18873426 SHA512 388b0ac1c1f74f1d63b97b74243560d2c7f837270af7bd3a74ee0063165de9963d1cb49baf1a56df47b80defa929e7b2c14f0e9d8741a8b47e1170c9b8599bae +AUX astroid-3.2.2-py313.patch 6670 BLAKE2B cb969f85e7810a2d1ef8088a9d35bc086df001589bd0de58be204db762e59aa145f930d275a02f49868277514a5ec492020d1537b323582b79733a5aebb6ba28 SHA512 d2800eab3ba1c54048a24758c9fbfb911a5af0add7a24d0c00f3b245a1a7fb5efbed9614ed5e0032fbf619a473192ba8039047bffdf33fdcdc027a22db2a5643 +DIST astroid-3.2.4.gh.tar.gz 465788 BLAKE2B 745a860b7bacb45cb86e9b232fe3a37cdac40cb471b00832a7dd7da4c3374760749cebe8c8688748e750cc3639554515a7a9e24f5f4d2ebac10af2c906fa04a9 SHA512 e48289794f67cf53bb8a2dcf357c1e892140a0a625c2e19601cf5ad579aaa33a94f0e052915fa6e854bc0a2e626f41b2d13773aa2b2af2412efeb33d030ed2b6 +DIST astroid-3.3.2.gh.tar.gz 464183 BLAKE2B a891a57ce697e539b865ead8f1a1a42aa57962d1ac3cb39624f3c8cac1a233ce5ed207a87f6b8ef0b2fcacc296610819d5612262a6fbfe08eed20a2955b168c4 SHA512 dc9777e701f0bf3dc5367da8e7c79eeba18f485ad1425f8e3e50814efef9f8fd0e11f30363d1c602cfd05c51b2b2e9749989da1413db59c9f648fbc47cfbc8ae +EBUILD astroid-3.2.4.ebuild 3145 BLAKE2B 2ce16528e2f66f092bdd5acce0798195a926e2875aa0cf0c3fe0f33283b515a8389c743c83cfea98807763c87067abf104177124c864a1bb1516532889a18ee4 SHA512 d61457b9365b8b1fd34bbddd51c1ae7bc080381c2fbc5881e426e12aebe2188d5399e05ca2bdea6a2c1217e0d39ea25bfe2ade2c3c38385fbacc0bd5f3219348 +EBUILD astroid-3.3.2.ebuild 3032 BLAKE2B 22afafb3cf6f25836fd9031e3719e84c9230068bbd4b5d49f14da9dd055b5391894d3addf1cefc6b86c78241a1cabff95aaed0994ce57c4225406c9db023a13d SHA512 7f6b07fb1fca8bcc301c22b5a21a588f25ecab228585b41f09a7c23004d2924991e02a1b0e8af2ae49cc14879be948f5e743fb9a3c766ce970592909027786f4 MISC metadata.xml 1148 BLAKE2B 29a6cfc0c292117920be154d37ed4770f1fb1679186576fe6151cc02d1d6be766045e0231e2fceb87cbd250dbed3888c99b7ca7dc0182cc700a11961d9cd6d9e SHA512 6821d13f5e82bd73ee4fd165c0b4c94f40cd6af536dee1658cccb4175e67da2611c4d1478cdef1607535f23224116ad482197e0b0eef8f0a94d596bf250b3074 diff --git a/dev-python/astroid/astroid-3.2.4.ebuild b/dev-python/astroid/astroid-3.2.4.ebuild new file mode 100644 index 000000000000..0430cda4065d --- /dev/null +++ b/dev-python/astroid/astroid-3.2.4.ebuild @@ -0,0 +1,94 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=setuptools +PYTHON_COMPAT=( pypy3 python3_{10..13} ) + +inherit distutils-r1 + +DESCRIPTION="Abstract Syntax Tree for logilab packages" +HOMEPAGE=" + https://github.com/pylint-dev/astroid/ + https://pypi.org/project/astroid/ +" +SRC_URI=" + https://github.com/pylint-dev/astroid/archive/v${PV}.tar.gz + -> ${P}.gh.tar.gz +" + +LICENSE="LGPL-2.1+" +SLOT="0" +KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" + +# Version specified in pyproject.toml +RDEPEND=" + $(python_gen_cond_dep ' + >=dev-python/typing-extensions-4.0.0[${PYTHON_USEDEP}] + ' 3.10) +" +# dev-python/regex isn't available for pypy +BDEPEND=" + dev-python/setuptools-scm[${PYTHON_USEDEP}] + test? ( + dev-python/attrs[${PYTHON_USEDEP}] + >=dev-python/numpy-1.17.0[${PYTHON_USEDEP}] + dev-python/python-dateutil[${PYTHON_USEDEP}] + $(python_gen_cond_dep ' + dev-python/regex[${PYTHON_USEDEP}] + ' 'python*') + ) +" + +distutils_enable_tests pytest + +export SETUPTOOLS_SCM_PRETEND_VERSION=${PV} + +PATCHES=( + # https://github.com/pylint-dev/astroid/pull/2424 (rebased) + "${FILESDIR}/${PN}-3.2.2-py313.patch" +) + +python_test() { + local EPYTEST_DESELECT=( + # no clue why they're broken + tests/test_modutils.py::GetModulePartTest::test_known_values_get_builtin_module_part + tests/test_regrtest.py::NonRegressionTests::test_numpy_distutils + # pydantic-2? + tests/brain/test_dataclasses.py::test_pydantic_field + # requires urllib3 with bundled six (skipped with urllib3>=2) + tests/test_modutils.py::test_file_info_from_modpath__SixMetaPathImporter + # hangs + tests/test_nodes.py::AsStringTest::test_recursion_error_trapped + # TODO + tests/test_builder.py::BuilderTest::test_data_build_error_filename + # numpy-2 (https://github.com/pylint-dev/astroid/issues/2442) + tests/brain/numpy/test_core_einsumfunc.py::test_numpy_function_calls_inferred_as_ndarray + tests/brain/numpy/test_core_fromnumeric.py::BrainNumpyCoreFromNumericTest::test_numpy_function_calls_inferred_as_ndarray + tests/brain/numpy/test_core_multiarray.py::BrainNumpyCoreMultiarrayTest::test_numpy_function_calls_inferred_as_ndarray + tests/brain/numpy/test_core_numerictypes.py::NumpyBrainCoreNumericTypesTest::test_datetime_astype_return + tests/brain/numpy/test_core_numerictypes.py::NumpyBrainCoreNumericTypesTest::test_generic_types_are_subscriptables + tests/brain/numpy/test_core_umath.py::NumpyBrainCoreUmathTest::test_numpy_core_umath_functions_return_type + tests/brain/numpy/test_core_umath.py::NumpyBrainCoreUmathTest::test_numpy_core_umath_functions_return_type_tuple + ) + + case ${EPYTHON} in + pypy3) + EPYTEST_DESELECT+=( + tests/test_transforms.py::TestTransforms::test_transform_aborted_if_recursion_limited + ) + ;; + python3.13) + EPYTEST_DESELECT+=( + # changes in py3.13.0b4 + # https://github.com/pylint-dev/astroid/issues/2478 + tests/test_nodes.py::AsStringTest::test_f_strings + tests/test_nodes_lineno.py::TestLinenoColOffset::test_end_lineno_string + ) + ;; + esac + + local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 + epytest +} diff --git a/dev-python/astroid/astroid-3.2.2.ebuild b/dev-python/astroid/astroid-3.3.2.ebuild index 84488dfc368a..b93d44fd7e2a 100644 --- a/dev-python/astroid/astroid-3.2.2.ebuild +++ b/dev-python/astroid/astroid-3.3.2.ebuild @@ -4,7 +4,7 @@ EAPI=8 DISTUTILS_USE_PEP517=setuptools -PYTHON_COMPAT=( pypy3 python3_{10..12} ) +PYTHON_COMPAT=( pypy3 python3_{10..13} ) inherit distutils-r1 @@ -33,7 +33,6 @@ BDEPEND=" dev-python/setuptools-scm[${PYTHON_USEDEP}] test? ( dev-python/attrs[${PYTHON_USEDEP}] - <dev-python/numpy-2[${PYTHON_USEDEP}] >=dev-python/numpy-1.17.0[${PYTHON_USEDEP}] dev-python/python-dateutil[${PYTHON_USEDEP}] $(python_gen_cond_dep ' @@ -59,6 +58,14 @@ python_test() { tests/test_nodes.py::AsStringTest::test_recursion_error_trapped # TODO tests/test_builder.py::BuilderTest::test_data_build_error_filename + # numpy-2 (https://github.com/pylint-dev/astroid/issues/2442) + tests/brain/numpy/test_core_einsumfunc.py::test_numpy_function_calls_inferred_as_ndarray + tests/brain/numpy/test_core_fromnumeric.py::BrainNumpyCoreFromNumericTest::test_numpy_function_calls_inferred_as_ndarray + tests/brain/numpy/test_core_multiarray.py::BrainNumpyCoreMultiarrayTest::test_numpy_function_calls_inferred_as_ndarray + tests/brain/numpy/test_core_numerictypes.py::NumpyBrainCoreNumericTypesTest::test_datetime_astype_return + tests/brain/numpy/test_core_numerictypes.py::NumpyBrainCoreNumericTypesTest::test_generic_types_are_subscriptables + tests/brain/numpy/test_core_umath.py::NumpyBrainCoreUmathTest::test_numpy_core_umath_functions_return_type + tests/brain/numpy/test_core_umath.py::NumpyBrainCoreUmathTest::test_numpy_core_umath_functions_return_type_tuple ) case ${EPYTHON} in @@ -67,6 +74,14 @@ python_test() { tests/test_transforms.py::TestTransforms::test_transform_aborted_if_recursion_limited ) ;; + python3.13) + EPYTEST_DESELECT+=( + # changes in py3.13.0b4 + # https://github.com/pylint-dev/astroid/issues/2478 + tests/test_nodes.py::AsStringTest::test_f_strings + tests/test_nodes_lineno.py::TestLinenoColOffset::test_end_lineno_string + ) + ;; esac local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 diff --git a/dev-python/astroid/files/astroid-3.2.2-py313.patch b/dev-python/astroid/files/astroid-3.2.2-py313.patch new file mode 100644 index 000000000000..f8addfe9ef7c --- /dev/null +++ b/dev-python/astroid/files/astroid-3.2.2-py313.patch @@ -0,0 +1,177 @@ +diff --git a/astroid/brain/brain_dataclasses.py b/astroid/brain/brain_dataclasses.py +index 88a4385f..743dfe96 100644 +--- a/astroid/brain/brain_dataclasses.py ++++ b/astroid/brain/brain_dataclasses.py +@@ -19,7 +19,7 @@ from typing import Literal, Tuple, Union + + from astroid import bases, context, nodes + from astroid.builder import parse +-from astroid.const import PY39_PLUS, PY310_PLUS ++from astroid.const import PY39_PLUS, PY310_PLUS, PY313_PLUS + from astroid.exceptions import AstroidSyntaxError, InferenceError, UseInferenceDefault + from astroid.inference_tip import inference_tip + from astroid.manager import AstroidManager +@@ -503,6 +503,15 @@ def _looks_like_dataclass_field_call( + return inferred.name == FIELD_NAME and inferred.root().name in DATACLASS_MODULES + + ++def _looks_like_dataclasses(node: nodes.Module) -> bool: ++ return node.qname() == "dataclasses" ++ ++ ++def _resolve_private_replace_to_public(node: nodes.Module) -> None: ++ if "_replace" in node.locals: ++ node.locals["replace"] = node.locals["_replace"] ++ ++ + def _get_field_default(field_call: nodes.Call) -> _FieldDefaultReturn: + """Return a the default value of a field call, and the corresponding keyword + argument name. +@@ -618,6 +627,13 @@ def _infer_instance_from_annotation( + + + def register(manager: AstroidManager) -> None: ++ if PY313_PLUS: ++ manager.register_transform( ++ nodes.Module, ++ _resolve_private_replace_to_public, ++ _looks_like_dataclasses, ++ ) ++ + manager.register_transform( + nodes.ClassDef, dataclass_transform, is_decorated_with_dataclass + ) +diff --git a/astroid/brain/brain_pathlib.py b/astroid/brain/brain_pathlib.py +index 116cd2ee..d0f53132 100644 +--- a/astroid/brain/brain_pathlib.py ++++ b/astroid/brain/brain_pathlib.py +@@ -8,6 +8,7 @@ from collections.abc import Iterator + + from astroid import bases, context, inference_tip, nodes + from astroid.builder import _extract_single_node ++from astroid.const import PY313_PLUS + from astroid.exceptions import InferenceError, UseInferenceDefault + from astroid.manager import AstroidManager + +@@ -27,10 +28,11 @@ def _looks_like_parents_subscript(node: nodes.Subscript) -> bool: + value = next(node.value.infer()) + except (InferenceError, StopIteration): + return False ++ parents = "builtins.tuple" if PY313_PLUS else "pathlib._PathParents" + return ( + isinstance(value, bases.Instance) + and isinstance(value._proxied, nodes.ClassDef) +- and value.qname() == "pathlib._PathParents" ++ and value.qname() == parents + ) + + +diff --git a/astroid/brain/brain_typing.py b/astroid/brain/brain_typing.py +index 9965abc2..7a7c7183 100644 +--- a/astroid/brain/brain_typing.py ++++ b/astroid/brain/brain_typing.py +@@ -15,7 +15,7 @@ from typing import Final + from astroid import context, extract_node, inference_tip + from astroid.brain.helpers import register_module_extender + from astroid.builder import AstroidBuilder, _extract_single_node +-from astroid.const import PY39_PLUS, PY312_PLUS ++from astroid.const import PY39_PLUS, PY312_PLUS, PY313_PLUS + from astroid.exceptions import ( + AstroidSyntaxError, + AttributeInferenceError, +@@ -168,6 +168,15 @@ def infer_typing_attr( + # If typing subscript belongs to an alias handle it separately. + raise UseInferenceDefault + ++ if ( ++ PY313_PLUS ++ and isinstance(value, FunctionDef) ++ and value.qname() == "typing.Annotated" ++ ): ++ # typing.Annotated is a FunctionDef on 3.13+ ++ node._explicit_inference = lambda node, context: iter([value]) ++ return iter([value]) ++ + if isinstance(value, ClassDef) and value.qname() in { + "typing.Generic", + "typing.Annotated", +diff --git a/tests/brain/test_brain.py b/tests/brain/test_brain.py +index b8bc84e3..78b6f8b3 100644 +--- a/tests/brain/test_brain.py ++++ b/tests/brain/test_brain.py +@@ -647,7 +647,7 @@ class TypingBrain(unittest.TestCase): + + @test_utils.require_version(minver="3.9") + def test_typing_annotated_subscriptable(self): +- """Test typing.Annotated is subscriptable with __class_getitem__""" ++ """typing.Annotated is subscriptable with __class_getitem__ below 3.13.""" + node = builder.extract_node( + """ + import typing +@@ -655,8 +655,13 @@ class TypingBrain(unittest.TestCase): + """ + ) + inferred = next(node.infer()) +- assert isinstance(inferred, nodes.ClassDef) +- assert isinstance(inferred.getattr("__class_getitem__")[0], nodes.FunctionDef) ++ if PY313_PLUS: ++ assert isinstance(inferred, nodes.FunctionDef) ++ else: ++ assert isinstance(inferred, nodes.ClassDef) ++ assert isinstance( ++ inferred.getattr("__class_getitem__")[0], nodes.FunctionDef ++ ) + + def test_typing_generic_slots(self): + """Test slots for Generic subclass.""" +diff --git a/tests/brain/test_pathlib.py b/tests/brain/test_pathlib.py +index d935d964..5aea8d37 100644 +--- a/tests/brain/test_pathlib.py ++++ b/tests/brain/test_pathlib.py +@@ -5,7 +5,7 @@ + + import astroid + from astroid import bases +-from astroid.const import PY310_PLUS ++from astroid.const import PY310_PLUS, PY313_PLUS + from astroid.util import Uninferable + + +@@ -23,7 +23,10 @@ def test_inference_parents() -> None: + inferred = name_node.inferred() + assert len(inferred) == 1 + assert isinstance(inferred[0], bases.Instance) +- assert inferred[0].qname() == "pathlib._PathParents" ++ if PY313_PLUS: ++ assert inferred[0].qname() == "builtins.tuple" ++ else: ++ assert inferred[0].qname() == "pathlib._PathParents" + + + def test_inference_parents_subscript_index() -> None: +@@ -40,7 +43,10 @@ def test_inference_parents_subscript_index() -> None: + inferred = path.inferred() + assert len(inferred) == 1 + assert isinstance(inferred[0], bases.Instance) +- assert inferred[0].qname() == "pathlib.Path" ++ if PY313_PLUS: ++ assert inferred[0].qname() == "pathlib._local.Path" ++ else: ++ assert inferred[0].qname() == "pathlib.Path" + + + def test_inference_parents_subscript_slice() -> None: +diff --git a/tests/test_inference.py b/tests/test_inference.py +index ec8fc71b..95f00821 100644 +--- a/tests/test_inference.py ++++ b/tests/test_inference.py +@@ -4458,8 +4458,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase): + # and reraise it as a TypeError in Class.getitem + node = extract_node( + """ +- def test(): +- yield ++ def test(): ... + test() + """ + ) |