diff -r 2de806c8b070 Lib/lib2to3/fixer_util.py --- a/Lib/lib2to3/fixer_util.py Wed Nov 06 22:17:39 2013 +1000 +++ b/Lib/lib2to3/fixer_util.py Thu Nov 07 00:00:59 2013 +1000 @@ -152,6 +152,27 @@ new.prefix = node.prefix return new +def MethodToImportedFunctionCall(node, results, names): + """Returns an import statement and calls a function + of the module with the previous method source as the first arg: + + import module + module.name(obj, arg)""" + arg = results["arg"].clone() + obj = results["obj"].clone() + newarglist = Node(syms.arglist, [obj, Leaf(token.COMMA, ", "), arg]) + after = results["after"] + if after: + after = [n.clone() for n in after] + new = Node(syms.power, + Attr(Name(names[0]), Name(names[1])) + + [Node(syms.trailer, + [results["lpar"].clone(), + newarglist, + results["rpar"].clone()])] + after) + new.prefix = node.prefix + return new + ########################################################### ### Determine whether a node represents a given literal diff -r 2de806c8b070 Lib/lib2to3/tests/test_fixers.py --- a/Lib/lib2to3/tests/test_fixers.py Wed Nov 06 22:17:39 2013 +1000 +++ b/Lib/lib2to3/tests/test_fixers.py Thu Nov 07 00:00:59 2013 +1000 @@ -341,6 +341,84 @@ s = """reload()""" self.unchanged(s) +class Test_transform_encode(FixerTestCase): + fixer = "transform_encode" + + def test(self): + b = """obj.encode('bz2')""" + a = """import codecs\ncodecs.encode(obj, 'bz2')""" + self.check(b, a) + + def test_str_variants(self): + b = """obj.encode("bz2")""" + a = """import codecs\ncodecs.encode(obj, "bz2")""" + self.check(b, a) + + b = """obj.encode('''bz2''')""" + a = """import codecs\ncodecs.encode(obj, '''bz2''')""" + self.check(b, a) + + b = '''obj.encode("""bz2""")''' + a = '''import codecs\ncodecs.encode(obj, """bz2""")''' + self.check(b, a) + + + def test_comment(self): + b = """obj.encode('bz2') # comment""" + a = """import codecs\ncodecs.encode(obj, 'bz2') # comment""" + self.check(b, a) + + def test_space(self): + b = """obj.encode( 'bz2' )""" + a = """import codecs\ncodecs.encode(obj, 'bz2' )""" + self.check(b, a) + + b = """obj.encode( 'bz2')""" + a = """import codecs\ncodecs.encode(obj, 'bz2')""" + self.check(b, a) + + b = """obj.encode('bz2' )""" + a = """import codecs\ncodecs.encode(obj, 'bz2' )""" + self.check(b, a) + + def test_unchanged(self): + s = """obj.encode(encoding)""" + self.unchanged(s) + + s = """obj.encode(bz2)""" + self.unchanged(s) + + s = """obj.encode('ascii')""" + self.unchanged(s) + + s = """obj.encode('bz2', 'invalid')""" + self.unchanged(s) + + s = """obj.encode('bz2', errors='invalid')""" + self.unchanged(s) + + s = """obj.encode('bz2', *h)""" + self.unchanged(s) + + s = """obj.encode('bz2', *h, **i)""" + self.unchanged(s) + + s = """obj.encode('bz2', **i)""" + self.unchanged(s) + + s = """obj.encode(*h, **i)""" + self.unchanged(s) + + s = """obj.encode(*h)""" + self.unchanged(s) + + s = """obj.encode(**i)""" + self.unchanged(s) + + s = """obj.encode()""" + self.unchanged(s) + + class Test_intern(FixerTestCase): fixer = "intern"