summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2016-03-06 17:10:51 +0000
committerClaudiu Popa <pcmanticore@gmail.com>2016-06-03 20:31:10 +0100
commite3272214736449a585620c00ebfd80286f3a5500 (patch)
treebb5e2c995a05f06abed2a38864110642c64e2460
parent2e8c48123419e4aafc91e1f35bc9b3f35541cb68 (diff)
downloadastroid-git-e3272214736449a585620c00ebfd80286f3a5500.tar.gz
Add missing Python 2 function model attributes.
-rw-r--r--astroid/interpreter/objectmodel.py9
-rw-r--r--astroid/tests/unittest_object_model.py29
2 files changed, 38 insertions, 0 deletions
diff --git a/astroid/interpreter/objectmodel.py b/astroid/interpreter/objectmodel.py
index 2789c4a9..cd79b961 100644
--- a/astroid/interpreter/objectmodel.py
+++ b/astroid/interpreter/objectmodel.py
@@ -345,6 +345,15 @@ class FunctionModel(ObjectModel):
py__closure__ = py__ne__
py__code__ = py__ne__
+ if six.PY2:
+ pyfunc_name = py__name__
+ pyfunc_doc = py__doc__
+ pyfunc_globals = py__globals__
+ pyfunc_dict = py__dict__
+ pyfunc_defaults = py__defaults__
+ pyfunc_code = py__code__
+ pyfunc_closure = py__closure__
+
class ClassModel(ObjectModel):
diff --git a/astroid/tests/unittest_object_model.py b/astroid/tests/unittest_object_model.py
index 77ca2f06..5eff4299 100644
--- a/astroid/tests/unittest_object_model.py
+++ b/astroid/tests/unittest_object_model.py
@@ -395,6 +395,35 @@ class FunctionModelTest(unittest.TestCase):
self.assertIsInstance(kwdefaults, astroid.Dict)
# self.assertEqual(kwdefaults.getitem('f').value, 'lala')
+ @test_utils.require_version(maxver='3.0')
+ def test_function_model_for_python2(self):
+ ast_nodes = test_utils.extract_node('''
+ def test(a=1):
+ "a"
+
+ test.func_name #@
+ test.func_doc #@
+ test.func_dict #@
+ test.func_globals #@
+ test.func_defaults #@
+ test.func_code #@
+ test.func_closure #@
+ ''')
+ name = next(ast_nodes[0].infer())
+ self.assertIsInstance(name, astroid.Const)
+ self.assertEqual(name.value, 'test')
+ doc = next(ast_nodes[1].infer())
+ self.assertIsInstance(doc, astroid.Const)
+ self.assertEqual(doc.value, 'a')
+ pydict = next(ast_nodes[2].infer())
+ self.assertIsInstance(pydict, astroid.Dict)
+ pyglobals = next(ast_nodes[3].infer())
+ self.assertIsInstance(pyglobals, astroid.Dict)
+ defaults = next(ast_nodes[4].infer())
+ self.assertIsInstance(defaults, astroid.Tuple)
+ for node in ast_nodes[5:]:
+ self.assertIs(next(node.infer()), astroid.Uninferable)
+
class GeneratorModelTest(unittest.TestCase):