From e0dd6f7d84c293fff6bdcf1307efca850fb01044 Mon Sep 17 00:00:00 2001 From: spacewander Date: Sun, 8 Nov 2015 16:23:23 +0800 Subject: [PATCH 1/2] use `elts[0]` to access str_code when the rest of `exec` is tuple --- pigar/reqs.py | 8 +++++++- pigar/tests/imports_example/example1.py | 4 ++-- pigar/tests/imports_example/example2.py | 2 +- pigar/tests/test_reqs.py | 5 +++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/pigar/reqs.py b/pigar/reqs.py index 785a45d..46be82f 100644 --- a/pigar/reqs.py +++ b/pigar/reqs.py @@ -100,7 +100,13 @@ def visit_Exec(self, node): **Just available in python 2.** """ if hasattr(node.body, 's'): - self._str_codes.append((node.body.s, node.lineno + self._lineno)) + self._str_codes.append( + (getattr(node.body, 's'), node.lineno + self._lineno)) + # Sometimes exec statement may be called with tuple in py2 + elif hasattr(node.body, 'elts') and len(node.body.elts) >= 1: + self._str_codes.append( + (getattr(node.body.elts[0], 's'), + node.lineno + self._lineno)) def visit_Expr(self, node): """ diff --git a/pigar/tests/imports_example/example1.py b/pigar/tests/imports_example/example1.py index 536f3bc..c055c83 100644 --- a/pigar/tests/imports_example/example1.py +++ b/pigar/tests/imports_example/example1.py @@ -11,7 +11,7 @@ exec("import bar", {}, {}) - +exec("import foobaz") def foo(): import json @@ -37,4 +37,4 @@ def bar(): ... import bisect ... pass """ - pass \ No newline at end of file + pass diff --git a/pigar/tests/imports_example/example2.py b/pigar/tests/imports_example/example2.py index 6646898..fd24f7b 100644 --- a/pigar/tests/imports_example/example2.py +++ b/pigar/tests/imports_example/example2.py @@ -9,4 +9,4 @@ except ImportError: import builtins # Py3 -import example1 \ No newline at end of file +import example1 diff --git a/pigar/tests/test_reqs.py b/pigar/tests/test_reqs.py index a81056e..088c130 100644 --- a/pigar/tests/test_reqs.py +++ b/pigar/tests/test_reqs.py @@ -27,6 +27,7 @@ def setUp(self): 'Foo': ['pigar/tests/imports_example/example1.py: 10'], 'Bar': ['pigar/tests/imports_example/example1.py: 13'], 'Baz': ['pigar/tests/imports_example/example1.py: 29'], + 'foobaz': ['pigar/tests/imports_example/example1.py: 14'], 'json': ['pigar/tests/imports_example/example1.py: 17'], 'itertools': ['pigar/tests/imports_example/example1.py: 23'], 'Queue': ['pigar/tests/imports_example/example1.py: 35'], @@ -55,7 +56,7 @@ def test_py3_reqs(self): # Assume 'foobar' is Py3 builtin package, no need install. self.assertListEqual( sorted(guess.keys()), - sorted(['Queue', '__builtin__', 'foobar', 'urlparse'])) + sorted(['Queue', '__builtin__', 'foobar', 'urlparse', 'foobaz'])) self._check_detail(reqs, pv) self._check_detail(guess, pv, False) @@ -65,7 +66,7 @@ def test_py2_reqs(self): pv = {k: v for k, v in self._installed_packages.values()} reqs, guess = self._extract_reqs() self.assertListEqual(sorted(reqs.keys()), sorted(pv.keys())) - self.assertListEqual(guess.keys(), ['builtins']) + self.assertListEqual(sorted(guess.keys()), ['builtins', 'foobaz']) self._check_detail(reqs, pv) self._check_detail(guess, pv, False) From a392f86438afa5037feba7c2263119f1ad85fa82 Mon Sep 17 00:00:00 2001 From: "X.C.Dong" Date: Sun, 8 Nov 2015 20:25:27 +0800 Subject: [PATCH 2/2] Revert 43183aa0afcbc440c22f0f22535e65168339bd91 --- pigar/reqs.py | 8 +------- pigar/tests/imports_example/example1.py | 4 ++-- pigar/tests/imports_example/example2.py | 2 +- pigar/tests/test_reqs.py | 5 ++--- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/pigar/reqs.py b/pigar/reqs.py index 46be82f..785a45d 100644 --- a/pigar/reqs.py +++ b/pigar/reqs.py @@ -100,13 +100,7 @@ def visit_Exec(self, node): **Just available in python 2.** """ if hasattr(node.body, 's'): - self._str_codes.append( - (getattr(node.body, 's'), node.lineno + self._lineno)) - # Sometimes exec statement may be called with tuple in py2 - elif hasattr(node.body, 'elts') and len(node.body.elts) >= 1: - self._str_codes.append( - (getattr(node.body.elts[0], 's'), - node.lineno + self._lineno)) + self._str_codes.append((node.body.s, node.lineno + self._lineno)) def visit_Expr(self, node): """ diff --git a/pigar/tests/imports_example/example1.py b/pigar/tests/imports_example/example1.py index c055c83..536f3bc 100644 --- a/pigar/tests/imports_example/example1.py +++ b/pigar/tests/imports_example/example1.py @@ -11,7 +11,7 @@ exec("import bar", {}, {}) -exec("import foobaz") + def foo(): import json @@ -37,4 +37,4 @@ def bar(): ... import bisect ... pass """ - pass + pass \ No newline at end of file diff --git a/pigar/tests/imports_example/example2.py b/pigar/tests/imports_example/example2.py index fd24f7b..6646898 100644 --- a/pigar/tests/imports_example/example2.py +++ b/pigar/tests/imports_example/example2.py @@ -9,4 +9,4 @@ except ImportError: import builtins # Py3 -import example1 +import example1 \ No newline at end of file diff --git a/pigar/tests/test_reqs.py b/pigar/tests/test_reqs.py index 088c130..a81056e 100644 --- a/pigar/tests/test_reqs.py +++ b/pigar/tests/test_reqs.py @@ -27,7 +27,6 @@ def setUp(self): 'Foo': ['pigar/tests/imports_example/example1.py: 10'], 'Bar': ['pigar/tests/imports_example/example1.py: 13'], 'Baz': ['pigar/tests/imports_example/example1.py: 29'], - 'foobaz': ['pigar/tests/imports_example/example1.py: 14'], 'json': ['pigar/tests/imports_example/example1.py: 17'], 'itertools': ['pigar/tests/imports_example/example1.py: 23'], 'Queue': ['pigar/tests/imports_example/example1.py: 35'], @@ -56,7 +55,7 @@ def test_py3_reqs(self): # Assume 'foobar' is Py3 builtin package, no need install. self.assertListEqual( sorted(guess.keys()), - sorted(['Queue', '__builtin__', 'foobar', 'urlparse', 'foobaz'])) + sorted(['Queue', '__builtin__', 'foobar', 'urlparse'])) self._check_detail(reqs, pv) self._check_detail(guess, pv, False) @@ -66,7 +65,7 @@ def test_py2_reqs(self): pv = {k: v for k, v in self._installed_packages.values()} reqs, guess = self._extract_reqs() self.assertListEqual(sorted(reqs.keys()), sorted(pv.keys())) - self.assertListEqual(sorted(guess.keys()), ['builtins', 'foobaz']) + self.assertListEqual(guess.keys(), ['builtins']) self._check_detail(reqs, pv) self._check_detail(guess, pv, False)