コード例 #1
0
    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)
コード例 #2
0
    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