Changelog¶
0.4.0 (2026-09-14)¶
Features¶
- a container-owned channel pool for the Dishka providers, shared by every upstream told to borrow it (ecdc4e2), closes #31
0.3.0 (2026-09-14)¶
Features¶
- Prometheus collector for the metrics protocol and Dishka providers for the client lifecycle (6dfdb44), closes #28
0.2.0 (2026-09-14)¶
Features¶
- settings models for the environment, mirroring the dataclasses (edffb5f)
0.1.2 (2026-09-07)¶
Bug Fixes¶
- an around_call teardown cannot change a call's outcome, and shares its setup's context (#20) (27b5c83)
0.1.1 (2026-09-06)¶
Bug Fixes¶
0.1.0 (2026-08-13)¶
Initial release of grpc-client-kit.
Features¶
ChannelPool— channels pooled by their full identity (target, security, credentials, options, compression, interceptor chain); idle connections parked by gRPC core, health verdicts flag pooled channelsGrpcClient— a cheap stub factory over the pool: picks a target, asks for the matching channel, hands out a stubGrpcClientFactory— maps one settings object onto the pool, balancer, health checker and per-target interceptor chains; eager settings validation, first-health-pass gate on entry, gracefulshutdown_graceon exit- Streaming-aware interceptors — one
around_callasync-generator seam expands into all fourgrpc.aioadapter classes, and write()-style streaming calls return promptly - Canonical chain: logging, tracing, metrics, timeout, deadline budget, wait-for-ready, retry, circuit breaker — ordered so every layer sees what it needs
- Timeout as the budget of the whole call, divided between retry attempts rather than granted afresh to each one
- Deadline-budget propagation (
deadlineextra) — outgoing calls trimmed to what the caller's request has left - Wait-for-ready policy per method, with an optional deadline requirement
- Retries with budget arithmetic, idempotency whitelists, jitter and retry metrics — and a warning when a native
retryPolicywould multiply them - Circuit breaker per method and per target — half-open trials, bounded LRU state with OPEN circuits pinned, rejections reported as
status="rejected", nevererror - Client-side load balancing — round-robin, random, weighted; health-aware narrowing and passive quarantine that takes a target out of rotation on the first real transport failure
- Active
grpc.health.v1monitoring (healthextra) on the checker's own channels, withwait_until_readyand per-service probing - Uniform observability — structured logs with sensitive-metadata redaction, Prometheus metrics, OpenTelemetry spans that parent correctly, all four RPC kinds covered
GrpcClientKitErrorfamily separating the kit's own refusals from server failures, while RPC-shaped ones remainAioRpcErrors- Connectivity tuning in seconds — keepalive and reconnect backoff, part of channel identity
- TLS by default; zero-dependency core (
grpcioonly) — every integration is an opt-in extra