def _decode_soas(buffer: bytes, index: int) -> Tuple[List[Soa], int]: path: List[Union[int, str]] = ["unknown"] name = "unknown" soas: List[Soa] = [] try: # see soa_buffers() aos_count, index = decode_int(buffer, index) for _ in range(aos_count): path_string, index = decode_string(buffer, index) path = json.loads(path_string) logger.info("%s: %s ", "build_soa", path) element_count, index = decode_int(buffer, index) members = [] for _ in range(element_count): name, index = decode_string(buffer, index) array_, index = decode_py_array(buffer, index) members.append((name, array_), ) soas.append(Soa(path, members), ) except Exception: logger.error(f"Exception while decoding for {path} {name}") for line in traceback.format_exc().splitlines(): logger.error(line) logger.error("ignored") return [] return soas, index
def decode_arrays(buffer: bytes, index) -> Tuple[ArrayGroups, int]: array_group_count, index = decode_int(buffer, index) if array_group_count == 0: return {}, index array_groups: ArrayGroups = {} for _groups_index in range(array_group_count): array_group_name, index = decode_string(buffer, index) array_group_length, index = decode_int(buffer, index) array_group: ArrayGroup = [] for _array_index in range(array_group_length): key_string, index = decode_string(buffer, index) key = json.loads(key_string) array_, index = decode_py_array(buffer, index) array_group.append((key, array_), ) array_groups[array_group_name] = array_group return array_groups, index
def _decode_and_build_soas(uuid: Uuid, buffer: bytes, index: int): path: List[Union[int, str]] = ["unknown"] name = "unknown" try: # see soa_buffers() aos_count, index = decode_int(buffer, index) for _ in range(aos_count): path_string, index = decode_string(buffer, index) path = json.loads(path_string) logger.info("%s: %s %s", "build_soa", uuid, path) element_count, index = decode_int(buffer, index) soas = [] for _ in range(element_count): name, index = decode_string(buffer, index) array, index = decode_py_array(buffer, index) soas.append((name, array)) share_data.bpy_data_proxy.update_soa(uuid, path, soas) except Exception: logger.error(f"Exception during build_soa for {uuid} {path} {name}") for line in traceback.format_exc().splitlines(): logger.error(line) logger.error("ignored")