SILENT KILLERPanel

Current Path: > > usr > lib64 > python2.7 > lib2to3 > fixes > > >


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //usr/lib64/python2.7/lib2to3/fixes///

NameTypeSizeLast ModifiedActions
__init__.py File 47 bytes April 10 2024 04:58:35.
__init__.pyc File 133 bytes April 10 2024 04:58:46.
__init__.pyo File 133 bytes April 10 2024 04:58:46.
fix_apply.py File 2433 bytes April 10 2024 04:58:35.
fix_apply.pyc File 2084 bytes April 10 2024 04:58:46.
fix_apply.pyo File 2051 bytes April 10 2024 04:58:43.
fix_asserts.py File 984 bytes April 10 2024 04:58:35.
fix_asserts.pyc File 1561 bytes April 10 2024 04:58:46.
fix_asserts.pyo File 1561 bytes April 10 2024 04:58:46.
fix_basestring.py File 321 bytes April 10 2024 04:58:35.
fix_basestring.pyc File 807 bytes April 10 2024 04:58:46.
fix_basestring.pyo File 807 bytes April 10 2024 04:58:46.
fix_buffer.py File 591 bytes April 10 2024 04:58:35.
fix_buffer.pyc File 964 bytes April 10 2024 04:58:46.
fix_buffer.pyo File 964 bytes April 10 2024 04:58:46.
fix_dict.py File 3824 bytes April 10 2024 04:58:35.
fix_dict.pyc File 3769 bytes April 10 2024 04:58:46.
fix_dict.pyo File 3644 bytes April 10 2024 04:58:43.
fix_except.py File 3352 bytes April 10 2024 04:58:35.
fix_except.pyc File 3009 bytes April 10 2024 04:58:46.
fix_except.pyo File 3009 bytes April 10 2024 04:58:46.
fix_exec.py File 1002 bytes April 10 2024 04:58:35.
fix_exec.pyc File 1432 bytes April 10 2024 04:58:46.
fix_exec.pyo File 1399 bytes April 10 2024 04:58:43.
fix_execfile.py File 2056 bytes April 10 2024 04:58:35.
fix_execfile.pyc File 2108 bytes April 10 2024 04:58:46.
fix_execfile.pyo File 2075 bytes April 10 2024 04:58:43.
fix_exitfunc.py File 2503 bytes April 10 2024 04:58:35.
fix_exitfunc.pyc File 2757 bytes April 10 2024 04:58:46.
fix_exitfunc.pyo File 2757 bytes April 10 2024 04:58:46.
fix_filter.py File 2107 bytes April 10 2024 04:58:35.
fix_filter.pyc File 2270 bytes April 10 2024 04:58:46.
fix_filter.pyo File 2270 bytes April 10 2024 04:58:46.
fix_funcattrs.py File 645 bytes April 10 2024 04:58:35.
fix_funcattrs.pyc File 1128 bytes April 10 2024 04:58:46.
fix_funcattrs.pyo File 1128 bytes April 10 2024 04:58:46.
fix_future.py File 547 bytes April 10 2024 04:58:35.
fix_future.pyc File 933 bytes April 10 2024 04:58:46.
fix_future.pyo File 933 bytes April 10 2024 04:58:46.
fix_getcwdu.py File 452 bytes April 10 2024 04:58:35.
fix_getcwdu.pyc File 940 bytes April 10 2024 04:58:46.
fix_getcwdu.pyo File 940 bytes April 10 2024 04:58:46.
fix_has_key.py File 3227 bytes April 10 2024 04:58:35.
fix_has_key.pyc File 3198 bytes April 10 2024 04:58:46.
fix_has_key.pyo File 3165 bytes April 10 2024 04:58:43.
fix_idioms.py File 4889 bytes April 10 2024 04:58:35.
fix_idioms.pyc File 4537 bytes April 10 2024 04:58:46.
fix_idioms.pyo File 4433 bytes April 10 2024 04:58:43.
fix_import.py File 3260 bytes April 10 2024 04:58:35.
fix_import.pyc File 3253 bytes April 10 2024 04:58:46.
fix_import.pyo File 3253 bytes April 10 2024 04:58:46.
fix_imports.py File 5693 bytes April 10 2024 04:58:35.
fix_imports.pyc File 5380 bytes April 10 2024 04:58:46.
fix_imports.pyo File 5380 bytes April 10 2024 04:58:46.
fix_imports2.py File 289 bytes April 10 2024 04:58:35.
fix_imports2.pyc File 634 bytes April 10 2024 04:58:46.
fix_imports2.pyo File 634 bytes April 10 2024 04:58:46.
fix_input.py File 710 bytes April 10 2024 04:58:35.
fix_input.pyc File 1148 bytes April 10 2024 04:58:46.
fix_input.pyo File 1148 bytes April 10 2024 04:58:46.
fix_intern.py File 1866 bytes April 10 2024 04:58:35.
fix_intern.pyc File 1797 bytes April 10 2024 04:58:46.
fix_intern.pyo File 1797 bytes April 10 2024 04:58:46.
fix_isinstance.py File 1609 bytes April 10 2024 04:58:35.
fix_isinstance.pyc File 1852 bytes April 10 2024 04:58:46.
fix_isinstance.pyo File 1852 bytes April 10 2024 04:58:46.
fix_itertools.py File 1550 bytes April 10 2024 04:58:35.
fix_itertools.pyc File 1805 bytes April 10 2024 04:58:46.
fix_itertools.pyo File 1805 bytes April 10 2024 04:58:46.
fix_itertools_imports.py File 2094 bytes April 10 2024 04:58:35.
fix_itertools_imports.pyc File 2030 bytes April 10 2024 04:58:46.
fix_itertools_imports.pyo File 1985 bytes April 10 2024 04:58:43.
fix_long.py File 477 bytes April 10 2024 04:58:35.
fix_long.pyc File 855 bytes April 10 2024 04:58:46.
fix_long.pyo File 855 bytes April 10 2024 04:58:46.
fix_map.py File 3062 bytes April 10 2024 04:58:35.
fix_map.pyc File 3054 bytes April 10 2024 04:58:46.
fix_map.pyo File 3054 bytes April 10 2024 04:58:46.
fix_metaclass.py File 8216 bytes April 10 2024 04:58:35.
fix_metaclass.pyc File 6605 bytes April 10 2024 04:58:46.
fix_metaclass.pyo File 6555 bytes April 10 2024 04:58:43.
fix_methodattrs.py File 615 bytes April 10 2024 04:58:35.
fix_methodattrs.pyc File 1152 bytes April 10 2024 04:58:46.
fix_methodattrs.pyo File 1152 bytes April 10 2024 04:58:46.
fix_ne.py File 573 bytes April 10 2024 04:58:35.
fix_ne.pyc File 1001 bytes April 10 2024 04:58:46.
fix_ne.pyo File 1001 bytes April 10 2024 04:58:46.
fix_next.py File 3181 bytes April 10 2024 04:58:35.
fix_next.pyc File 3555 bytes April 10 2024 04:58:46.
fix_next.pyo File 3522 bytes April 10 2024 04:58:43.
fix_nonzero.py File 598 bytes April 10 2024 04:58:35.
fix_nonzero.pyc File 1100 bytes April 10 2024 04:58:46.
fix_nonzero.pyo File 1100 bytes April 10 2024 04:58:46.
fix_numliterals.py File 773 bytes April 10 2024 04:58:35.
fix_numliterals.pyc File 1265 bytes April 10 2024 04:58:46.
fix_numliterals.pyo File 1265 bytes April 10 2024 04:58:46.
fix_operator.py File 3472 bytes April 10 2024 04:58:35.
fix_operator.pyc File 5150 bytes April 10 2024 04:58:46.
fix_operator.pyo File 5150 bytes April 10 2024 04:58:46.
fix_paren.py File 1228 bytes April 10 2024 04:58:35.
fix_paren.pyc File 1557 bytes April 10 2024 04:58:46.
fix_paren.pyo File 1557 bytes April 10 2024 04:58:46.
fix_print.py File 2865 bytes April 10 2024 04:58:35.
fix_print.pyc File 2743 bytes April 10 2024 04:58:46.
fix_print.pyo File 2646 bytes April 10 2024 04:58:43.
fix_raise.py File 2934 bytes April 10 2024 04:58:35.
fix_raise.pyc File 2512 bytes April 10 2024 04:58:46.
fix_raise.pyo File 2512 bytes April 10 2024 04:58:46.
fix_raw_input.py File 455 bytes April 10 2024 04:58:35.
fix_raw_input.pyc File 950 bytes April 10 2024 04:58:46.
fix_raw_input.pyo File 950 bytes April 10 2024 04:58:46.
fix_reduce.py File 839 bytes April 10 2024 04:58:35.
fix_reduce.pyc File 1276 bytes April 10 2024 04:58:46.
fix_reduce.pyo File 1276 bytes April 10 2024 04:58:46.
fix_renames.py File 2218 bytes April 10 2024 04:58:35.
fix_renames.pyc File 2471 bytes April 10 2024 04:58:46.
fix_renames.pyo File 2471 bytes April 10 2024 04:58:46.
fix_repr.py File 614 bytes April 10 2024 04:58:35.
fix_repr.pyc File 1030 bytes April 10 2024 04:58:46.
fix_repr.pyo File 1030 bytes April 10 2024 04:58:46.
fix_set_literal.py File 1699 bytes April 10 2024 04:58:35.
fix_set_literal.pyc File 2004 bytes April 10 2024 04:58:46.
fix_set_literal.pyo File 2004 bytes April 10 2024 04:58:46.
fix_standarderror.py File 450 bytes April 10 2024 04:58:35.
fix_standarderror.pyc File 867 bytes April 10 2024 04:58:46.
fix_standarderror.pyo File 867 bytes April 10 2024 04:58:46.
fix_sys_exc.py File 1039 bytes April 10 2024 04:58:35.
fix_sys_exc.pyc File 1721 bytes April 10 2024 04:58:46.
fix_sys_exc.pyo File 1721 bytes April 10 2024 04:58:46.
fix_throw.py File 1586 bytes April 10 2024 04:58:35.
fix_throw.pyc File 2010 bytes April 10 2024 04:58:46.
fix_throw.pyo File 2010 bytes April 10 2024 04:58:46.
fix_tuple_params.py File 5577 bytes April 10 2024 04:58:35.
fix_tuple_params.pyc File 5458 bytes April 10 2024 04:58:46.
fix_tuple_params.pyo File 5458 bytes April 10 2024 04:58:46.
fix_types.py File 1809 bytes April 10 2024 04:58:35.
fix_types.pyc File 2210 bytes April 10 2024 04:58:46.
fix_types.pyo File 2210 bytes April 10 2024 04:58:46.
fix_unicode.py File 1269 bytes April 10 2024 04:58:35.
fix_unicode.pyc File 1732 bytes April 10 2024 04:58:46.
fix_unicode.pyo File 1732 bytes April 10 2024 04:58:46.
fix_urllib.py File 8385 bytes April 10 2024 04:58:35.
fix_urllib.pyc File 7160 bytes April 10 2024 04:58:46.
fix_urllib.pyo File 7160 bytes April 10 2024 04:58:46.
fix_ws_comma.py File 1095 bytes April 10 2024 04:58:35.
fix_ws_comma.pyc File 1396 bytes April 10 2024 04:58:46.
fix_ws_comma.pyo File 1396 bytes April 10 2024 04:58:46.
fix_xrange.py File 2699 bytes April 10 2024 04:58:35.
fix_xrange.pyc File 3087 bytes April 10 2024 04:58:46.
fix_xrange.pyo File 3087 bytes April 10 2024 04:58:46.
fix_xreadlines.py File 690 bytes April 10 2024 04:58:35.
fix_xreadlines.pyc File 1166 bytes April 10 2024 04:58:46.
fix_xreadlines.pyo File 1166 bytes April 10 2024 04:58:46.
fix_zip.py File 904 bytes April 10 2024 04:58:35.
fix_zip.pyc File 1360 bytes April 10 2024 04:58:46.
fix_zip.pyo File 1360 bytes April 10 2024 04:58:46.

Reading File: //usr/lib64/python2.7/lib2to3/fixes////fix_metaclass.py

"""Fixer for __metaclass__ = X -> (metaclass=X) methods.

   The various forms of classef (inherits nothing, inherits once, inherints
   many) don't parse the same in the CST so we look at ALL classes for
   a __metaclass__ and if we find one normalize the inherits to all be
   an arglist.

   For one-liner classes ('class X: pass') there is no indent/dedent so
   we normalize those into having a suite.

   Moving the __metaclass__ into the classdef can also cause the class
   body to be empty so there is some special casing for that as well.

   This fixer also tries very hard to keep original indenting and spacing
   in all those corner cases.

"""
# Author: Jack Diederich

# Local imports
from .. import fixer_base
from ..pygram import token
from ..fixer_util import Name, syms, Node, Leaf


def has_metaclass(parent):
    """ we have to check the cls_node without changing it.
        There are two possibilities:
          1)  clsdef => suite => simple_stmt => expr_stmt => Leaf('__meta')
          2)  clsdef => simple_stmt => expr_stmt => Leaf('__meta')
    """
    for node in parent.children:
        if node.type == syms.suite:
            return has_metaclass(node)
        elif node.type == syms.simple_stmt and node.children:
            expr_node = node.children[0]
            if expr_node.type == syms.expr_stmt and expr_node.children:
                left_side = expr_node.children[0]
                if isinstance(left_side, Leaf) and \
                        left_side.value == '__metaclass__':
                    return True
    return False


def fixup_parse_tree(cls_node):
    """ one-line classes don't get a suite in the parse tree so we add
        one to normalize the tree
    """
    for node in cls_node.children:
        if node.type == syms.suite:
            # already in the preferred format, do nothing
            return

    # !%@#! oneliners have no suite node, we have to fake one up
    for i, node in enumerate(cls_node.children):
        if node.type == token.COLON:
            break
    else:
        raise ValueError("No class suite and no ':'!")

    # move everything into a suite node
    suite = Node(syms.suite, [])
    while cls_node.children[i+1:]:
        move_node = cls_node.children[i+1]
        suite.append_child(move_node.clone())
        move_node.remove()
    cls_node.append_child(suite)
    node = suite


def fixup_simple_stmt(parent, i, stmt_node):
    """ if there is a semi-colon all the parts count as part of the same
        simple_stmt.  We just want the __metaclass__ part so we move
        everything after the semi-colon into its own simple_stmt node
    """
    for semi_ind, node in enumerate(stmt_node.children):
        if node.type == token.SEMI: # *sigh*
            break
    else:
        return

    node.remove() # kill the semicolon
    new_expr = Node(syms.expr_stmt, [])
    new_stmt = Node(syms.simple_stmt, [new_expr])
    while stmt_node.children[semi_ind:]:
        move_node = stmt_node.children[semi_ind]
        new_expr.append_child(move_node.clone())
        move_node.remove()
    parent.insert_child(i, new_stmt)
    new_leaf1 = new_stmt.children[0].children[0]
    old_leaf1 = stmt_node.children[0].children[0]
    new_leaf1.prefix = old_leaf1.prefix


def remove_trailing_newline(node):
    if node.children and node.children[-1].type == token.NEWLINE:
        node.children[-1].remove()


def find_metas(cls_node):
    # find the suite node (Mmm, sweet nodes)
    for node in cls_node.children:
        if node.type == syms.suite:
            break
    else:
        raise ValueError("No class suite!")

    # look for simple_stmt[ expr_stmt[ Leaf('__metaclass__') ] ]
    for i, simple_node in list(enumerate(node.children)):
        if simple_node.type == syms.simple_stmt and simple_node.children:
            expr_node = simple_node.children[0]
            if expr_node.type == syms.expr_stmt and expr_node.children:
                # Check if the expr_node is a simple assignment.
                left_node = expr_node.children[0]
                if isinstance(left_node, Leaf) and \
                        left_node.value == u'__metaclass__':
                    # We found an assignment to __metaclass__.
                    fixup_simple_stmt(node, i, simple_node)
                    remove_trailing_newline(simple_node)
                    yield (node, i, simple_node)


def fixup_indent(suite):
    """ If an INDENT is followed by a thing with a prefix then nuke the prefix
        Otherwise we get in trouble when removing __metaclass__ at suite start
    """
    kids = suite.children[::-1]
    # find the first indent
    while kids:
        node = kids.pop()
        if node.type == token.INDENT:
            break

    # find the first Leaf
    while kids:
        node = kids.pop()
        if isinstance(node, Leaf) and node.type != token.DEDENT:
            if node.prefix:
                node.prefix = u''
            return
        else:
            kids.extend(node.children[::-1])


class FixMetaclass(fixer_base.BaseFix):
    BM_compatible = True

    PATTERN = """
    classdef<any*>
    """

    def transform(self, node, results):
        if not has_metaclass(node):
            return

        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")

        # now stick the metaclass in the arglist
        meta_txt = last_metaclass.children[0].children[0]
        meta_txt.value = 'metaclass'
        orig_meta_prefix = meta_txt.prefix

        if arglist.children:
            arglist.append_child(Leaf(token.COMMA, u','))
            meta_txt.prefix = u' '
        else:
            meta_txt.prefix = u''

        # compact the expression "metaclass = Meta" -> "metaclass=Meta"
        expr_stmt = last_metaclass.children[0]
        assert expr_stmt.type == syms.expr_stmt
        expr_stmt.children[1].prefix = u''
        expr_stmt.children[2].prefix = u''

        arglist.append_child(last_metaclass)

        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 = orig_meta_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'))

SILENT KILLER Tool