From 8b73b86734833927d9c2453822ee2755a91bf733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 22 Mar 2018 10:56:02 +0100 Subject: [PATCH] Reduce cyclomatic complexity of Struct.field_get() --- blender_asset_tracer/blendfile/dna.py | 34 ++++++++++++++++++--------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/blender_asset_tracer/blendfile/dna.py b/blender_asset_tracer/blendfile/dna.py index 7d3b142..8ebbb52 100644 --- a/blender_asset_tracer/blendfile/dna.py +++ b/blender_asset_tracer/blendfile/dna.py @@ -246,17 +246,7 @@ class Struct: if dna_name.is_pointer: return field, endian.read_pointer(fileobj, file_header.pointer_size) if dna_type.dna_type_id == b'char': - if field.size == 1: - # Single char, assume it's bitflag or int value, and not a string/bytes data... - return field, endian.read_char(fileobj) - if null_terminated or (null_terminated is None and as_str): - data = endian.read_bytes0(fileobj, dna_name.array_size) - else: - data = fileobj.read(dna_name.array_size) - - if as_str: - return field, data.decode('utf8') - return field, data + return field, self._field_get_char(file_header, fileobj, field, null_terminated, as_str) simple_readers = { b'int': endian.read_int, @@ -282,6 +272,28 @@ class Struct: return field, [simple_reader(fileobj) for _ in range(dna_name.array_size)] return field, simple_reader(fileobj) + def _field_get_char(self, + file_header: header.BlendFileHeader, + fileobj: typing.IO[bytes], + field: 'Field', + null_terminated: typing.Optional[bool], + as_str: bool) -> typing.Any: + dna_name = field.name + endian = file_header.endian + + if field.size == 1: + # Single char, assume it's bitflag or int value, and not a string/bytes data... + return endian.read_char(fileobj) + + if null_terminated or (null_terminated is None and as_str): + data = endian.read_bytes0(fileobj, dna_name.array_size) + else: + data = fileobj.read(dna_name.array_size) + + if as_str: + return data.decode('utf8') + return data + def field_set(self, file_header: header.BlendFileHeader, fileobj: typing.IO[bytes],