def upload(self, content: bytes, *, progress_cb: Callable[[int], None], cancel_token=None) -> MappableFuture[str]: def _content_iter(): total_size = len(content) yield data_store_pb2.UploadRequest(info=data_store_pb2.UploadInfo( size=total_size)) for i in range(0, total_size, self.UPLOAD_CHUNK_SIZE): yield data_store_pb2.UploadRequest( content=content[i:i + self.UPLOAD_CHUNK_SIZE]) progress_cb( int( min(i + self.UPLOAD_CHUNK_SIZE, total_size) * 100 / total_size)) progress_cb(100) result = self._upload_client.Upload.future(_content_iter()) cancel_token.add_callback(result.cancel) return map_future(result, lambda res: res.id)
def test_result_mapping_concurrent_future(self): fut = Future() mapped_fut = map_future(fut, lambda v: v + 12) fut.set_result(30) assert isinstance(mapped_fut, MappableFuture) assert mapped_fut.result() == 42