From 63c7e4fcef938f1a1fc0ca41da83eb8ff96293da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 22 Feb 2018 17:11:41 +0100 Subject: [PATCH] Ported iteration over properties --- blender_asset_tracer/blendfile/__init__.py | 38 ++++----- blender_asset_tracer/blendfile/dna.py | 6 +- tests/blendfiles/basic_file.blend | Bin 486768 -> 499684 bytes tests/test_blendfile_dna.py | 6 +- tests/test_blendfile_loading.py | 89 ++++++++++++++++++--- 5 files changed, 104 insertions(+), 35 deletions(-) diff --git a/blender_asset_tracer/blendfile/__init__.py b/blender_asset_tracer/blendfile/__init__.py index 3c1c354..eb07fc2 100644 --- a/blender_asset_tracer/blendfile/__init__.py +++ b/blender_asset_tracer/blendfile/__init__.py @@ -340,7 +340,7 @@ class BlendFileBlock: path: dna.FieldPath, default=..., sdna_index_refine=None, - null_terminated: typing.Optional[bool] = None, + null_terminated=True, as_str=True, base_index=0, ) -> typing.Any: @@ -353,8 +353,8 @@ class BlendFileBlock: :param default: The value to return when the field does not exist. Use Ellipsis (the default value) to raise a KeyError instead. :param null_terminated: Only used when reading bytes or strings. When - True, stops reading at the first zero byte. Defaults to the same - value as `as_str`, as this is mostly used for string data. + True, stops reading at the first zero byte; be careful with this + when reading binary data. :param as_str: When True, automatically decode bytes to string (assumes UTF-8 encoding). """ @@ -383,7 +383,7 @@ class BlendFileBlock: path_root: dna.FieldPath = b'', default=..., sdna_index_refine=None, - null_terminated: typing.Optional[bool] = None, + null_terminated=True, as_str=True, base_index=0, ) -> typing.Iterator[typing.Tuple[bytes, typing.Any]]: @@ -417,10 +417,6 @@ class BlendFileBlock: yield from self.get_recursive_iter(f.name.name_only, path_full, default=default, null_terminated=null_terminated, as_str=as_str) - def items_recursive_iter(self): - for k in self.keys(): - yield from self.get_recursive_iter(k, as_str=False) - def get_data_hash(self): """ Generates a 'hash' that can be used instead of addr_old as block id, and that should be 'stable' across .blend @@ -434,7 +430,7 @@ class BlendFileBlock: self.file.header, self.file.handle, k).dna_name.is_pointer hsh = 1 - for k, v in self.items_recursive_iter(): + for k, v in self.items_recursive(): if not _is_pointer(self, k): hsh = zlib.adler32(str(v).encode(), hsh) return hsh @@ -486,27 +482,31 @@ class BlendFileBlock: # Python convenience API # dict like access - def __getitem__(self, item): - return self.get(item, as_str=False) + def __getitem__(self, path: dna.FieldPath): + return self.get(path, as_str=False) def __setitem__(self, item, value): self.set(item, value) - def keys(self): - return (f.dna_name.name_only for f in self.dna_type.fields) + def keys(self) -> typing.Iterator[bytes]: + """Generator, yields all field names of this block.""" + return (f.name.name_only for f in self.dna_type.fields) def values(self): for k in self.keys(): try: yield self[k] - except NotImplementedError as ex: - msg, dna_name, dna_type = ex.args - yield "<%s>" % dna_type.dna_type_id.decode('ascii') + except exceptions.NoReaderImplemented as ex: + yield '<%s>' % ex.dna_type.dna_type_id.decode('ascii') def items(self): for k in self.keys(): try: yield (k, self[k]) - except NotImplementedError as ex: - msg, dna_name, dna_type = ex.args - yield (k, "<%s>" % dna_type.dna_type_id.decode('ascii')) + except exceptions.NoReaderImplemented as ex: + yield (k, '<%s>' % ex.dna_type.dna_type_id.decode('ascii')) + + def items_recursive(self): + """Generator, yields (property path, property value) recursively for all properties.""" + for k in self.keys(): + yield from self.get_recursive_iter(k, as_str=False) diff --git a/blender_asset_tracer/blendfile/dna.py b/blender_asset_tracer/blendfile/dna.py index efcd489..84fb600 100644 --- a/blender_asset_tracer/blendfile/dna.py +++ b/blender_asset_tracer/blendfile/dna.py @@ -181,7 +181,7 @@ class Struct: fileobj: typing.BinaryIO, path: FieldPath, default=..., - null_terminated: typing.Optional[bool]=None, + null_terminated=True, as_str=True, ): """Read the value of the field from the blend file. @@ -196,8 +196,8 @@ class Struct: :param default: The value to return when the field does not exist. Use Ellipsis (the default value) to raise a KeyError instead. :param null_terminated: Only used when reading bytes or strings. When - True, stops reading at the first zero byte. Defaults to the same - value as `as_str`, as this is mostly used for string data. + True, stops reading at the first zero byte. Be careful with this + default when reading binary data. :param as_str: When True, automatically decode bytes to string (assumes UTF-8 encoding). """ diff --git a/tests/blendfiles/basic_file.blend b/tests/blendfiles/basic_file.blend index b573b7bec3c492bd6a7a9414728f971273d2cb4d..a4e4d5169e192ef4b8dcb36b6939c97a8b7803bf 100644 GIT binary patch delta 82964 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 delta 77475 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'), # not recursed into. + (b'adt', 0), + (b'material_type', 0), + (b'flag', 0), + (b'r', 0.8000000715255737), + (b'g', 0.03218378871679306), + (b'b', 0.36836329102516174), + (b'specr', 1.0)], + all_items[:8]) + + def test_keys(self): + ma = self.bf.code_index[b'MA'][0] + assert isinstance(ma, blendfile.BlendFileBlock) + + # We can't test all of them in a reliable way, but it shouldn't crash. + all_keys = list(ma.keys()) + + # And we can check the first few items. + self.assertEqual( + [b'id', b'adt', b'material_type', b'flag', b'r', b'g', b'b', b'specr'], + all_keys[:8]) + + def test_values(self): + ma = self.bf.code_index[b'MA'][0] + assert isinstance(ma, blendfile.BlendFileBlock) + + # We can't test all of them in a reliable way, but it shouldn't crash. + all_values = list(ma.values()) + + # And we can check the first few items. + self.assertEqual( + ['', + 0, + 0, + 0, + 0.8000000715255737, + 0.03218378871679306, + 0.36836329102516174, + 1.0], + all_values[:8]) + + def test_get_via_dict_interface(self): + ma = self.bf.code_index[b'MA'][0] + assert isinstance(ma, blendfile.BlendFileBlock) + self.assertEqual(0.8000000715255737, ma[b'r']) + + ob = self.bf.code_index[b'OB'][0] + assert isinstance(ob, blendfile.BlendFileBlock) + self.assertEqual('OBümlaut', ob[b'id', b'name'].decode())