From 4bd90d79d0a048166d6a74e7227b7c45901aeb89 Mon Sep 17 00:00:00 2001 From: Sean Vig Date: Sun, 13 Dec 2015 18:57:36 -0600 Subject: [PATCH] Use `with open(...) as ...:` context managers Instead of manually opening and closes file objects, use the context manager that will properly handle opening and closing files for us, even in the event of some error --- radio/util/addtr.py | 6 +- radio/util/bin2lbm.py | 24 ++-- radio/util/copyright.py | 15 +-- radio/util/font2png.py | 17 ++- radio/util/img2lbm.py | 253 ++++++++++++++++++------------------ radio/util/include-guard.py | 10 +- radio/util/luaexport.py | 158 +++++++++++----------- 7 files changed, 234 insertions(+), 249 deletions(-) diff --git a/radio/util/addtr.py b/radio/util/addtr.py index 9081a6235..d31ca3ad8 100755 --- a/radio/util/addtr.py +++ b/radio/util/addtr.py @@ -8,12 +8,14 @@ import glob def addLine(filename, newline, after): print(filename, newline) - lines = file(filename, 'r').readlines() + with open(filename, 'r') as f: + lines = f.readlines() for i, line in enumerate(lines): if after in line: lines.insert(i + 1, newline + '\n') break - file(filename, 'w').writelines(lines) + with open(filename, 'w') as f: + f.writelines(lines) def modifyTranslations(constant, translation, after): diff --git a/radio/util/bin2lbm.py b/radio/util/bin2lbm.py index c86e51c21..f34999b34 100755 --- a/radio/util/bin2lbm.py +++ b/radio/util/bin2lbm.py @@ -1,22 +1,20 @@ #!/usr/bin/env python +from __future__ import division import sys filename = sys.argv[1] fileout = sys.argv[2] -fr = open(filename, "rb") -fw = open(fileout, "w") +# Read entire file +with open(filename, "rb") as fr: + sts = fr.read() +# Parse into chunks of 16 bytes +sts = [sts[i * 16:(i + 1) * 16] for i in range(len(sts) // 16)] -st = fr.read(16) - -while st: - for b in st: - fw.write("0x%02x," % ord(b)) +with open(fileout, "w") as fw: + for st in sts: + for b in st: + fw.write("0x%02x," % ord(b)) + fw.write("\n") fw.write("\n") - st = fr.read(16) - -fw.write("\n") - -fw.close() -fr.close() diff --git a/radio/util/copyright.py b/radio/util/copyright.py index 4a2c0643f..13f25cb2b 100755 --- a/radio/util/copyright.py +++ b/radio/util/copyright.py @@ -13,9 +13,8 @@ def writeheader(filename, header): header should be a list of strings skip should be a regex """ - f = open(filename,"r") - inpt =f.readlines() - f.close() + with open(filename, "r") as f: + inpt = f.readlines() output = [] # comment out the next 3 lines if you don't wish to preserve shebangs @@ -36,18 +35,16 @@ def writeheader(filename, header): for line in inpt: output.append(line) try: - f = open(filename,'w') - f.writelines(output) - f.close() + with open(filename, 'w') as f: + f.writelines(output) print("added header to %s" % filename) except IOError as err: print("something went wrong trying to add header to %s: %s" % (filename, err)) def main(args=sys.argv): - headerfile = open(args[1]) - header = headerfile.readlines() - headerfile.close() + with open(args[1]) as headerfile: + header = headerfile.readlines() writeheader(args[2], header) diff --git a/radio/util/font2png.py b/radio/util/font2png.py index dd18d5875..302ed6659 100755 --- a/radio/util/font2png.py +++ b/radio/util/font2png.py @@ -88,15 +88,14 @@ def createFontBitmap(filename, fontname, fontsize, fontbold, foreground, backgro painter.end() image.save(filename + ".png") if coordsfile: - f = file(filename + ".specs", "w") - f.write("{ ") - f.write(",".join(str(tmp) for tmp in coords)) - if extraWidth: - for i in range(1, 14): - f.write(", %d" % (int(coords[-1]) + i * (extraWidth / 12))) - # f.write(file("fonts/extra_%dpx.specs" % fontsize).read()) - f.write(" }") - f.close() + with open(filename + ".specs", "w") as f: + f.write("{ ") + f.write(",".join(str(tmp) for tmp in coords)) + if extraWidth: + for i in range(1, 14): + f.write(", %d" % (int(coords[-1]) + i * (extraWidth / 12))) + # f.write(file("fonts/extra_%dpx.specs" % fontsize).read()) + f.write(" }") return coords if __name__ == "__main__": diff --git a/radio/util/img2lbm.py b/radio/util/img2lbm.py index 0e4d5f39e..56bc9e1ff 100755 --- a/radio/util/img2lbm.py +++ b/radio/util/img2lbm.py @@ -16,140 +16,139 @@ def writeSize(f, width, height): f.write("%d,%d,\n" % (width, height)) -f = open(sys.argv[2], "w") +with open(sys.argv[2], "w") as f: + lcdwidth = int(sys.argv[3]) -lcdwidth = int(sys.argv[3]) + if len(sys.argv) > 4: + what = sys.argv[4] + else: + for s in ("03x05", "04x06", "05x07", "08x10", "10x14", "22x38"): + if s in sys.argv[2]: + what = s + break -if len(sys.argv) > 4: - what = sys.argv[4] -else: - for s in ("03x05", "04x06", "05x07", "08x10", "10x14", "22x38"): - if s in sys.argv[2]: - what = s - break - -if what == "1bit": - rows = 1 - if len(sys.argv) > 5: - rows = int(sys.argv[5]) - writeSize(f, width, height // rows) - for y in range(0, height, 8): - for x in range(width): - value = 0 - for z in range(8): - if y + z < height and image.pixel(x, y + z) == Qt.qRgb(0, 0, 0): - value += 1 << z - f.write("0x%02x," % value) - f.write("\n") -elif what == "4/4/4/4": - colors = [] - f.write("%d,%d,\n" % (width, height)) - for y in range(height): - for x in range(width): - pixel = image.pixel(x, y) - f.write("0x%1x%1x%1x%1x," % (Qt.qAlpha(pixel) // 16, Qt.qRed(pixel) // 16, Qt.qGreen(pixel) // 16, Qt.qBlue(pixel) // 16)) - f.write("\n") -elif what == "5/6/5/8": - colors = [] - writeSize(f, width, height) - for y in range(height): - for x in range(width): - pixel = image.pixel(x, y) - val = ((Qt.qRed(pixel) >> 3) << 11) + ((Qt.qGreen(pixel) >> 2) << 5) + ((Qt.qBlue(pixel) >> 3) << 0) - # f.write("%d,%d,%d," % (val%256, val/256, Qt.qAlpha(pixel) >> 4)) - f.write("%d,%d," % (val % 256, val // 256)) - f.write("\n") -elif what == "4bits": - colors = [] - writeSize(f, width, height) - for y in range(0, height, 2): - for x in range(width): - value = 0xFF - gray1 = Qt.qGray(image.pixel(x, y)) - if y + 1 < height: - gray2 = Qt.qGray(image.pixel(x, y + 1)) - else: - gray2 = Qt.qRgb(255, 255, 255) - for i in range(4): - if (gray1 & (1 << (4 + i))): - value -= 1 << i - if (gray2 & (1 << (4 + i))): - value -= 1 << (4 + i) - f.write("0x%02x," % value) - f.write("\n") -elif what == "8bits": - colors = [] - writeSize(f, width, height) - for y in range(height): - for x in range(width): - value = Qt.qGray(image.pixel(x, y)) - value = 0x0f - (value >> 4) - f.write("0x%02x," % value) - f.write("\n") -elif what == "03x05": - for y in range(0, height, 5): - for x in range(width): - value = 0 - for z in range(5): - if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0): - value += 1 << z - f.write("0x%02x," % value) - f.write("\n") -elif what == "04x06": - for y in range(0, height, 7): - for x in range(width): - value = 0 - for z in range(7): - if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0): - value += 1 << z - if value == 0x7f: - value = 0xff - f.write("0x%02x," % value) - f.write("\n") -elif what == "05x07": - for y in range(0, height, 8): - for x in range(width): - value = 0 - for z in range(8): - if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0): - value += 1 << z - f.write("0x%02x," % value) - f.write("\n") -elif what == "08x10": - for y in range(0, height, 12): - for x in range(width): - skip = True - for l in range(0, 12, 8): + if what == "1bit": + rows = 1 + if len(sys.argv) > 5: + rows = int(sys.argv[5]) + writeSize(f, width, height // rows) + for y in range(0, height, 8): + for x in range(width): value = 0 for z in range(8): - if l + z < 12: - if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0): - value += 1 << z - else: - skip = False - if skip and l == 8: + if y + z < height and image.pixel(x, y + z) == Qt.qRgb(0, 0, 0): + value += 1 << z + f.write("0x%02x," % value) + f.write("\n") + elif what == "4/4/4/4": + colors = [] + f.write("%d,%d,\n" % (width, height)) + for y in range(height): + for x in range(width): + pixel = image.pixel(x, y) + f.write("0x%1x%1x%1x%1x," % (Qt.qAlpha(pixel) // 16, Qt.qRed(pixel) // 16, Qt.qGreen(pixel) // 16, Qt.qBlue(pixel) // 16)) + f.write("\n") + elif what == "5/6/5/8": + colors = [] + writeSize(f, width, height) + for y in range(height): + for x in range(width): + pixel = image.pixel(x, y) + val = ((Qt.qRed(pixel) >> 3) << 11) + ((Qt.qGreen(pixel) >> 2) << 5) + ((Qt.qBlue(pixel) >> 3) << 0) + # f.write("%d,%d,%d," % (val%256, val/256, Qt.qAlpha(pixel) >> 4)) + f.write("%d,%d," % (val % 256, val // 256)) + f.write("\n") + elif what == "4bits": + colors = [] + writeSize(f, width, height) + for y in range(0, height, 2): + for x in range(width): + value = 0xFF + gray1 = Qt.qGray(image.pixel(x, y)) + if y + 1 < height: + gray2 = Qt.qGray(image.pixel(x, y + 1)) + else: + gray2 = Qt.qRgb(255, 255, 255) + for i in range(4): + if (gray1 & (1 << (4 + i))): + value -= 1 << i + if (gray2 & (1 << (4 + i))): + value -= 1 << (4 + i) + f.write("0x%02x," % value) + f.write("\n") + elif what == "8bits": + colors = [] + writeSize(f, width, height) + for y in range(height): + for x in range(width): + value = Qt.qGray(image.pixel(x, y)) + value = 0x0f - (value >> 4) + f.write("0x%02x," % value) + f.write("\n") + elif what == "03x05": + for y in range(0, height, 5): + for x in range(width): + value = 0 + for z in range(5): + if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0): + value += 1 << z + f.write("0x%02x," % value) + f.write("\n") + elif what == "04x06": + for y in range(0, height, 7): + for x in range(width): + value = 0 + for z in range(7): + if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0): + value += 1 << z + if value == 0x7f: value = 0xff f.write("0x%02x," % value) - f.write("\n") -elif what == "10x14": - for y in range(0, height, 16): - for x in range(width): - for l in range(0, 16, 8): + f.write("\n") + elif what == "05x07": + for y in range(0, height, 8): + for x in range(width): value = 0 for z in range(8): - if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0): + if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0): value += 1 << z f.write("0x%02x," % value) - f.write("\n") -elif what == "22x38": - for y in range(0, height, 40): - for x in range(width): - for l in range(0, 40, 8): - value = 0 - for z in range(8): - if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0): - value += 1 << z - f.write("0x%02x," % value) - f.write("\n") -else: - print("wrong argument", sys.argv[4]) + f.write("\n") + elif what == "08x10": + for y in range(0, height, 12): + for x in range(width): + skip = True + for l in range(0, 12, 8): + value = 0 + for z in range(8): + if l + z < 12: + if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0): + value += 1 << z + else: + skip = False + if skip and l == 8: + value = 0xff + f.write("0x%02x," % value) + f.write("\n") + elif what == "10x14": + for y in range(0, height, 16): + for x in range(width): + for l in range(0, 16, 8): + value = 0 + for z in range(8): + if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0): + value += 1 << z + f.write("0x%02x," % value) + f.write("\n") + elif what == "22x38": + for y in range(0, height, 40): + for x in range(width): + for l in range(0, 40, 8): + value = 0 + for z in range(8): + if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0): + value += 1 << z + f.write("0x%02x," % value) + f.write("\n") + else: + print("wrong argument", sys.argv[4]) diff --git a/radio/util/include-guard.py b/radio/util/include-guard.py index 428edbfc0..5a60f6b27 100755 --- a/radio/util/include-guard.py +++ b/radio/util/include-guard.py @@ -6,9 +6,8 @@ import sys import os for filename in sys.argv[1:]: - f = file(filename, "r") - lines = f.readlines() - f.close() + with open(filename, "r") as f: + lines = f.readlines() newguard = "_" + os.path.basename(filename).upper().replace(".", "_") + "_" @@ -24,7 +23,6 @@ for filename in sys.argv[1:]: while not lines[end].strip().startswith("#endif"): end -= 1 lines[end] = "#endif // %s\n" % newguard - f = file(filename, "w") - f.write("".join(lines)) - f.close() + with open(filename, "w") as f: + f.write("".join(lines)) break diff --git a/radio/util/luaexport.py b/radio/util/luaexport.py index 512d7cf19..fdc86dd41 100755 --- a/radio/util/luaexport.py +++ b/radio/util/luaexport.py @@ -66,86 +66,80 @@ print("Output file %s" % outputFile) if docFile: print("Documentation file %s" % docFile) -np = open(inputFile, "r") +with open(inputFile, "r") as inp: + while True: + line = inp.readline() + if len(line) == 0: + break + line = line.strip('\r\n') + line = line.strip() + # print "line: %s" % line -while True: - line = inp.readline() - if len(line) == 0: - break - line = line.strip('\r\n') - line = line.strip() - # print "line: %s" % line + parts = line.split('LEXP') + # print parts + if len(parts) != 2: + print("Wrong line: %s" % line) + continue + cmd = 'LEXP' + parts[1] + cnst = parts[0].rstrip(', ') + if cnst.find('=') != -1: + # constant contains = + cnst = cnst.split('=')[0].strip() + # print "Found constant %s with command: %s" % (cnst, cmd) + try: + CONSTANT_VALUE = cnst + # if CONSTANT_VALUE in dups_cnst: + # print "WARNING: Duplicate CONSTANT_VALUE found: %s" % CONSTANT_VALUE + # warning = True + # continue + # dups_cnst.append(CONSTANT_VALUE) + # print cmd + eval(cmd) + except: + print("ERROR: problem with the definition: %s" % line) + traceback.print_exc() + error = True - parts = line.split('LEXP') - # print parts - if len(parts) != 2: - print("Wrong line: %s" % line) - continue - cmd = 'LEXP' + parts[1] - cnst = parts[0].rstrip(', ') - if cnst.find('=') != -1: - # constant contains = - cnst = cnst.split('=')[0].strip() - # print "Found constant %s with command: %s" % (cnst, cmd) - try: - CONSTANT_VALUE = cnst - # if CONSTANT_VALUE in dups_cnst: - # print "WARNING: Duplicate CONSTANT_VALUE found: %s" % CONSTANT_VALUE - # warning = True - # continue - # dups_cnst.append(CONSTANT_VALUE) - # print cmd - eval(cmd) - except: - print("ERROR: problem with the definition: %s" % line) - traceback.print_exc() - error = True +with open(outputFile, "w") as out: + out.write("//This file was generated by luaexport.py script on %s for OpenTX version %s\n\n\n" + % (time.asctime(), version)) -inp.close() + header = """ + struct LuaSingleField { + uint16_t id; + const char * name; + const char * desc; + }; -out = open(outputFile, "w") + struct LuaMultipleField { + uint16_t id; + const char * name; + const char * desc; + uint8_t count; + }; -out.write("//This file was generated by luaexport.py script on %s for OpenTX version %s\n\n\n" - % (time.asctime(), version)) + """ + out.write(header) -header = """ -struct LuaSingleField { - uint16_t id; - const char * name; - const char * desc; -}; + out.write(""" + // The list of Lua fields + // this aray is alphabetically sorted by the second field (name) + const LuaSingleField luaSingleFields[] = { + """) + exports.sort(key=lambda x: x[1]) # sort by name + data = [" {%s, \"%s\", \"%s\"}" % export for export in exports] + out.write(",\n".join(data)) + out.write("\n};\n\n") + print("Generated %d items in luaFields[]" % len(exports)) -struct LuaMultipleField { - uint16_t id; - const char * name; - const char * desc; - uint8_t count; -}; - -""" -out.write(header) - -out.write(""" -// The list of Lua fields -// this aray is alphabetically sorted by the second field (name) -const LuaSingleField luaSingleFields[] = { -""") -exports.sort(key=lambda x: x[1]) # sort by name -data = [" {%s, \"%s\", \"%s\"}" % export for export in exports] -out.write(",\n".join(data)) -out.write("\n};\n\n") -print("Generated %d items in luaFields[]" % len(exports)) - -out.write(""" -// The list of Lua fields that have a range of values -const LuaMultipleField luaMultipleFields[] = { -""") -data = [" {%s, \"%s\", \"%s\", %d}" % export for export in exports_multiple] -out.write(",\n".join(data)) -out.write("\n};\n\n") -print("Generated %d items in luaMultipleFields[]" % len(exports_multiple)) - -out.close() + out.write(""" + // The list of Lua fields that have a range of values + const LuaMultipleField luaMultipleFields[] = { + """) + data = [" {%s, \"%s\", \"%s\", %d}" % export for export in exports_multiple] + out.write(",\n".join(data)) + out.write("\n};\n\n") + print("Generated %d items in luaMultipleFields[]" % len(exports_multiple)) if docFile: # prepare fields @@ -160,16 +154,14 @@ if docFile: alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key[0])] all_exports.sort(key=alphanum_key) - out = open(docFile, "w") - out.write("Alphabetical list of Lua fields for OpenTX version %s\n\n\n" % version) - FIELD_NAME_WIDTH = 25 - out.write("Field name%sField description\n" % (' ' * (FIELD_NAME_WIDTH - len('Field name')))) - out.write("----------------------------------------------\n") - data = ["%s%s%s" % (name_, ' ' * (FIELD_NAME_WIDTH - len(name_)), desc_) for (name_, desc_) in all_exports] - out.write("\n".join(data)) - out.write("\n") - - out.close() + with open(docFile, "w") as out: + out.write("Alphabetical list of Lua fields for OpenTX version %s\n\n\n" % version) + FIELD_NAME_WIDTH = 25 + out.write("Field name%sField description\n" % (' ' * (FIELD_NAME_WIDTH - len('Field name')))) + out.write("----------------------------------------------\n") + data = ["%s%s%s" % (name_, ' ' * (FIELD_NAME_WIDTH - len(name_)), desc_) for (name_, desc_) in all_exports] + out.write("\n".join(data)) + out.write("\n") if warning: sys.exit(1)