from .. import fixer_base from ..fixer_util import Name, Call, RParen, LParen, Dot from .. import patcomp class FixSocketSendRecv(fixer_base.BaseFix): BM_compatible = True explicit = True #The user must ask for this fixer PATTERN = """ power< obj=any+ trailer< '.' method=('send' | 'recv') > args=trailer< '(' [any] ')' > tail=any* > """ def transform(self, node, results): if(str(results["method"][0]) == "send"): for child in node.children: node.insert_child(2, LParen()) node.insert_child(3, Name("str.encode")) node.append_child(RParen()) node.changed() else: node.append_child(Dot()) node.append_child(Call(Name("decode"), [Name("'utf-8'")])) node.changed()