summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2015-10-03 13:54:08 +0300
committerClaudiu Popa <pcmanticore@gmail.com>2015-10-03 13:54:08 +0300
commit211f96f28c1300de1a89b67b527b1a7b499dcc0f (patch)
tree420cb387bce892b0260ff7bcf7600826703e7b24
parentecaf8734210c7a2a5e8d089af10ab37dfc8158f4 (diff)
downloadastroid-211f96f28c1300de1a89b67b527b1a7b499dcc0f.tar.gz
Skip objects which aren't callable when inferring an instance's call result.
-rw-r--r--astroid/bases.py2
-rw-r--r--astroid/tests/unittest_inference.py16
2 files changed, 17 insertions, 1 deletions
diff --git a/astroid/bases.py b/astroid/bases.py
index 72fd0d8..c2ea55e 100644
--- a/astroid/bases.py
+++ b/astroid/bases.py
@@ -215,7 +215,7 @@ class Instance(Proxy):
"""infer what a class instance is returning when called"""
inferred = False
for node in self._proxied.igetattr('__call__', context):
- if node is util.YES:
+ if node is util.YES or not node.callable():
continue
for res in node.infer_call_result(caller, context):
inferred = True
diff --git a/astroid/tests/unittest_inference.py b/astroid/tests/unittest_inference.py
index 644e282..841d9ff 100644
--- a/astroid/tests/unittest_inference.py
+++ b/astroid/tests/unittest_inference.py
@@ -2995,6 +2995,22 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertIsInstance(inferred, Instance)
self.assertEqual(inferred.name, 'Sub')
+ def test_infer_call_result_invalid_dunder_call_on_instance(self):
+ ast_nodes = test_utils.extract_node('''
+ class A:
+ __call__ = 42
+ class B:
+ __call__ = A()
+ class C:
+ __call = None
+ A() #@
+ B() #@
+ C() #@
+ ''')
+ for node in ast_nodes:
+ inferred = next(node.infer())
+ self.assertRaises(InferenceError, next, inferred.infer_call_result(node))
+
class GetattrTest(unittest.TestCase):