class FixItertools(fixer_base.BaseFix):
BM_compatible = True
- it_funcs = "('imap'|'ifilter'|'izip'|'ifilterfalse')"
+ it_funcs = "('imap'|'ifilter'|'izip'|'izip_longest'|'ifilterfalse')"
PATTERN = """
power< it='itertools'
trailer<
def transform(self, node, results):
prefix = None
func = results['func'][0]
- if 'it' in results and func.value != 'ifilterfalse':
+ if ('it' in results and
+ func.value not in ('ifilterfalse', 'izip_longest')):
dot, it = (results['dot'], results['it'])
# Remove the 'itertools'
prefix = it.prefix
a = """%s(f, a)"""
self.checkall(b, a)
- def test_2(self):
+ def test_qualified(self):
b = """itertools.ifilterfalse(a, b)"""
a = """itertools.filterfalse(a, b)"""
self.check(b, a)
- def test_4(self):
+ b = """itertools.izip_longest(a, b)"""
+ a = """itertools.zip_longest(a, b)"""
+ self.check(b, a)
+
+ def test_2(self):
b = """ifilterfalse(a, b)"""
a = """filterfalse(a, b)"""
self.check(b, a)
+ b = """izip_longest(a, b)"""
+ a = """zip_longest(a, b)"""
+ self.check(b, a)
+
def test_space_1(self):
b = """ %s(f, a)"""
a = """ %s(f, a)"""
a = """ itertools.filterfalse(a, b)"""
self.check(b, a)
+ b = """ itertools.izip_longest(a, b)"""
+ a = """ itertools.zip_longest(a, b)"""
+ self.check(b, a)
+
def test_run_order(self):
self.assert_runs_after('map', 'zip', 'filter')
+
class Test_itertools_imports(FixerTestCase):
fixer = 'itertools_imports'
s = "from itertools import bar as bang"
self.unchanged(s)
- def test_ifilter(self):
- b = "from itertools import ifilterfalse"
- a = "from itertools import filterfalse"
- self.check(b, a)
+ def test_ifilter_and_zip_longest(self):
+ for name in "filterfalse", "zip_longest":
+ b = "from itertools import i%s" % (name,)
+ a = "from itertools import %s" % (name,)
+ self.check(b, a)
- b = "from itertools import imap, ifilterfalse, foo"
- a = "from itertools import filterfalse, foo"
- self.check(b, a)
+ b = "from itertools import imap, i%s, foo" % (name,)
+ a = "from itertools import %s, foo" % (name,)
+ self.check(b, a)
- b = "from itertools import bar, ifilterfalse, foo"
- a = "from itertools import bar, filterfalse, foo"
- self.check(b, a)
+ b = "from itertools import bar, i%s, foo" % (name,)
+ a = "from itertools import bar, %s, foo" % (name,)
+ self.check(b, a)
def test_import_star(self):
s = "from itertools import *"