def __iter__(self): if self.is_array: for i in range(core.BNMetadataSize(self.handle)): yield Metadata( handle=core.BNMetadataGetForIndex(self.handle, i)).value elif self.is_dict: result = core.BNMetadataGetValueStore(self.handle) try: for i in range(result.contents.size): if isinstance(result.contents.keys[i], bytes): yield str(pyNativeStr(result.contents.keys[i])) else: yield result.contents.keys[i] finally: core.BNFreeMetadataValueStore(result) else: raise Exception("Metadata object doesn't support iteration")
def __getitem__(self, value): if self.is_array: if not isinstance(value, int): raise ValueError( "Metadata object only supports integers for indexing") if value >= len(self): raise IndexError("Index value out of range") return Metadata( handle=core.BNMetadataGetForIndex(self.handle, value)).value if self.is_dict: if not isinstance(value, str): raise ValueError( "Metadata object only supports strings for indexing") handle = core.BNMetadataGetForKey(self.handle, value) if handle is None: raise KeyError(value) return Metadata(handle=handle).value raise NotImplementedError("Metadata object doesn't support indexing")