コード例 #1
0
 def transform(self, node, results):
     if _literal_re.match(node.value):
         touch_import(None, "six", node)
         new = node.clone()
         new.value = new.value[1:]
         new.prefix = ""
         node.replace(Call(Name("six.u", prefix=node.prefix), [new]))
コード例 #2
0
    def transform_iter(self, node, results):
        """Call six.(iter|view)items() and friends."""
        # Make sure six is imported.
        libmodernize.touch_import(None, "six", node)

        # Copy of self.transform() from fissix.fix_dict with some changes to
        # use the six.* methods.

        head = results["head"]
        method = results["method"][0]  # Extract node for method name
        tail = results["tail"]
        syms = self.syms
        method_name = method.value
        name = fixer_util.Name("six." + method_name, prefix=node.prefix)
        assert method_name.startswith(("iter", "view")), repr(method)
        assert method_name[4:] in ("keys", "items", "values"), repr(method)
        head = [n.clone() for n in head]
        tail = [n.clone() for n in tail]
        new = pytree.Node(syms.power, head)
        new.prefix = ""
        new = fixer_util.Call(name, [new])
        if tail:
            new = pytree.Node(syms.power, [new] + tail)
        new.prefix = node.prefix
        return new
コード例 #3
0
    def transform_iter(self, node, results):
        """Call six.(iter|view)items() and friends."""
        # Make sure six is imported.
        libmodernize.touch_import(None, u'six', node)

        # Copy of self.transform() from fissix.fix_dict with some changes to
        # use the six.* methods.

        head = results['head']
        method = results['method'][0]  # Extract node for method name
        tail = results['tail']
        syms = self.syms
        method_name = method.value
        name = fixer_util.Name(u'six.' + method_name, prefix=node.prefix)
        assert method_name.startswith((u'iter', u'view')), repr(method)
        assert method_name[4:] in (u'keys', u'items', u'values'), repr(method)
        head = [n.clone() for n in head]
        tail = [n.clone() for n in tail]
        new = pytree.Node(syms.power, head)
        new.prefix = u''
        new = fixer_util.Call(name, [new])
        if tail:
            new = pytree.Node(syms.power, [new] + tail)
        new.prefix = node.prefix
        return new
コード例 #4
0
 def transform_iter(self, method_name, node, base):
     """Call six.(iter|view)items() and friends."""
     libmodernize.touch_import(None, u'six', node)
     new_node = [n.clone() for n in base]
     new_node[0].prefix = u''
     name = fixer_util.Name(u'six.' + method_name, prefix=node.prefix)
     node.replace(fixer_util.Call(name, new_node))
コード例 #5
0
ファイル: fix_dict_six.py プロジェクト: startup-one/cogofly
 def transform_iter(self, method_name, node, base):
     """Call six.(iter|view)items() and friends."""
     libmodernize.touch_import(None, u'six', node)
     new_node = [n.clone() for n in base]
     new_node[0].prefix = u''
     name = fixer_util.Name(u'six.' + method_name, prefix=node.prefix)
     node.replace(fixer_util.Call(name, new_node))
コード例 #6
0
ファイル: fix_map.py プロジェクト: AvdN/python-modernize
 def transform(self, node, results):
     result = super(FixMap, self).transform(node, results)
     if not libmodernize.is_listcomp(result):
         # Always use the import even if no change is required so as to have
         # improved performance in iterator contexts even on Python 2.7.
         libmodernize.touch_import(u'six.moves', u'map', node)
     return result
コード例 #7
0
ファイル: fix_unicode.py プロジェクト: AvdN/python-modernize
 def transform(self, node, results):
     if _literal_re.match(node.value):
         touch_import(None, u'six', node)
         new = node.clone()
         new.value = new.value[1:]
         new.prefix = ''
         node.replace(Call(Name(u'six.u', prefix=node.prefix), [new]))
コード例 #8
0
ファイル: fix_filter.py プロジェクト: startup-one/cogofly
 def transform(self, node, results):
     result = super(FixFilter, self).transform(node, results)
     if not libmodernize.is_listcomp(result):
         # Keep performance improvement from six.moves.filter in iterator
         # contexts on Python 2.7.
         libmodernize.touch_import(u'six.moves', u'filter', node)
     return result
コード例 #9
0
 def transform(self, node, results):
     result = super(FixMap, self).transform(node, results)
     if not libmodernize.is_listcomp(result):
         # Always use the import even if no change is required so as to have
         # improved performance in iterator contexts even on Python 2.7.
         libmodernize.touch_import(u'six.moves', u'map', node)
     return result
コード例 #10
0
 def transform(self, node, results):
     libmodernize.touch_import("scalyr_agent", "compat", node)
     method = results["method"]
     head = results["head"]
     head.value = head.value.replace("os", "compat")
     method.value = "os_getenv_unicode"
     node.changed()
コード例 #11
0
    def transform(self, node, results):
        libmodernize.touch_import("scalyr_agent", "compat", node)
        head = results["head"]
        method = results["method"][0]
        head.value = "compat"
        method.value = "struct_{}_unicode".format(method.value)

        node.changed()
コード例 #12
0
 def transform_iter(self, method_name, node, base):
     """Call six.iteritems() and friends."""
     if method_name.startswith(u'view'):
         method_name = u'iter' + method_name[4:]
     libmodernize.touch_import(None, u'six', node)
     new_node = [n.clone() for n in base]
     new_node[0].prefix = u''
     name = fixer_util.Name(u'six.' + method_name, prefix=node.prefix)
     node.replace(fixer_util.Call(name, new_node))
コード例 #13
0
 def transform_iter(self, method_name, node, base):
     """Call six.iteritems() and friends."""
     if method_name.startswith(u"view"):
         method_name = u"iter" + method_name[4:]
     libmodernize.touch_import(None, u"six", node)
     new_node = [n.clone() for n in base]
     new_node[0].prefix = u""
     name = fixer_util.Name(u"six." + method_name, prefix=node.prefix)
     node.replace(fixer_util.Call(name, new_node))
コード例 #14
0
    def transform(self, node, results):
        exc = results["exc"].clone()
        val = results["val"].clone()
        tb = results["tb"].clone()

        exc.prefix = u""
        val.prefix = tb.prefix = u" "

        touch_import(None, u'six', node)
        return Call(Name(u"six.reraise"), [exc, Comma(), val, Comma(), tb],
                    prefix=node.prefix)
コード例 #15
0
    def transform(self, node, results):
        exc = results["exc"].clone()
        val = results["val"].clone()
        tb = results["tb"].clone()

        exc.prefix = u""
        val.prefix = tb.prefix = u" "

        touch_import(None, u'six', node)
        return Call(Name(u"six.reraise"),
                    [exc, Comma(), val, Comma(), tb],
                    prefix=node.prefix)
コード例 #16
0
    def transform(self, node, results):
        if self.should_skip(node):
            return

        touch_import("six.moves", "input", node)
        name = results["name"]
        if name.value == "raw_input":
            name.replace(Name("input", prefix=name.prefix))
        else:
            new_node = node.clone()
            new_node.prefix = ""
            return Call(Name("eval"), [new_node], prefix=node.prefix)
コード例 #17
0
    def transform(self, node, results):
        if self.should_skip(node):
            return

        touch_import(u'six.moves', u'input', node)
        name = results['name']
        if name.value == 'raw_input':
            name.replace(Name('input', prefix=name.prefix))
        else:
            new_node = node.clone()
            new_node.prefix = ''
            return Call(Name('eval'), [new_node], prefix=node.prefix)
コード例 #18
0
    def transform(self, node, results):
        imports = results["imports"]
        if imports.type == syms.import_as_name or not imports.children:
            children = [imports]
        else:
            children = imports.children
        for child in children[::2]:
            if child.type == token.NAME:
                name_node = child
            elif child.type == token.STAR:
                # Just leave the import as is.
                return
            else:
                assert child.type == syms.import_as_name
                name_node = child.children[0]
            member_name = name_node.value
            if member_name in (
                "imap",
                "izip",
                "ifilter",
                "ifilterfalse",
                "izip_longest",
            ):
                child.value = None
                libmodernize.touch_import("six.moves", member_name[1:], node)
                child.remove()

        # Make sure the import statement is still sane
        children = imports.children[:] or [imports]
        remove_comma = True
        for child in children:
            if remove_comma and child.type == token.COMMA:
                child.remove()
            else:
                remove_comma ^= True

        while children and children[-1].type == token.COMMA:
            children.pop().remove()

        # If there are no imports left, just get rid of the entire statement
        if (
            not (imports.children or getattr(imports, "value", None))
            or imports.parent is None
        ):
            p = node.prefix
            node = BlankLine()
            node.prefix = p
            return node
コード例 #19
0
    def transform(self, node, results):
        prefix = None
        func = results["func"][0]
        if "it" in results and func.value not in ("ifilterfalse", "izip_longest"):
            dot, it = (results["dot"], results["it"])
            # Remove the 'itertools'
            prefix = it.prefix
            it.remove()
            # Replace the node wich contains ('.', 'function') with the
            # function (to be consistant with the second part of the pattern)
            dot.remove()
            func.parent.replace(func)
            libmodernize.touch_import("six.moves", func.value[1:], node)

        prefix = prefix or func.prefix
        func.replace(Name(func.value[1:], prefix=prefix))
コード例 #20
0
    def transform(self, node, results):
        prefix = None
        func = results['func'][0]
        if ('it' in results and
            func.value not in (u'ifilterfalse', u'izip_longest')):
            dot, it = (results['dot'], results['it'])
            # Remove the 'itertools'
            prefix = it.prefix
            it.remove()
            # Replace the node wich contains ('.', 'function') with the
            # function (to be consistant with the second part of the pattern)
            dot.remove()
            func.parent.replace(func)
            libmodernize.touch_import(u'six.moves', func.value[1:], node)

        prefix = prefix or func.prefix
        func.replace(Name(func.value[1:], prefix=prefix))
コード例 #21
0
    def transform(self, node, results):
        prefix = None
        func = results['func'][0]
        if ('it' in results
                and func.value not in (u'ifilterfalse', u'izip_longest')):
            dot, it = (results['dot'], results['it'])
            # Remove the 'itertools'
            prefix = it.prefix
            it.remove()
            # Replace the node wich contains ('.', 'function') with the
            # function (to be consistant with the second part of the pattern)
            dot.remove()
            func.parent.replace(func)
            libmodernize.touch_import(u'six.moves', func.value[1:], node)

        prefix = prefix or func.prefix
        func.replace(Name(func.value[1:], prefix=prefix))
コード例 #22
0
 def transform(self, node, results):
     next_sibling = node.next_sibling
     if (next_sibling and next_sibling.type == token.EQUAL
             and next_sibling.value == "="):
         return
     prev_sibling = node.prev_sibling
     if prev_sibling and prev_sibling.type == token.NAME:
         if prev_sibling.value in ("del", "in"):
             return
     method = results["method"]
     method_node = method.parent
     if str(method_node.next_sibling) in (".clear", ".update"):
         return
     libmodernize.touch_import("scalyr_agent", "compat", node)
     head = results["head"]
     head.value = head.value.replace("os", "compat")
     method.value = "os_environ_unicode"
     node.changed()
コード例 #23
0
    def transform(self, node, results):
        imports = results['imports']
        if imports.type == syms.import_as_name or not imports.children:
            children = [imports]
        else:
            children = imports.children
        for child in children[::2]:
            if child.type == token.NAME:
                member = child.value
                name_node = child
            elif child.type == token.STAR:
                # Just leave the import as is.
                return
            else:
                assert child.type == syms.import_as_name
                name_node = child.children[0]
            member_name = name_node.value
            if member_name in ('imap', 'izip', 'ifilter',
                               'ifilterfalse', 'izip_longest'):
                child.value = None
                libmodernize.touch_import(u'six.moves', member_name[1:], node)
                child.remove()

        # Make sure the import statement is still sane
        children = imports.children[:] or [imports]
        remove_comma = True
        for child in children:
            if remove_comma and child.type == token.COMMA:
                child.remove()
            else:
                remove_comma ^= True

        while children and children[-1].type == token.COMMA:
            children.pop().remove()

        # If there are no imports left, just get rid of the entire statement
        if (not (imports.children or getattr(imports, 'value', None)) or
            imports.parent is None):
            p = node.prefix
            node = BlankLine()
            node.prefix = p
            return node
コード例 #24
0
ファイル: fix_xrange_six.py プロジェクト: startup-one/cogofly
 def transform(self, node, results):
     if self.should_skip(node):
         return
     touch_import(u'six.moves', u'range',  node)
     return super(FixXrangeSix, self).transform(node, results)
コード例 #25
0
ファイル: fix_xrange_six.py プロジェクト: graingert/modernize
 def transform(self, node, results):
     if self.should_skip(node):
         return
     touch_import("six.moves", "range", node)
     return super().transform(node, results)
コード例 #26
0
 def transform(self, node, results):
     result = super().transform(node, results)
     # Always use six.moves.zip so that even Python 2.7 gets performance
     # boost from using itertools in iterator contexts.
     libmodernize.touch_import("six.moves", "zip", node)
     return result
コード例 #27
0
 def transform(self, node, results):
     touch_import(None, 'six', node)
     pair = results['pair']
     pair.replace(fixer_util.Name('six.integer_types', prefix=pair.prefix))
コード例 #28
0
ファイル: fix_basestring.py プロジェクト: graingert/modernize
 def transform(self, node, results):
     libmodernize.touch_import(None, "six", node)
     return fixer_util.Name("six.string_types", prefix=node.prefix)
コード例 #29
0
ファイル: fix_zip.py プロジェクト: AvdN/python-modernize
 def transform(self, node, results):
     result = super(FixZip, self).transform(node, results)
     # Always use six.moves.zip so that even Python 2.7 gets performance
     # boost from using itertools in iterator contexts.
     libmodernize.touch_import(u'six.moves', u'zip', node)
     return result
コード例 #30
0
 def transform(self, node, results):
     touch_import(None, 'six', node)
     pair = results['pair']
     pair.replace(fixer_util.Name('six.integer_types', prefix=pair.prefix))
コード例 #31
0
 def transform(self, node, results):
     libmodernize.touch_import(None, u'six', node)
     return fixer_util.Name(u'six.text_type', prefix=node.prefix)
コード例 #32
0
 def transform(self, node, results):
     if self.should_skip(node):
         return
     if is_probably_builtin(node):
         libmodernize.touch_import(u'six', u'unichr', node)
コード例 #33
0
ファイル: fix_open.py プロジェクト: graingert/modernize
 def transform(self, node, results):
     libmodernize.touch_import("io", "open", node)
コード例 #34
0
    def transform(self, node, results):
        if not has_metaclass(node):
            return  # pragma: no cover

        fixup_parse_tree(node)

        # find metaclasses, keep the last one
        last_metaclass = None
        for suite, i, stmt in find_metas(node):
            last_metaclass = stmt
            stmt.remove()

        text_type = node.children[0].type  # always Leaf(nnn, 'class')

        # figure out what kind of classdef we have
        if len(node.children) == 7:
            # Node(classdef, ['class', 'name', '(', arglist, ')', ':', suite])
            #                 0        1       2    3        4    5    6
            if node.children[3].type == syms.arglist:
                arglist = node.children[3]
            # Node(classdef, ['class', 'name', '(', 'Parent', ')', ':', suite])
            else:
                parent = node.children[3].clone()
                arglist = Node(syms.arglist, [parent])
                node.set_child(3, arglist)
        elif len(node.children) == 6:
            # Node(classdef, ['class', 'name', '(',  ')', ':', suite])
            #                 0        1       2     3    4    5
            arglist = Node(syms.arglist, [])
            node.insert_child(3, arglist)
        elif len(node.children) == 4:
            # Node(classdef, ['class', 'name', ':', suite])
            #                 0        1       2    3
            arglist = Node(syms.arglist, [])
            node.insert_child(2, Leaf(token.RPAR, u")"))
            node.insert_child(2, arglist)
            node.insert_child(2, Leaf(token.LPAR, u"("))
        else:
            raise ValueError("Unexpected class definition")  # pragma: no cover

        touch_import(None, u"six", node)

        metaclass = last_metaclass.children[0].children[2].clone()
        metaclass.prefix = u""

        arguments = [metaclass]

        if arglist.children:
            bases = arglist.clone()
            bases.prefix = u" "
            arguments.extend([Comma(), bases])

        arglist.replace(Call(Name(u"six.with_metaclass", prefix=arglist.prefix), arguments))

        fixup_indent(suite)

        # check for empty suite
        if not suite.children:
            # one-liner that was just __metaclass__
            suite.remove()
            pass_leaf = Leaf(text_type, u"pass")
            pass_leaf.prefix = last_metaclass.prefix
            node.append_child(pass_leaf)
            node.append_child(Leaf(token.NEWLINE, u"\n"))

        elif len(suite.children) > 1 and (
            suite.children[-2].type == token.INDENT and suite.children[-1].type == token.DEDENT
        ):
            # there was only one line in the class body and it was __metaclass__
            pass_leaf = Leaf(text_type, u"pass")
            suite.insert_child(-1, pass_leaf)
            suite.insert_child(-1, Leaf(token.NEWLINE, u"\n"))
コード例 #35
0
 def transform(self, node, results):
     libmodernize.touch_import(u'io', u'open', node)
コード例 #36
0
 def transform(self, node, results):
     if self.should_skip(node):
         return
     if is_probably_builtin(node):
         libmodernize.touch_import("six", "unichr", node)
コード例 #37
0
 def transform(self, node, results):
     touch_import(None, "six", node)
     pair = results["pair"]
     pair.replace(fixer_util.Name("six.integer_types", prefix=pair.prefix))
コード例 #38
0
    def transform(self, node, results):
        if not has_metaclass(node):
            return  # pragma: no cover

        fixup_parse_tree(node)

        # find metaclasses, keep the last one
        last_metaclass = None
        for suite, i, stmt in find_metas(node):
            last_metaclass = stmt
            stmt.remove()

        text_type = node.children[0].type  # always Leaf(nnn, 'class')

        # figure out what kind of classdef we have
        if len(node.children) == 7:
            # Node(classdef, ['class', 'name', '(', arglist, ')', ':', suite])
            #                 0        1       2    3        4    5    6
            if node.children[3].type == syms.arglist:
                arglist = node.children[3]
            # Node(classdef, ['class', 'name', '(', 'Parent', ')', ':', suite])
            else:
                parent = node.children[3].clone()
                arglist = Node(syms.arglist, [parent])
                node.set_child(3, arglist)
        elif len(node.children) == 6:
            # Node(classdef, ['class', 'name', '(',  ')', ':', suite])
            #                 0        1       2     3    4    5
            arglist = Node(syms.arglist, [])
            node.insert_child(3, arglist)
        elif len(node.children) == 4:
            # Node(classdef, ['class', 'name', ':', suite])
            #                 0        1       2    3
            arglist = Node(syms.arglist, [])
            node.insert_child(2, Leaf(token.RPAR, u')'))
            node.insert_child(2, arglist)
            node.insert_child(2, Leaf(token.LPAR, u'('))
        else:
            raise ValueError("Unexpected class definition")  # pragma: no cover

        touch_import(None, u'six', node)

        metaclass = last_metaclass.children[0].children[2].clone()
        metaclass.prefix = u''

        arguments = [metaclass]

        if arglist.children:
            bases = arglist.clone()
            bases.prefix = u' '
            arguments.extend([Comma(), bases])

        arglist.replace(
            Call(Name(u'six.with_metaclass', prefix=arglist.prefix),
                 arguments))

        fixup_indent(suite)

        # check for empty suite
        if not suite.children:
            # one-liner that was just __metaclass__
            suite.remove()
            pass_leaf = Leaf(text_type, u'pass')
            pass_leaf.prefix = last_metaclass.prefix
            node.append_child(pass_leaf)
            node.append_child(Leaf(token.NEWLINE, u'\n'))

        elif len(suite.children) > 1 and \
                 (suite.children[-2].type == token.INDENT and
                  suite.children[-1].type == token.DEDENT):
            # there was only one line in the class body and it was __metaclass__
            pass_leaf = Leaf(text_type, u'pass')
            suite.insert_child(-1, pass_leaf)
            suite.insert_child(-1, Leaf(token.NEWLINE, u'\n'))
コード例 #39
0
 def transform(self, node, results):
     libmodernize.touch_import(None, u"six", node)
     return fixer_util.Name(u"six.string_types", prefix=node.prefix)