[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