From 60a92cbe38bd09b43e86feecc2e46c3983699b0f Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Wed, 15 Jun 2022 12:35:15 -0400 Subject: [PATCH] Revert #893: Avoid setting a Call as a base for metaclasses from six.with_metaclass() --- ChangeLog | 4 ++++ astroid/brain/brain_six.py | 1 + tests/unittest_brain.py | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index bcf244b1d9..0bfb9533fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,10 @@ Release date: TBA * ``astroid`` now requires Python 3.7.2 to run. +* Avoid setting a Call as a base for metaclasses created from ``six.with_metaclass()``. + + Refs PyCQA/pylint#5935 + * Fix detection of builtins on ``PyPy`` 3.9. * Fix ``re`` brain on Python ``3.11``. The flags now come from ``re._compile``. diff --git a/astroid/brain/brain_six.py b/astroid/brain/brain_six.py index 022fcf22e0..b72d5afdbe 100644 --- a/astroid/brain/brain_six.py +++ b/astroid/brain/brain_six.py @@ -219,6 +219,7 @@ def transform_six_with_metaclass(node): """ call = node.bases[0] node._metaclass = call.args[0] + node.bases = call.args[1:] return node diff --git a/tests/unittest_brain.py b/tests/unittest_brain.py index d86c273f32..a8b40e7668 100644 --- a/tests/unittest_brain.py +++ b/tests/unittest_brain.py @@ -569,7 +569,8 @@ class B(six.with_metaclass(A, C)): inferred = next(ast_node.infer()) self.assertIsInstance(inferred, nodes.ClassDef) self.assertEqual(inferred.name, "B") - self.assertIsInstance(inferred.bases[0], nodes.Call) + self.assertIsInstance(inferred.bases[0], nodes.Name) + self.assertEqual(inferred.bases[0].name, "C") ancestors = tuple(inferred.ancestors()) self.assertIsInstance(ancestors[0], nodes.ClassDef) self.assertEqual(ancestors[0].name, "C")