diff options
author | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2015-05-09 17:20:09 +0300 |
---|---|---|
committer | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2015-05-09 17:20:09 +0300 |
commit | b91489891e839d833916e98deebc97b43946e415 (patch) | |
tree | 08d2733db30dc5a682e252559290f7fe16b5989b | |
parent | 2fb20107fce519608afc3133b9ce68303eef9c0e (diff) | |
download | astroid-b91489891e839d833916e98deebc97b43946e415.tar.gz |
local_attr_ancestors fallbacks to using .ancestors if .mro() fails.
-rw-r--r-- | astroid/scoped_nodes.py | 6 | ||||
-rw-r--r-- | astroid/tests/unittest_scoped_nodes.py | 9 |
2 files changed, 11 insertions, 4 deletions
diff --git a/astroid/scoped_nodes.py b/astroid/scoped_nodes.py index 0a4f9b6..626d8f8 100644 --- a/astroid/scoped_nodes.py +++ b/astroid/scoped_nodes.py @@ -1150,9 +1150,9 @@ class Class(Statement, LocalsDictNodeNG, FilterStmtsMixin): try: ancestors = self.mro(context)[1:] except MroError: - # Reraise it as NotFoundError, there's no reason - # for MroError to leak out. - six.raise_from(NotFoundError, MroError) + # Fallback to use ancestors, we can't determine + # a sane MRO. + ancestors = self.ancestors(context=context) else: ancestors = self.ancestors(context=context) for astroid in ancestors: diff --git a/astroid/tests/unittest_scoped_nodes.py b/astroid/tests/unittest_scoped_nodes.py index 2bc3254..cd41dc4 100644 --- a/astroid/tests/unittest_scoped_nodes.py +++ b/astroid/tests/unittest_scoped_nodes.py @@ -1348,10 +1348,17 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase): def test_local_attr_invalid_mro(self): cls = test_utils.extract_node(""" + # A has an invalid MRO, local_attr should fallback + # to using .ancestors. class A(object, object): + test = 42 + class B(A): #@ pass """) - self.assertRaises(NotFoundError, cls.local_attr, 'test') + local = cls.local_attr('test')[0] + inferred = next(local.infer()) + self.assertIsInstance(inferred, nodes.Const) + self.assertEqual(inferred.value, 42) def test_has_dynamic_getattr(self): module = test_utils.build_module(""" |