[Python-checkins] r61546 - in sandbox/trunk/2to3/lib2to3: fixes/fix_filter.py tests/test_fixers.py

david.wolever python-checkins at python.org
Tue Mar 18 20:28:03 CET 2008


Author: david.wolever
Date: Tue Mar 18 20:28:03 2008
New Revision: 61546

Modified:
   sandbox/trunk/2to3/lib2to3/fixes/fix_filter.py
   sandbox/trunk/2to3/lib2to3/tests/test_fixers.py
Log:
Fixed fix_filter so it won't wrap filter in a list if filter is imported from future.  See #2717.



Modified: sandbox/trunk/2to3/lib2to3/fixes/fix_filter.py
==============================================================================
--- sandbox/trunk/2to3/lib2to3/fixes/fix_filter.py	(original)
+++ sandbox/trunk/2to3/lib2to3/fixes/fix_filter.py	Tue Mar 18 20:28:03 2008
@@ -18,7 +18,7 @@
 from .. import patcomp
 from ..pgen2 import token
 from . import basefix
-from .util import Name, Call, ListComp, attr_chain
+from .util import Name, Call, ListComp, attr_chain, does_tree_import
 
 class FixFilter(basefix.BaseFix):
 
@@ -44,7 +44,22 @@
     >
     """
 
+    def start_tree(self, *args):
+        super(FixFilter, self).start_tree(*args)
+        self._new_filter = None
+
+    def has_new_filter(self, node):
+        if self._new_filter is not None:
+            return self._new_filter
+        self._new_filter = does_tree_import('future_builtins', 'filter', node)
+        return self._new_filter
+
     def transform(self, node, results):
+        if self.has_new_filter(node):
+            # If filter is imported from future_builtins, we don't want to
+            # do anything here.
+            return
+
         if "filter_lambda" in results:
             new = ListComp(results.get("fp").clone(),
                            results.get("fp").clone(),

Modified: sandbox/trunk/2to3/lib2to3/tests/test_fixers.py
==============================================================================
--- sandbox/trunk/2to3/lib2to3/tests/test_fixers.py	(original)
+++ sandbox/trunk/2to3/lib2to3/tests/test_fixers.py	Tue Mar 18 20:28:03 2008
@@ -2371,6 +2371,17 @@
         a = """(x for x in filter(f, 'abc'))"""
         self.unchanged(a)
 
+    def test_future_builtins(self):
+        a = "from future_builtins import spam, filter; filter(f, 'ham')"
+        self.unchanged(a)
+
+        b = """from future_builtins import spam; x = filter(f, 'abc')"""
+        a = """from future_builtins import spam; x = list(filter(f, 'abc'))"""
+        self.check(b, a)
+
+        a = "from future_builtins import *; filter(f, 'ham')"
+        self.unchanged(a)
+
 class Test_map(FixerTestCase):
     fixer = "map"
 


More information about the Python-checkins mailing list