diff options
author | Claudiu Popa <pcmanticore@gmail.com> | 2016-03-06 17:10:51 +0000 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2016-06-03 20:31:10 +0100 |
commit | e3272214736449a585620c00ebfd80286f3a5500 (patch) | |
tree | bb5e2c995a05f06abed2a38864110642c64e2460 | |
parent | 2e8c48123419e4aafc91e1f35bc9b3f35541cb68 (diff) | |
download | astroid-git-e3272214736449a585620c00ebfd80286f3a5500.tar.gz |
Add missing Python 2 function model attributes.
-rw-r--r-- | astroid/interpreter/objectmodel.py | 9 | ||||
-rw-r--r-- | astroid/tests/unittest_object_model.py | 29 |
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): |