From 05d6f05f3a55e5758b4377daa7e11998ed32835b Mon Sep 17 00:00:00 2001 From: Sahas Subramanian Date: Tue, 29 Oct 2024 14:26:14 +0100 Subject: [PATCH] Clear release notes Signed-off-by: Sahas Subramanian --- RELEASE_NOTES.md | 44 ++++++-------------------------------------- 1 file changed, 6 insertions(+), 38 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index d0cc18f..4bd60ba 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -2,48 +2,16 @@ ## Summary -This release improves the `BaseApiClient` interface and introduces HTTP2 keep-alive, among other changes. + ## Upgrading -- `GrpcStreamBroadcaster` now takes a `AsyncIterable` instead of a `AsyncIterator` as the `stream_method`. This is to match the type of streaming methods generated by `grpc`, so no conversion to an `AsyncIterator` is needed. + -- `GrpcStreamBroadcaster` no longer tries to reconnect when a server closes a connection. This behaviour can be overridden by passing `retry_on_exhausted_stream=True` when constructing `GrpcStreamBroadcaster` instances. - -- gRPC URLs don't have a default port anymore, unless a default is set via `ChannelOptions`. If you want to set a default port for URLs, please pass custom `ChannelOptions` as `defaults` to `parse_grpc_uri` or as `channel_defaults` to `BaseApiClient`. - -* The `ExponentialBackoff` and `LinearBackoff` classes now require keyword arguments for their constructor. This change was made to make the classes easier to use and to avoid confusion with the order of the arguments. - -- HTTP2 keep-alive is now enabled by default, with an interval of 60 seconds between pings, and a 20 second timeout for responses from the service. These values are configurable and may be updated based on specific requirements. - -* The `BaseApiClient` class is not generic anymore, and doesn't take a function to create the stub. Instead, subclasses should create their own stub right after calling the parent constructor. This enables subclasses to cast the stub to the generated `XxxAsyncStub` class, which have proper `async` type hints. To convert you client: - - ```python - # Old - from my_service_pb2_grpc import MyServiceStub - class MyApiClient(BaseApiClient[MyServiceStub]): - def __init__(self, server_url: str, *, ...) -> None: - super().__init__(server_url, MyServiceStub, ...) - ... - - # New - from typing import cast - from my_service_pb2_grpc import MyServiceStub, MyServiceAsyncStub - class MyApiClient(BaseApiClient): - def __init__(self, server_url: str, *, ...) -> None: - super().__init__(server_url, connect=connect) - self._stub = cast(MyServiceAsyncStub, MyServiceStub(self.channel)) - ... - - @property - def stub(self) -> MyServiceAsyncStub: - if self._channel is None: - raise ClientNotConnected(server_url=self.server_url, operation="stub") - return self._stub - ``` +## New Features - After this, you should be able to remove a lot of `cast`s or `type: ignore` from the code when calling the stub `async` methods. + -## New Features +## Bug Fixes -- Added support for HTTP2 keep-alive. +