martin.v.loewis
2008-11-25 03:08:21 UTC
Author: martin.v.loewis
Date: Tue Nov 25 04:08:21 2008
New Revision: 67372
Log:
Merged revisions 67183,67191,67371 via svnmerge from
svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3
........
r67183 | benjamin.peterson | 2008-11-11 04:51:33 +0100 (Di, 11 Nov 2008) | 1 line
handle 'import x as y' in fix_imports; this still needs more work...
........
r67191 | benjamin.peterson | 2008-11-12 00:24:51 +0100 (Mi, 12 Nov 2008) | 1 line
super() is good
........
r67371 | benjamin.peterson | 2008-11-24 23:02:00 +0100 (Mo, 24 Nov 2008) | 1 line
don't blow up in the metaclass fixer when assignments in the class statement aren't simple
........
Modified:
python/branches/py3k/Lib/lib2to3/ (props changed)
python/branches/py3k/Lib/lib2to3/fixes/fix_import.py
python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py
python/branches/py3k/Lib/lib2to3/tests/test_fixers.py
Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_import.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_import.py (original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_import.py Tue Nov 25 04:08:21 2008
@@ -13,7 +13,7 @@
# Local imports
from .. import fixer_base
from os.path import dirname, join, exists, pathsep
-from ..fixer_util import FromImport
+from ..fixer_util import FromImport, syms
class FixImport(fixer_base.BaseFix):
@@ -26,11 +26,14 @@
def transform(self, node, results):
imp = results['imp']
+ mod_name = str(imp.children[0] if imp.type == syms.dotted_as_name \
+ else imp)
+
if str(imp).startswith('.'):
# Already a new-style import
return
- if not probably_a_local_import(str(imp), self.filename):
+ if not probably_a_local_import(str(mod_name), self.filename):
# I guess this is a global import -- skip it!
return
Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py (original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py Tue Nov 25 04:08:21 2008
@@ -110,8 +110,11 @@
if simple_node.type == syms.simple_stmt and simple_node.children:
expr_node = simple_node.children[0]
if expr_node.type == syms.expr_stmt and expr_node.children:
- leaf_node = expr_node.children[0]
- if leaf_node.value == '__metaclass__':
+ # Check if the expr_node is a simple assignment.
+ left_node = expr_node.children[0]
+ if isinstance(left_node, Leaf) and \
+ left_node.value == '__metaclass__':
+ # We found a assignment to __metaclass__.
fixup_simple_stmt(node, i, simple_node)
remove_trailing_newline(simple_node)
yield (node, i, simple_node)
Modified: python/branches/py3k/Lib/lib2to3/tests/test_fixers.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/tests/test_fixers.py (original)
+++ python/branches/py3k/Lib/lib2to3/tests/test_fixers.py Tue Nov 25 04:08:21 2008
@@ -2622,7 +2622,7 @@
def check(self, b, a):
self.unchanged("from future_builtins import map; " + b, a)
- FixerTestCase.check(self, b, a)
+ super(Test_map, self).check(b, a)
def test_prefix_preservation(self):
b = """x = map( f, 'abc' )"""
@@ -2729,7 +2729,7 @@
def check(self, b, a):
self.unchanged("from future_builtins import zip; " + b, a)
- FixerTestCase.check(self, b, a)
+ super(Test_zip, self).check(b, a)
def test_zip_basic(self):
b = """x = zip(a, b, c)"""
@@ -3274,7 +3274,7 @@
fixer = "import"
def setUp(self):
- FixerTestCase.setUp(self)
+ super(Test_import, self).setUp()
# Need to replace fix_import's exists method
# so we can check that it's doing the right thing
self.files_checked = []
@@ -3293,9 +3293,9 @@
def check_both(self, b, a):
self.always_exists = True
- FixerTestCase.check(self, b, a)
+ super(Test_import, self).check(b, a)
self.always_exists = False
- FixerTestCase.unchanged(self, b)
+ super(Test_import, self).unchanged(b)
def test_files_checked(self):
def p(path):
@@ -3372,6 +3372,11 @@
a = "from . import foo, bar"
self.check_both(b, a)
+ def test_import_as(self):
+ b = "import foo as x"
+ a = "from . import foo as x"
+ self.check_both(b, a)
+
def test_dotted_import(self):
b = "import foo.bar"
a = "from . import foo.bar"
@@ -3766,6 +3771,17 @@
"""
self.check(b, a)
+ b = """
+ class X:
+ __metaclass__ = Meta
+ save.py = 23
+ """
+ a = """
+ class X(metaclass=Meta):
+ save.py = 23
+ """
+ self.check(b, a)
+
class Test_getcwdu(FixerTestCase):
Date: Tue Nov 25 04:08:21 2008
New Revision: 67372
Log:
Merged revisions 67183,67191,67371 via svnmerge from
svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3
........
r67183 | benjamin.peterson | 2008-11-11 04:51:33 +0100 (Di, 11 Nov 2008) | 1 line
handle 'import x as y' in fix_imports; this still needs more work...
........
r67191 | benjamin.peterson | 2008-11-12 00:24:51 +0100 (Mi, 12 Nov 2008) | 1 line
super() is good
........
r67371 | benjamin.peterson | 2008-11-24 23:02:00 +0100 (Mo, 24 Nov 2008) | 1 line
don't blow up in the metaclass fixer when assignments in the class statement aren't simple
........
Modified:
python/branches/py3k/Lib/lib2to3/ (props changed)
python/branches/py3k/Lib/lib2to3/fixes/fix_import.py
python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py
python/branches/py3k/Lib/lib2to3/tests/test_fixers.py
Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_import.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_import.py (original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_import.py Tue Nov 25 04:08:21 2008
@@ -13,7 +13,7 @@
# Local imports
from .. import fixer_base
from os.path import dirname, join, exists, pathsep
-from ..fixer_util import FromImport
+from ..fixer_util import FromImport, syms
class FixImport(fixer_base.BaseFix):
@@ -26,11 +26,14 @@
def transform(self, node, results):
imp = results['imp']
+ mod_name = str(imp.children[0] if imp.type == syms.dotted_as_name \
+ else imp)
+
if str(imp).startswith('.'):
# Already a new-style import
return
- if not probably_a_local_import(str(imp), self.filename):
+ if not probably_a_local_import(str(mod_name), self.filename):
# I guess this is a global import -- skip it!
return
Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py (original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py Tue Nov 25 04:08:21 2008
@@ -110,8 +110,11 @@
if simple_node.type == syms.simple_stmt and simple_node.children:
expr_node = simple_node.children[0]
if expr_node.type == syms.expr_stmt and expr_node.children:
- leaf_node = expr_node.children[0]
- if leaf_node.value == '__metaclass__':
+ # Check if the expr_node is a simple assignment.
+ left_node = expr_node.children[0]
+ if isinstance(left_node, Leaf) and \
+ left_node.value == '__metaclass__':
+ # We found a assignment to __metaclass__.
fixup_simple_stmt(node, i, simple_node)
remove_trailing_newline(simple_node)
yield (node, i, simple_node)
Modified: python/branches/py3k/Lib/lib2to3/tests/test_fixers.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/tests/test_fixers.py (original)
+++ python/branches/py3k/Lib/lib2to3/tests/test_fixers.py Tue Nov 25 04:08:21 2008
@@ -2622,7 +2622,7 @@
def check(self, b, a):
self.unchanged("from future_builtins import map; " + b, a)
- FixerTestCase.check(self, b, a)
+ super(Test_map, self).check(b, a)
def test_prefix_preservation(self):
b = """x = map( f, 'abc' )"""
@@ -2729,7 +2729,7 @@
def check(self, b, a):
self.unchanged("from future_builtins import zip; " + b, a)
- FixerTestCase.check(self, b, a)
+ super(Test_zip, self).check(b, a)
def test_zip_basic(self):
b = """x = zip(a, b, c)"""
@@ -3274,7 +3274,7 @@
fixer = "import"
def setUp(self):
- FixerTestCase.setUp(self)
+ super(Test_import, self).setUp()
# Need to replace fix_import's exists method
# so we can check that it's doing the right thing
self.files_checked = []
@@ -3293,9 +3293,9 @@
def check_both(self, b, a):
self.always_exists = True
- FixerTestCase.check(self, b, a)
+ super(Test_import, self).check(b, a)
self.always_exists = False
- FixerTestCase.unchanged(self, b)
+ super(Test_import, self).unchanged(b)
def test_files_checked(self):
def p(path):
@@ -3372,6 +3372,11 @@
a = "from . import foo, bar"
self.check_both(b, a)
+ def test_import_as(self):
+ b = "import foo as x"
+ a = "from . import foo as x"
+ self.check_both(b, a)
+
def test_dotted_import(self):
b = "import foo.bar"
a = "from . import foo.bar"
@@ -3766,6 +3771,17 @@
"""
self.check(b, a)
+ b = """
+ class X:
+ __metaclass__ = Meta
+ save.py = 23
+ """
+ a = """
+ class X(metaclass=Meta):
+ save.py = 23
+ """
+ self.check(b, a)
+
class Test_getcwdu(FixerTestCase):