python: reformat using black Ran cros format across the files, and manually adjusted docstrings and long lines. BUG=None TEST=CQ passes Change-Id: Ie6c4809cde62196505b018b297563dcbbe7b7e36 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/flashmap/+/4600613 Tested-by: Mike Frysinger <vapier@chromium.org> Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Commit-Queue: Mike Frysinger <vapier@chromium.org>
diff --git a/fmap.py b/fmap.py index 0ef9f40..52d9f9c 100755 --- a/fmap.py +++ b/fmap.py
@@ -1,6 +1,4 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# # Copyright 2010, Google Inc. # All rights reserved. # @@ -50,8 +48,6 @@ tuple of decoded area flags. """ -from __future__ import print_function - import argparse import copy import logging @@ -61,7 +57,7 @@ # constants imported from lib/fmap.h -FMAP_SIGNATURE = b'__FMAP__' +FMAP_SIGNATURE = b"__FMAP__" FMAP_VER_MAJOR = 1 FMAP_VER_MINOR_MIN = 0 FMAP_VER_MINOR_MAX = 1 @@ -69,232 +65,237 @@ FMAP_SEARCH_STRIDE = 4 FMAP_FLAGS = { - 'FMAP_AREA_STATIC': 1 << 0, - 'FMAP_AREA_COMPRESSED': 1 << 1, - 'FMAP_AREA_RO': 1 << 2, - 'FMAP_AREA_PRESERVE': 1 << 3, + "FMAP_AREA_STATIC": 1 << 0, + "FMAP_AREA_COMPRESSED": 1 << 1, + "FMAP_AREA_RO": 1 << 2, + "FMAP_AREA_PRESERVE": 1 << 3, } FMAP_HEADER_NAMES = ( - 'signature', - 'ver_major', - 'ver_minor', - 'base', - 'size', - 'name', - 'nareas', + "signature", + "ver_major", + "ver_minor", + "base", + "size", + "name", + "nareas", ) FMAP_AREA_NAMES = ( - 'offset', - 'size', - 'name', - 'flags', + "offset", + "size", + "name", + "flags", ) # format string -FMAP_HEADER_FORMAT = '<8sBBQI%dsH' % (FMAP_STRLEN) -FMAP_AREA_FORMAT = '<II%dsH' % (FMAP_STRLEN) +FMAP_HEADER_FORMAT = "<8sBBQI%dsH" % (FMAP_STRLEN) +FMAP_AREA_FORMAT = "<II%dsH" % (FMAP_STRLEN) def _fmap_decode_header(blob, offset): - """(internal) Decodes a FMAP header from blob by offset""" - header = {} - for (name, value) in zip(FMAP_HEADER_NAMES, - struct.unpack_from(FMAP_HEADER_FORMAT, - blob, - offset)): - header[name] = value + """(internal) Decodes a FMAP header from blob by offset""" + header = {} + for name, value in zip( + FMAP_HEADER_NAMES, struct.unpack_from(FMAP_HEADER_FORMAT, blob, offset) + ): + header[name] = value - if header['signature'] != FMAP_SIGNATURE: - raise struct.error('Invalid signature') - if (header['ver_major'] != FMAP_VER_MAJOR or - header['ver_minor'] < FMAP_VER_MINOR_MIN or - header['ver_minor'] > FMAP_VER_MINOR_MAX): - raise struct.error('Incompatible version') + if header["signature"] != FMAP_SIGNATURE: + raise struct.error("Invalid signature") + if ( + header["ver_major"] != FMAP_VER_MAJOR + or header["ver_minor"] < FMAP_VER_MINOR_MIN + or header["ver_minor"] > FMAP_VER_MINOR_MAX + ): + raise struct.error("Incompatible version") - # convert null-terminated names - header['name'] = header['name'].strip(b'\x00') + # convert null-terminated names + header["name"] = header["name"].strip(b"\x00") - # In Python 2, binary==string, so we don't need to convert. - if sys.version_info.major >= 3: - # Do the decode after verifying it to avoid decode errors due to corruption. - for name in FMAP_HEADER_NAMES: - if hasattr(header[name], 'decode'): - header[name] = header[name].decode('utf-8') + # In Python 2, binary==string, so we don't need to convert. + if sys.version_info.major >= 3: + # Decode after verifying to avoid errors due to corruption. + for name in FMAP_HEADER_NAMES: + if hasattr(header[name], "decode"): + header[name] = header[name].decode("utf-8") - return (header, struct.calcsize(FMAP_HEADER_FORMAT)) + return (header, struct.calcsize(FMAP_HEADER_FORMAT)) def _fmap_decode_area(blob, offset): - """(internal) Decodes a FMAP area record from blob by offset""" - area = {} - for (name, value) in zip(FMAP_AREA_NAMES, - struct.unpack_from(FMAP_AREA_FORMAT, blob, offset)): - area[name] = value - # convert null-terminated names - area['name'] = area['name'].strip(b'\x00') - # add a (readonly) readable FLAGS - area['FLAGS'] = _fmap_decode_area_flags(area['flags']) + """(internal) Decodes a FMAP area record from blob by offset""" + area = {} + for name, value in zip( + FMAP_AREA_NAMES, struct.unpack_from(FMAP_AREA_FORMAT, blob, offset) + ): + area[name] = value + # convert null-terminated names + area["name"] = area["name"].strip(b"\x00") + # add a (readonly) readable FLAGS + area["FLAGS"] = _fmap_decode_area_flags(area["flags"]) - # In Python 2, binary==string, so we don't need to convert. - if sys.version_info.major >= 3: - for name in FMAP_AREA_NAMES: - if hasattr(area[name], 'decode'): - area[name] = area[name].decode('utf-8') + # In Python 2, binary==string, so we don't need to convert. + if sys.version_info.major >= 3: + for name in FMAP_AREA_NAMES: + if hasattr(area[name], "decode"): + area[name] = area[name].decode("utf-8") - return (area, struct.calcsize(FMAP_AREA_FORMAT)) + return (area, struct.calcsize(FMAP_AREA_FORMAT)) def _fmap_decode_area_flags(area_flags): - """(internal) Decodes a FMAP flags property""" - # Since FMAP_FLAGS is a dict with arbitrary ordering, sort the list so the - # output is stable. Also sorting is nicer for humans. - return tuple(sorted(x for x in FMAP_FLAGS if area_flags & FMAP_FLAGS[x])) + """(internal) Decodes a FMAP flags property""" + # Since FMAP_FLAGS is a dict with arbitrary ordering, sort the list so the + # output is stable. Also sorting is nicer for humans. + return tuple(sorted(x for x in FMAP_FLAGS if area_flags & FMAP_FLAGS[x])) def _fmap_check_name(fmap, name): - """Checks if the FMAP structure has correct name. + """Checks if the FMAP structure has correct name. - Args: - fmap: A decoded FMAP structure. - name: A string to specify expected FMAP name. + Args: + fmap: A decoded FMAP structure. + name: A string to specify expected FMAP name. - Raises: - struct.error if the name does not match. - """ - if fmap['name'] != name: - raise struct.error('Incorrect FMAP (found: "%s", expected: "%s")' % - (fmap['name'], name)) + Raises: + struct.error if the name does not match. + """ + if fmap["name"] != name: + raise struct.error( + 'Incorrect FMAP (found: "%s", expected: "%s")' + % (fmap["name"], name) + ) def _fmap_search_header(blob, fmap_name=None): - """Searches FMAP headers in given blob. + """Searches FMAP headers in given blob. - Uses same logic from vboot_reference/host/lib/fmap.c. + Uses same logic from vboot_reference/host/lib/fmap.c. - Args: - blob: A string containing FMAP data. - fmap_name: A string to specify target FMAP name. + Args: + blob: A string containing FMAP data. + fmap_name: A string to specify target FMAP name. - Returns: - A tuple of (fmap, size, offset). - """ - lim = len(blob) - struct.calcsize(FMAP_HEADER_FORMAT) - align = FMAP_SEARCH_STRIDE + Returns: + A tuple of (fmap, size, offset). + """ + lim = len(blob) - struct.calcsize(FMAP_HEADER_FORMAT) + align = FMAP_SEARCH_STRIDE - # Search large alignments before small ones to find "right" FMAP. - while align <= lim: - align *= 2 + # Search large alignments before small ones to find "right" FMAP. + while align <= lim: + align *= 2 - while align >= FMAP_SEARCH_STRIDE: - for offset in range(align, lim + 1, align * 2): - if not blob.startswith(FMAP_SIGNATURE, offset): - continue - try: - (fmap, size) = _fmap_decode_header(blob, offset) - if fmap_name is not None: - _fmap_check_name(fmap, fmap_name) - return (fmap, size, offset) - except struct.error as e: - # Search for next FMAP candidate. - logging.debug('Continue searching FMAP due to exception %r', e) - align //= 2 - raise struct.error('No valid FMAP signatures.') + while align >= FMAP_SEARCH_STRIDE: + for offset in range(align, lim + 1, align * 2): + if not blob.startswith(FMAP_SIGNATURE, offset): + continue + try: + (fmap, size) = _fmap_decode_header(blob, offset) + if fmap_name is not None: + _fmap_check_name(fmap, fmap_name) + return (fmap, size, offset) + except struct.error as e: + # Search for next FMAP candidate. + logging.debug("Continue searching FMAP due to exception %r", e) + align //= 2 + raise struct.error("No valid FMAP signatures.") def fmap_decode(blob, offset=None, fmap_name=None): - """Decodes a blob to FMAP dictionary object. + """Decodes a blob to FMAP dictionary object. - Args: - blob: a binary data containing FMAP structure. - offset: starting offset of FMAP. When omitted, fmap_decode will search in - the blob. - fmap_name: A string to specify target FMAP name. - """ - fmap = {} + Args: + blob: a binary data containing FMAP structure. + offset: starting offset of FMAP. When omitted, fmap_decode will search + in the blob. + fmap_name: A string to specify target FMAP name. + """ + fmap = {} - if offset is None: - (fmap, size, offset) = _fmap_search_header(blob, fmap_name) - else: - (fmap, size) = _fmap_decode_header(blob, offset) - if fmap_name is not None: - _fmap_check_name(fmap, fmap_name) - fmap['areas'] = [] - offset = offset + size - for _ in range(fmap['nareas']): - (area, size) = _fmap_decode_area(blob, offset) + if offset is None: + (fmap, size, offset) = _fmap_search_header(blob, fmap_name) + else: + (fmap, size) = _fmap_decode_header(blob, offset) + if fmap_name is not None: + _fmap_check_name(fmap, fmap_name) + fmap["areas"] = [] offset = offset + size - fmap['areas'].append(area) - return fmap + for _ in range(fmap["nareas"]): + (area, size) = _fmap_decode_area(blob, offset) + offset = offset + size + fmap["areas"].append(area) + return fmap def _fmap_encode_header(obj): - """(internal) Encodes a FMAP header""" - # Convert strings to bytes. - obj = copy.deepcopy(obj) - for name in FMAP_HEADER_NAMES: - if hasattr(obj[name], 'encode'): - obj[name] = obj[name].encode('utf-8') + """(internal) Encodes a FMAP header""" + # Convert strings to bytes. + obj = copy.deepcopy(obj) + for name in FMAP_HEADER_NAMES: + if hasattr(obj[name], "encode"): + obj[name] = obj[name].encode("utf-8") - values = [obj[name] for name in FMAP_HEADER_NAMES] - return struct.pack(FMAP_HEADER_FORMAT, *values) + values = [obj[name] for name in FMAP_HEADER_NAMES] + return struct.pack(FMAP_HEADER_FORMAT, *values) def _fmap_encode_area(obj): - """(internal) Encodes a FMAP area entry""" - # Convert strings to bytes. - obj = copy.deepcopy(obj) - for name in FMAP_AREA_NAMES: - if hasattr(obj[name], 'encode'): - obj[name] = obj[name].encode('utf-8') + """(internal) Encodes a FMAP area entry""" + # Convert strings to bytes. + obj = copy.deepcopy(obj) + for name in FMAP_AREA_NAMES: + if hasattr(obj[name], "encode"): + obj[name] = obj[name].encode("utf-8") - values = [obj[name] for name in FMAP_AREA_NAMES] - return struct.pack(FMAP_AREA_FORMAT, *values) + values = [obj[name] for name in FMAP_AREA_NAMES] + return struct.pack(FMAP_AREA_FORMAT, *values) def fmap_encode(obj): - """Encodes a FMAP dictionary object to blob. + """Encodes a FMAP dictionary object to blob. - Args: - obj: a FMAP dictionary object. - """ - # fix up values - obj['nareas'] = len(obj['areas']) - # TODO(hungte) re-assign signature / version? - blob = _fmap_encode_header(obj) - for area in obj['areas']: - blob = blob + _fmap_encode_area(area) - return blob + Args: + obj: a FMAP dictionary object. + """ + # fix up values + obj["nareas"] = len(obj["areas"]) + # TODO(hungte) re-assign signature / version? + blob = _fmap_encode_header(obj) + for area in obj["areas"]: + blob = blob + _fmap_encode_area(area) + return blob def get_parser(): - """Return a command line parser.""" - parser = argparse.ArgumentParser( - description=__doc__, - formatter_class=argparse.RawTextHelpFormatter) - parser.add_argument('file', help='The file to decode & print.') - parser.add_argument('--raw', action='store_true', - help='Dump the object output for scripts.') - return parser + """Return a command line parser.""" + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.RawTextHelpFormatter + ) + parser.add_argument("file", help="The file to decode & print.") + parser.add_argument( + "--raw", action="store_true", help="Dump the object output for scripts." + ) + return parser def main(argv): - """Decode FMAP from supplied file and print.""" - parser = get_parser() - opts = parser.parse_args(argv) + """Decode FMAP from supplied file and print.""" + parser = get_parser() + opts = parser.parse_args(argv) - if not opts.raw: - print('Decoding FMAP from: %s' % opts.file) - blob = open(opts.file, 'rb').read() - obj = fmap_decode(blob) - if opts.raw: - print(obj) - else: - pp = pprint.PrettyPrinter(indent=2) - pp.pprint(obj) + if not opts.raw: + print("Decoding FMAP from: %s" % opts.file) + blob = open(opts.file, "rb").read() + obj = fmap_decode(blob) + if opts.raw: + print(obj) + else: + pp = pprint.PrettyPrinter(indent=2) + pp.pprint(obj) -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) +if __name__ == "__main__": + sys.exit(main(sys.argv[1:]))
diff --git a/fmap_unittest.py b/fmap_unittest.py index 91b346b..4f21f5a 100755 --- a/fmap_unittest.py +++ b/fmap_unittest.py
@@ -1,95 +1,91 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# # Copyright 2017 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Unit test for fmap module.""" -from __future__ import print_function - import struct import unittest import fmap + # Expected decoded fmap structure from bin/example.bin _EXAMPLE_BIN_FMAP = { - 'ver_major': 1, - 'ver_minor': 0, - 'name': 'example', - 'nareas': 4, - 'base': 0, - 'signature': '__FMAP__', - 'areas': [{ - 'FLAGS': ('FMAP_AREA_STATIC',), - 'size': 128, - 'flags': 1, - 'name': 'bootblock', - 'offset': 0 - }, { - 'FLAGS': ('FMAP_AREA_COMPRESSED', 'FMAP_AREA_STATIC'), - 'size': 128, - 'flags': 3, - 'name': 'normal', - 'offset': 128 - }, { - 'FLAGS': ('FMAP_AREA_COMPRESSED', 'FMAP_AREA_STATIC'), - 'size': 256, - 'flags': 3, - 'name': 'fallback', - 'offset': 256 - }, { - 'FLAGS': (), - 'size': 512, - 'flags': 0, - 'name': 'data', - 'offset': 512 - }], - 'size': 1024 + "ver_major": 1, + "ver_minor": 0, + "name": "example", + "nareas": 4, + "base": 0, + "signature": "__FMAP__", + "areas": [ + { + "FLAGS": ("FMAP_AREA_STATIC",), + "size": 128, + "flags": 1, + "name": "bootblock", + "offset": 0, + }, + { + "FLAGS": ("FMAP_AREA_COMPRESSED", "FMAP_AREA_STATIC"), + "size": 128, + "flags": 3, + "name": "normal", + "offset": 128, + }, + { + "FLAGS": ("FMAP_AREA_COMPRESSED", "FMAP_AREA_STATIC"), + "size": 256, + "flags": 3, + "name": "fallback", + "offset": 256, + }, + {"FLAGS": (), "size": 512, "flags": 0, "name": "data", "offset": 512}, + ], + "size": 1024, } class FmapTest(unittest.TestCase): - """Unit test for fmap module.""" + """Unit test for fmap module.""" - # All failures to diff the entire struct. - maxDiff = None + # All failures to diff the entire struct. + maxDiff = None - def setUp(self): - with open('bin/example.bin', 'rb') as f: - self.example_blob = f.read() + def setUp(self): + with open("bin/example.bin", "rb") as f: + self.example_blob = f.read() - def testDecode(self): - decoded = fmap.fmap_decode(self.example_blob) - self.assertEqual(_EXAMPLE_BIN_FMAP, decoded) + def testDecode(self): + decoded = fmap.fmap_decode(self.example_blob) + self.assertEqual(_EXAMPLE_BIN_FMAP, decoded) - def testDecodeWithOffset(self): - decoded = fmap.fmap_decode(self.example_blob, 512) - self.assertEqual(_EXAMPLE_BIN_FMAP, decoded) + def testDecodeWithOffset(self): + decoded = fmap.fmap_decode(self.example_blob, 512) + self.assertEqual(_EXAMPLE_BIN_FMAP, decoded) - def testDecodeWithName(self): - decoded = fmap.fmap_decode(self.example_blob, fmap_name='example') - self.assertEqual(_EXAMPLE_BIN_FMAP, decoded) - decoded = fmap.fmap_decode(self.example_blob, 512, 'example') - self.assertEqual(_EXAMPLE_BIN_FMAP, decoded) + def testDecodeWithName(self): + decoded = fmap.fmap_decode(self.example_blob, fmap_name="example") + self.assertEqual(_EXAMPLE_BIN_FMAP, decoded) + decoded = fmap.fmap_decode(self.example_blob, 512, "example") + self.assertEqual(_EXAMPLE_BIN_FMAP, decoded) - def testDecodeWithWrongName(self): - with self.assertRaises(struct.error): - fmap.fmap_decode(self.example_blob, fmap_name='banana') - with self.assertRaises(struct.error): - fmap.fmap_decode(self.example_blob, 512, 'banana') + def testDecodeWithWrongName(self): + with self.assertRaises(struct.error): + fmap.fmap_decode(self.example_blob, fmap_name="banana") + with self.assertRaises(struct.error): + fmap.fmap_decode(self.example_blob, 512, "banana") - def testDecodeWithWrongOffset(self): - with self.assertRaises(struct.error): - fmap.fmap_decode(self.example_blob, 42) + def testDecodeWithWrongOffset(self): + with self.assertRaises(struct.error): + fmap.fmap_decode(self.example_blob, 42) - def testEncode(self): - encoded = fmap.fmap_encode(_EXAMPLE_BIN_FMAP) - # example.bin contains other binary data besides the fmap - self.assertIn(encoded, self.example_blob) + def testEncode(self): + encoded = fmap.fmap_encode(_EXAMPLE_BIN_FMAP) + # example.bin contains other binary data besides the fmap + self.assertIn(encoded, self.example_blob) -if __name__ == '__main__': - unittest.main() +if __name__ == "__main__": + unittest.main()