OXIESEC PANEL
- Current Dir:
/
/
usr
/
lib64
/
python2.7
/
lib2to3
/
fixes
Server IP: 2a02:4780:11:1084:0:327f:3464:10
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
02/16/2024 08:50:43 PM
rwxr-xr-x
📄
__init__.py
47 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
__init__.pyc
133 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
__init__.pyo
133 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_apply.py
2.38 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_apply.pyc
2.04 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_apply.pyo
2 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_asserts.py
984 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_asserts.pyc
1.52 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_asserts.pyo
1.52 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_basestring.py
321 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_basestring.pyc
807 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_basestring.pyo
807 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_buffer.py
591 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_buffer.pyc
964 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_buffer.pyo
964 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_dict.py
3.73 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_dict.pyc
3.68 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_dict.pyo
3.56 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_except.py
3.27 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_except.pyc
2.94 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_except.pyo
2.94 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_exec.py
1002 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_exec.pyc
1.4 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_exec.pyo
1.37 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_execfile.py
2.01 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_execfile.pyc
2.06 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_execfile.pyo
2.03 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_exitfunc.py
2.44 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_exitfunc.pyc
2.69 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_exitfunc.pyo
2.69 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_filter.py
2.06 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_filter.pyc
2.22 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_filter.pyo
2.22 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_funcattrs.py
645 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_funcattrs.pyc
1.1 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_funcattrs.pyo
1.1 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_future.py
547 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_future.pyc
933 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_future.pyo
933 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_getcwdu.py
452 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_getcwdu.pyc
940 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_getcwdu.pyo
940 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_has_key.py
3.15 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_has_key.pyc
3.12 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_has_key.pyo
3.09 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_idioms.py
4.77 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_idioms.pyc
4.43 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_idioms.pyo
4.33 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_import.py
3.18 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_import.pyc
3.18 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_import.pyo
3.18 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_imports.py
5.56 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_imports.pyc
5.25 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_imports.pyo
5.25 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_imports2.py
289 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_imports2.pyc
634 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_imports2.pyo
634 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_input.py
710 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_input.pyc
1.12 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_input.pyo
1.12 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_intern.py
1.82 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_intern.pyc
1.75 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_intern.pyo
1.75 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_isinstance.py
1.57 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_isinstance.pyc
1.81 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_isinstance.pyo
1.81 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_itertools.py
1.51 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_itertools.pyc
1.76 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_itertools.pyo
1.76 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_itertools_imports.py
2.04 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_itertools_imports.pyc
1.98 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_itertools_imports.pyo
1.94 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_long.py
477 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_long.pyc
855 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_long.pyo
855 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_map.py
2.99 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_map.pyc
2.98 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_map.pyo
2.98 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_metaclass.py
8.02 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_metaclass.pyc
6.45 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_metaclass.pyo
6.4 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_methodattrs.py
615 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_methodattrs.pyc
1.13 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_methodattrs.pyo
1.13 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_ne.py
573 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_ne.pyc
1001 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_ne.pyo
1001 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_next.py
3.11 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_next.pyc
3.47 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_next.pyo
3.44 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_nonzero.py
598 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_nonzero.pyc
1.07 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_nonzero.pyo
1.07 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_numliterals.py
773 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_numliterals.pyc
1.24 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_numliterals.pyo
1.24 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_operator.py
3.39 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_operator.pyc
5.03 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_operator.pyo
5.03 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_paren.py
1.2 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_paren.pyc
1.52 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_paren.pyo
1.52 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_print.py
2.8 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_print.pyc
2.68 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_print.pyo
2.58 KB
11/15/2023 03:01:20 PM
rw-r--r--
📄
fix_raise.py
2.87 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_raise.pyc
2.45 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_raise.pyo
2.45 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_raw_input.py
455 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_raw_input.pyc
950 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_raw_input.pyo
950 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_reduce.py
839 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_reduce.pyc
1.25 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_reduce.pyo
1.25 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_renames.py
2.17 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_renames.pyc
2.41 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_renames.pyo
2.41 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_repr.py
614 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_repr.pyc
1.01 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_repr.pyo
1.01 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_set_literal.py
1.66 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_set_literal.pyc
1.96 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_set_literal.pyo
1.96 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_standarderror.py
450 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_standarderror.pyc
867 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_standarderror.pyo
867 bytes
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_sys_exc.py
1.01 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_sys_exc.pyc
1.68 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_sys_exc.pyo
1.68 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_throw.py
1.55 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_throw.pyc
1.96 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_throw.pyo
1.96 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_tuple_params.py
5.45 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_tuple_params.pyc
5.33 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_tuple_params.pyo
5.33 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_types.py
1.77 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_types.pyc
2.16 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_types.pyo
2.16 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_unicode.py
1.24 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_unicode.pyc
1.69 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_unicode.pyo
1.69 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_urllib.py
8.19 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_urllib.pyc
6.99 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_urllib.pyo
6.99 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_ws_comma.py
1.07 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_ws_comma.pyc
1.36 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_ws_comma.pyo
1.36 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_xrange.py
2.64 KB
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_xrange.pyc
3.01 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_xrange.pyo
3.01 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_xreadlines.py
690 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_xreadlines.pyc
1.14 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_xreadlines.pyo
1.14 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_zip.py
904 bytes
11/15/2023 03:01:12 PM
rw-r--r--
📄
fix_zip.pyc
1.33 KB
11/15/2023 03:01:23 PM
rw-r--r--
📄
fix_zip.pyo
1.33 KB
11/15/2023 03:01:23 PM
rw-r--r--
Editing: fix_metaclass.py
Close
"""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'))