diff --git a/dev/scripts/autoFixer.py b/dev/scripts/autoFixer.py new file mode 100644 index 0000000000000000000000000000000000000000..b9d00e4912cd496be860e5ed0de176d52a3645fe --- /dev/null +++ b/dev/scripts/autoFixer.py @@ -0,0 +1,65 @@ +#! /usr/bin/env python + +"Process python files to improve python 3 migration" + +import os +import sys +import getopt +# Modified glob version to support ** +import glob2 +import re + +def main(): + tabsize = 8 + try: + opts, args = getopt.getopt(sys.argv[1:], "t:") + if not args: + raise getopt.error, "At least one file argument required" + except getopt.error, msg: + print msg + print "usage:", sys.argv[0], "files ..." + return + + files = [] + for arg in args: + files.extend(glob2.glob(arg)) + + for filename in files: + if "autoFixer" in filename or "build" in filename: + continue + process(filename, tabsize) + +# Utils, regexes +r1_ = r'\"(([^\"\n]|\\\")*(\\x|\\0)([^\"\n]|\\\")*)\"' +r2_ = r"\'(([^\'\n]|\\\')*(\\x|\\0)([^\'\n]|\\\')*)\'" +#r3_ = r"(?<![\"'\\])(['\"])\1([^\"'])" + +r1_r = r'b"\1"' +r2_r = r"b'\1'" +#r3_r = r"b\1\1\2" + +def process(filename, tabsize): + try: + f = open(filename) + text = f.read() + f.close() + except IOError, msg: + print "%r: I/O error: %s" % (filename, msg) + return + # Remove tabs + newtext = text.expandtabs(tabsize) + # Auto-detect bytes with "\x...", "\0..." + newtext = re.sub(r1_, r1_r, newtext) + # Auto-detect bytes with '\x...', '\0...' + newtext = re.sub(r2_, r2_r, newtext) + # Auto-detect bytes with '', "" but not """, ''' + #newtext = re.sub(r3_, r3_r, newtext) + if newtext == text: + return + f = open(filename, "w") + f.write(newtext) + f.close() + print filename + +if __name__ == '__main__': + main()