Changelog
0.4.9
Added Python 3.14 support; pull request courtesy Thomas J. Fan @thomasjpfan
Dropped Python 3.8 and 3.9 support
Added support for a custom
DescriptorPoolfor the server reflection (#204); pull request courtesy Eric Daniels @edaniels
0.4.8
Fixed
authorityheader for the case when Channel’shostargument is the IPv6 addressFixed
Channelfor the case whensslmodule is not availableDropped Python 3.7 support
Added “wheel” packaging format
0.4.7
Added Python 3.12 support
0.4.6
BREAKING: Regenerated internal
*_pb2.pyfiles, they now requireprotobuf>=3.20.0Implemented support for
ssl.get_default_verify_paths()as a way to specify CA certificates to create secureChannelImplemented
Configuration.ssl_target_name_overrideoption
0.4.5
Fixed stubs generation for services with no rpc methods defined; pull request courtesy @xloem
0.4.4
Fixed deprecation warnings in tests
Fixed minor issue by allowing to receive frames after receiving
GOAWAYframe
0.4.3
BREAKING: Regenerated internal
*_pb2.pyfiles, they now requireprotobuf>=3.15.0Fixed mistake of subclassing
AbstractServeringrpclib.server.Server, this fixes mypy errorsFixed
ChannelForutility to properly cleanup resources without cryptic tracebacks (see #156)Added Python 3.10 support, dropped Python 3.6 support
Fixed TLS support in Python 3.10; pull request courtesy Scott Phillips @fundthmcalculus
Fixed setup.cfg to include generated .pyi files
0.4.2
BREAKING: Regenerated internal
*_pb2.pyfiles, they now requireprotobuf>=3.12.0Extended
SendTrailingMetadataandRecvTrailingMetadataevents with a status-related propertiesFixed deprecation warning related to
asyncio.wait()and Python 3.9Added support for the
--experimental_allow_proto3_optionalprotoc flag
0.4.1
Fixed
h2==4.0.0compatibility, fixed project dependencies
0.4.0
Fixed
Config._http2_max_pings_without_datavalue validation, it may be equal to 0 to sendPINGframes indefinitelyAdded context-manager protocol to the
ChannelclassBREAKING: Fixed metadata validation, this may cause an exceptions when you try to send invalid metadata values
Added certifi support, documented secure channels
Added
http2_connection_window_sizeandhttp2_stream_window_sizeconfig values, using 4 MiB as a default for both values instead of 64 KiB (HTTP/2 default)
0.3.2
Using
application/grpccontent type on the client-side to be compatible with faulty server implementations (e.g. googleapis.com)Renamed
--python_grpc_out=protoc option into--grpclib_python_out=to avoid misunderstanding and to follow grpc project namingAdded
(client|server):Stream.peerproperty and corresponding property in theRecvRequesteventAdded
server:Stream.user_agentproperty and corresponding property in theRecvRequesteventFixed
time.monotonic()usage in theServiceCheckclass for the case when monotonic time starts from zeroFixed
release_stream()function to not send data over a connection if connection is already closedImplement connection checks using PING frame (experimental); pull request courtesy Evhenii Popovych @a00920
Fixed code generation plugin when a path to proto file contains hyphens and/or
.protodevelfile extension; pull request courtesy 林玮 @linw1995Deprecated
loopargument in a public APIsExposed new import locations for the
StatusandGRPCErrorclasses:from grpclib import Status, GRPCErrorAdded
grpclib.config.Configurationclass to configure grpclib internals (experimental)Disabled unnecessary and expensive headers validation and normalization
0.3.1
Fixed code generation plugin to support nested message types in a service definitions
Restored
v1alphareflection protocol supportImplemented “grpc-status-details-bin” metadata support
0.3.0
Lowered log level for successfully handled errors on the server-side
Turned assert statement into
TypeErrorin theProtoCodec.encodemethodRaising proper
GRPCErrorinclient.Stream.__aexit__after receivingRST_STREAMframeLogging protocol errors, caused by the other side
Removed
v1alphareflection protocol,v1remainsAdded example of using
ProcessPoolExecutorfor CPU-intensive tasksCovered library and examples with type annotations, many thanks and credit to Callum Ryan @c-ryan747 for his work on #64
Fixed implicit trailers-only response for streaming calls
Added
endargument to theclient.Stream.send_requestmethodBREAKING: Removed deprecated
endargument from theserver.Stream.send_messagemethodFixed server to send content-type header in a trailers-only responses
Implemented support for the trailers-only empty response on the client-side
Made
loopargument optional in a user-facing apisAdded more checks to verify that streams are used accordingly to the gRPC protocol spec
BREAKING: Undocumented
Channel.requestmethod was changed in a backward-incompatible wayDropped Python 3.5 support for async generators and better typing support
BREAKING: Removed undocumented
grpclib.metadata.MetadataclassImplemented ability to listen for “events” from grpclib, see Events for more information
0.2.5
Fixed
protocol.Stream.send_datamethod to properly wait for a positive window size
0.2.4
Fixed and refactored protocol.Buffer class to properly acknowledge received data, which is critical for flow control mechanism. Also added logic to acknowledge all unread by user data before and after stream release.
0.2.3
Removed circular references and added tests to detect them
Generate
*_grpc.pystub files even if service definitions don’t exist in the .proto filesFixed bug in the Channel.request method, deadline argument was ignored
Implemented
graceful_exitcontext-manager
0.2.2
Logging StreamTerminatedError on the server-side if client resets stream
Improved health checks support
Stream methods now can be called concurrently
Fixed flow-control window change detection for the case when the other party relies on connection-level window with unlimited stream-level windows
Fixed PING frame support on the server-side
0.2.1
Added
Channel.__del__method to close unclosed connections and warn about themChanged user-agent header to reflect
grpcliband Python versionsAdded workaround for
h2, whenh2raisesStreamIDTooLowErrorinstead ofStreamClosedErrorFixed race condition in the
Channel, which leads to creation of more than one connectionFixed Python 3.5.1 compatibility
0.2.0
Fixed flow control functionality
Generate
*_grpc.pystub files only if service definitions exists in the .proto filesFixed possibility of the infinite loop when we reach max outbound streams limit and wait for a closed stream during
grpclib.protocol.Stream.send_request()method callAdded support for secure channels through SSL/TLS; pull request courtesy Michael P. Nitowski @mnito
Implemented Health service with additional functionality to help write health checks
Implemented
ChannelForhelper for writing functional testsAdded support for UNIX sockets; pull request courtesy Andy Kipp @kippandrew
Implemented server reflection protocol
BREAKING: Fixed metadata encoding. Previously grpclib were using utf-8 to encode metadata, and now grpclib encodes metadata according to the gRPC wire protocol specification: ascii for regular values and base64 for binary values
BREAKING: Fixed “grpc-message” header encoding: unicode string -> utf-8 -> percent-encoding (RFC 3986, ascii subset). Previously solely utf-8 were used, which now will fail to decode, if you send non-ascii characters
Implemented sending custom metadata from the server-side
0.1.1
Dropped protobuf requirement, now it’s optional
New feature to specify custom message serialization/deserialization codec
Fixed critical issue on the client-side with hanging coroutines in case of connection lost or stream reset
Replaced
async-timeoutdependency with custom utilities, refactored deadlines implementationImproved connection lost handling; pull request courtesy Michael Elsdörfer @miracle2k
Improved error responses and errors handling
Deprecated
endkeyword-only argument in thegrpclib.server.Stream.send_message()method on the server-side
0.1.0
Improved example to show all RPC method types; pull request courtesy @claws
[rc2] Fixed issues with sending large messages
[rc1] Initial release