Current Path: > > opt > alt > python27 > 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 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
__init__.py | File | 47 bytes | January 08 2025 10:43:36. | |
__init__.pyc | File | 146 bytes | January 08 2025 10:43:36. | |
__init__.pyo | File | 146 bytes | January 08 2025 10:43:36. | |
fix_apply.py | File | 2433 bytes | January 08 2025 10:43:36. | |
fix_apply.pyc | File | 2123 bytes | January 08 2025 10:43:35. | |
fix_apply.pyo | File | 2090 bytes | January 08 2025 10:43:36. | |
fix_asserts.py | File | 984 bytes | January 08 2025 10:43:35. | |
fix_asserts.pyc | File | 1600 bytes | January 08 2025 10:43:36. | |
fix_asserts.pyo | File | 1600 bytes | January 08 2025 10:43:36. | |
fix_basestring.py | File | 321 bytes | January 08 2025 10:43:36. | |
fix_basestring.pyc | File | 846 bytes | January 08 2025 10:43:36. | |
fix_basestring.pyo | File | 846 bytes | January 08 2025 10:43:36. | |
fix_buffer.py | File | 591 bytes | January 08 2025 10:43:35. | |
fix_buffer.pyc | File | 1003 bytes | January 08 2025 10:43:36. | |
fix_buffer.pyo | File | 1003 bytes | January 08 2025 10:43:36. | |
fix_dict.py | File | 3824 bytes | January 08 2025 10:43:36. | |
fix_dict.pyc | File | 3821 bytes | January 08 2025 10:43:36. | |
fix_dict.pyo | File | 3696 bytes | January 08 2025 10:43:36. | |
fix_except.py | File | 3352 bytes | January 08 2025 10:43:36. | |
fix_except.pyc | File | 3061 bytes | January 08 2025 10:43:36. | |
fix_except.pyo | File | 3061 bytes | January 08 2025 10:43:36. | |
fix_exec.py | File | 1002 bytes | January 08 2025 10:43:36. | |
fix_exec.pyc | File | 1471 bytes | January 08 2025 10:43:36. | |
fix_exec.pyo | File | 1438 bytes | January 08 2025 10:43:36. | |
fix_execfile.py | File | 2056 bytes | January 08 2025 10:43:36. | |
fix_execfile.pyc | File | 2147 bytes | January 08 2025 10:43:36. | |
fix_execfile.pyo | File | 2114 bytes | January 08 2025 10:43:36. | |
fix_exitfunc.py | File | 2503 bytes | January 08 2025 10:43:36. | |
fix_exitfunc.pyc | File | 2822 bytes | January 08 2025 10:43:36. | |
fix_exitfunc.pyo | File | 2822 bytes | January 08 2025 10:43:36. | |
fix_filter.py | File | 2107 bytes | January 08 2025 10:43:36. | |
fix_filter.pyc | File | 2309 bytes | January 08 2025 10:43:36. | |
fix_filter.pyo | File | 2309 bytes | January 08 2025 10:43:36. | |
fix_funcattrs.py | File | 645 bytes | January 08 2025 10:43:36. | |
fix_funcattrs.pyc | File | 1167 bytes | January 08 2025 10:43:36. | |
fix_funcattrs.pyo | File | 1167 bytes | January 08 2025 10:43:36. | |
fix_future.py | File | 547 bytes | January 08 2025 10:43:35. | |
fix_future.pyc | File | 972 bytes | January 08 2025 10:43:35. | |
fix_future.pyo | File | 972 bytes | January 08 2025 10:43:35. | |
fix_getcwdu.py | File | 452 bytes | January 08 2025 10:43:36. | |
fix_getcwdu.pyc | File | 979 bytes | January 08 2025 10:43:36. | |
fix_getcwdu.pyo | File | 979 bytes | January 08 2025 10:43:36. | |
fix_has_key.py | File | 3227 bytes | January 08 2025 10:43:35. | |
fix_has_key.pyc | File | 3237 bytes | January 08 2025 10:43:36. | |
fix_has_key.pyo | File | 3204 bytes | January 08 2025 10:43:36. | |
fix_idioms.py | File | 4889 bytes | January 08 2025 10:43:36. | |
fix_idioms.pyc | File | 4628 bytes | January 08 2025 10:43:36. | |
fix_idioms.pyo | File | 4524 bytes | January 08 2025 10:43:36. | |
fix_import.py | File | 3260 bytes | January 08 2025 10:43:36. | |
fix_import.pyc | File | 3331 bytes | January 08 2025 10:43:35. | |
fix_import.pyo | File | 3331 bytes | January 08 2025 10:43:35. | |
fix_imports.py | File | 5693 bytes | January 08 2025 10:43:35. | |
fix_imports.pyc | File | 5510 bytes | January 08 2025 10:43:35. | |
fix_imports.pyo | File | 5510 bytes | January 08 2025 10:43:35. | |
fix_imports2.py | File | 289 bytes | January 08 2025 10:43:35. | |
fix_imports2.pyc | File | 660 bytes | January 08 2025 10:43:36. | |
fix_imports2.pyo | File | 660 bytes | January 08 2025 10:43:36. | |
fix_input.py | File | 710 bytes | January 08 2025 10:43:36. | |
fix_input.pyc | File | 1187 bytes | January 08 2025 10:43:36. | |
fix_input.pyo | File | 1187 bytes | January 08 2025 10:43:36. | |
fix_intern.py | File | 1866 bytes | January 08 2025 10:43:36. | |
fix_intern.pyc | File | 1836 bytes | January 08 2025 10:43:36. | |
fix_intern.pyo | File | 1836 bytes | January 08 2025 10:43:36. | |
fix_isinstance.py | File | 1609 bytes | January 08 2025 10:43:36. | |
fix_isinstance.pyc | File | 1891 bytes | January 08 2025 10:43:36. | |
fix_isinstance.pyo | File | 1891 bytes | January 08 2025 10:43:36. | |
fix_itertools.py | File | 1550 bytes | January 08 2025 10:43:36. | |
fix_itertools.pyc | File | 1844 bytes | January 08 2025 10:43:36. | |
fix_itertools.pyo | File | 1844 bytes | January 08 2025 10:43:36. | |
fix_itertools_imports.py | File | 2094 bytes | January 08 2025 10:43:35. | |
fix_itertools_imports.pyc | File | 2069 bytes | January 08 2025 10:43:36. | |
fix_itertools_imports.pyo | File | 2024 bytes | January 08 2025 10:43:36. | |
fix_long.py | File | 477 bytes | January 08 2025 10:43:36. | |
fix_long.pyc | File | 894 bytes | January 08 2025 10:43:35. | |
fix_long.pyo | File | 894 bytes | January 08 2025 10:43:35. | |
fix_map.py | File | 3062 bytes | January 08 2025 10:43:36. | |
fix_map.pyc | File | 3093 bytes | January 08 2025 10:43:36. | |
fix_map.pyo | File | 3093 bytes | January 08 2025 10:43:36. | |
fix_metaclass.py | File | 8216 bytes | January 08 2025 10:43:36. | |
fix_metaclass.pyc | File | 6722 bytes | January 08 2025 10:43:36. | |
fix_metaclass.pyo | File | 6672 bytes | January 08 2025 10:43:36. | |
fix_methodattrs.py | File | 615 bytes | January 08 2025 10:43:36. | |
fix_methodattrs.pyc | File | 1191 bytes | January 08 2025 10:43:36. | |
fix_methodattrs.pyo | File | 1191 bytes | January 08 2025 10:43:36. | |
fix_ne.py | File | 573 bytes | January 08 2025 10:43:36. | |
fix_ne.pyc | File | 1053 bytes | January 08 2025 10:43:36. | |
fix_ne.pyo | File | 1053 bytes | January 08 2025 10:43:36. | |
fix_next.py | File | 3181 bytes | January 08 2025 10:43:36. | |
fix_next.pyc | File | 3659 bytes | January 08 2025 10:43:36. | |
fix_next.pyo | File | 3626 bytes | January 08 2025 10:43:36. | |
fix_nonzero.py | File | 598 bytes | January 08 2025 10:43:36. | |
fix_nonzero.pyc | File | 1139 bytes | January 08 2025 10:43:36. | |
fix_nonzero.pyo | File | 1139 bytes | January 08 2025 10:43:36. | |
fix_numliterals.py | File | 773 bytes | January 08 2025 10:43:36. | |
fix_numliterals.pyc | File | 1317 bytes | January 08 2025 10:43:36. | |
fix_numliterals.pyo | File | 1317 bytes | January 08 2025 10:43:36. | |
fix_operator.py | File | 3472 bytes | January 08 2025 10:43:35. | |
fix_operator.pyc | File | 5345 bytes | January 08 2025 10:43:36. | |
fix_operator.pyo | File | 5345 bytes | January 08 2025 10:43:36. | |
fix_paren.py | File | 1228 bytes | January 08 2025 10:43:36. | |
fix_paren.pyc | File | 1596 bytes | January 08 2025 10:43:36. | |
fix_paren.pyo | File | 1596 bytes | January 08 2025 10:43:36. | |
fix_print.py | File | 2865 bytes | January 08 2025 10:43:36. | |
fix_print.pyc | File | 2795 bytes | January 08 2025 10:43:36. | |
fix_print.pyo | File | 2698 bytes | January 08 2025 10:43:36. | |
fix_raise.py | File | 2934 bytes | January 08 2025 10:43:35. | |
fix_raise.pyc | File | 2551 bytes | January 08 2025 10:43:36. | |
fix_raise.pyo | File | 2551 bytes | January 08 2025 10:43:36. | |
fix_raw_input.py | File | 455 bytes | January 08 2025 10:43:36. | |
fix_raw_input.pyc | File | 989 bytes | January 08 2025 10:43:36. | |
fix_raw_input.pyo | File | 989 bytes | January 08 2025 10:43:36. | |
fix_reduce.py | File | 839 bytes | January 08 2025 10:43:36. | |
fix_reduce.pyc | File | 1315 bytes | January 08 2025 10:43:36. | |
fix_reduce.pyo | File | 1315 bytes | January 08 2025 10:43:36. | |
fix_renames.py | File | 2218 bytes | January 08 2025 10:43:36. | |
fix_renames.pyc | File | 2562 bytes | January 08 2025 10:43:35. | |
fix_renames.pyo | File | 2562 bytes | January 08 2025 10:43:35. | |
fix_repr.py | File | 614 bytes | January 08 2025 10:43:36. | |
fix_repr.pyc | File | 1069 bytes | January 08 2025 10:43:35. | |
fix_repr.pyo | File | 1069 bytes | January 08 2025 10:43:35. | |
fix_set_literal.py | File | 1699 bytes | January 08 2025 10:43:35. | |
fix_set_literal.pyc | File | 2056 bytes | January 08 2025 10:43:36. | |
fix_set_literal.pyo | File | 2056 bytes | January 08 2025 10:43:36. | |
fix_standarderror.py | File | 450 bytes | January 08 2025 10:43:36. | |
fix_standarderror.pyc | File | 906 bytes | January 08 2025 10:43:36. | |
fix_standarderror.pyo | File | 906 bytes | January 08 2025 10:43:36. | |
fix_sys_exc.py | File | 1039 bytes | January 08 2025 10:43:36. | |
fix_sys_exc.pyc | File | 1773 bytes | January 08 2025 10:43:36. | |
fix_sys_exc.pyo | File | 1773 bytes | January 08 2025 10:43:36. | |
fix_throw.py | File | 1586 bytes | January 08 2025 10:43:36. | |
fix_throw.pyc | File | 2049 bytes | January 08 2025 10:43:36. | |
fix_throw.pyo | File | 2049 bytes | January 08 2025 10:43:36. | |
fix_tuple_params.py | File | 5577 bytes | January 08 2025 10:43:36. | |
fix_tuple_params.pyc | File | 5588 bytes | January 08 2025 10:43:36. | |
fix_tuple_params.pyo | File | 5588 bytes | January 08 2025 10:43:36. | |
fix_types.py | File | 1809 bytes | January 08 2025 10:43:35. | |
fix_types.pyc | File | 2249 bytes | January 08 2025 10:43:36. | |
fix_types.pyo | File | 2249 bytes | January 08 2025 10:43:36. | |
fix_unicode.py | File | 1269 bytes | January 08 2025 10:43:36. | |
fix_unicode.pyc | File | 1784 bytes | January 08 2025 10:43:36. | |
fix_unicode.pyo | File | 1784 bytes | January 08 2025 10:43:36. | |
fix_urllib.py | File | 8385 bytes | January 08 2025 10:43:36. | |
fix_urllib.pyc | File | 7277 bytes | January 08 2025 10:43:35. | |
fix_urllib.pyo | File | 7277 bytes | January 08 2025 10:43:35. | |
fix_ws_comma.py | File | 1095 bytes | January 08 2025 10:43:36. | |
fix_ws_comma.pyc | File | 1435 bytes | January 08 2025 10:43:36. | |
fix_ws_comma.pyo | File | 1435 bytes | January 08 2025 10:43:36. | |
fix_xrange.py | File | 2699 bytes | January 08 2025 10:43:36. | |
fix_xrange.pyc | File | 3191 bytes | January 08 2025 10:43:36. | |
fix_xrange.pyo | File | 3191 bytes | January 08 2025 10:43:36. | |
fix_xreadlines.py | File | 690 bytes | January 08 2025 10:43:35. | |
fix_xreadlines.pyc | File | 1205 bytes | January 08 2025 10:43:36. | |
fix_xreadlines.pyo | File | 1205 bytes | January 08 2025 10:43:36. | |
fix_zip.py | File | 904 bytes | January 08 2025 10:43:36. | |
fix_zip.pyc | File | 1399 bytes | January 08 2025 10:43:36. | |
fix_zip.pyo | File | 1399 bytes | January 08 2025 10:43:36. |
"""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