Esempio n. 1
0
 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")
Esempio n. 2
0
    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")