Releases: Query-farm/vgi-rpc-python
v0.21.0
Highlights
Raw-TCP socket transport
New TcpTransport / serve_tcp / tcp_connect — the network analog of the existing Unix-socket transport, speaking the same raw Arrow-IPC framing without the HTTP envelope. Loopback-only by default (127.0.0.1); no auth/TLS, so use HTTP for untrusted networks.
run_server --tcp [HOST:]PORTworker flag, emitting aTCP:<host>:<port>discovery line.TransportKind.TCP; workers seectx.kind == TCP.- Cross-language conformance:
vgi-rpc-test --tcpandvgi-rpc-conformance --tcp.
Wire/HTTP intermediary helpers
- Public framing helpers (
read_request/write_request/build_error_stream). find_state_tokento extract the stream-state continuation token.- Intermediary helpers for protocol-version, unary-result, and content-encoding; public
__upload_url__wire contract. HEAD /healthso capability discovery doesn't degrade.
Full changelog: v0.20.6...v0.21.0
v0.20.6
Ships the aiohttp security bump unblocked by the test-mock migration. No library code changes — the package surface is unchanged from 0.20.5.
Security
- The
externalextra now requires aiohttp>=3.14.1, picking up a batch of client-side fixes: CVE-2026-34993, -47265, and the -502xx / -542xx series (11 advisories).
Internal
- Test suite migrated from
aioresponses(unmaintained; broke on aiohttp 3.14's requiredClientResponse.stream_writerkwarg) toaiointercept, which is what made lifting the<3.14cap possible (#22).
v0.20.5
Maintenance release rolling up the post-0.20.4 merges. No library code changes — the package surface is unchanged from 0.20.4.
Dependencies
- cryptography 48.0.0 → 49.0.0 (#17)
- pywin32 311 → 312 (#18)
- github-actions group: actions/checkout v7, astral-sh/setup-uv v8.2, codecov/codecov-action v7 (#15)
- Hold aiohttp
<3.14(aioresponses 0.7.8 is incompatible with 3.14's newClientResponse.stream_writerkwarg) and add a Dependabot ignore so it isn't re-proposed (#20)
Build / CI
- Run pydoclint isolated via
uvxso itsdocstring-parser-forkdependency no longer collides with the canonicaldocstring-parserin the project venv. The collision made the lint gate non-deterministic across unrelated dependency bumps; it is now stable (#21)
v0.20.4
Fix: shared-memory request-batch resolution
Fixes a cross-language shm transport bug where a client (the C++ vgi extension) routes a large single-row request batch through the shm side channel: the worker previously only resolved external-location pointers, so such requests tripped Expected 1 row in request batch, got 0 (seen on accumulate/* and table_buffering/* over shm).
_read_requestnow resolves shm-pointer request batches (static segment, connection-cached segment, or one attached from the request's own metadata).- New per-connection
_ConnectionShmcache: the client names its segment once and reuses it for later offset-only batches; the worker attaches on first sight and holds it for the connection lifetime. - Responses route through shm only for exchanges the client signalled as shm (the C++ client resolves shm responses only for table_buffering_/aggregate methods), so inline control responses (bind, catalog_, transaction_*) are no longer wrongly shm-routed.
Includes a cross-language regression test.
🤖 Generated with Claude Code
v0.20.3
Hypothesis property-based tests (test-only)
Adds property-based testing infrastructure (dev-only hypothesis dependency). No library code changes — the published wheel is functionally identical to v0.20.2.
- Round-trip coverage (
tests/test_property_roundtrip.py): auto-discovers everyArrowSerializableDataclasssubclass (51 today) and assertsdeserialize(serialize(x)) == x, building a strategy per class from its annotations + resolvedARROW_SCHEMAso integer widths, decimal scale, and temporal units are respected. New dataclasses are covered automatically; unmodelled field shapes skip with a reason. - shm allocator stateful machine (
tests/test_property_shm.py): aRuleBasedStateMachinedrives randomallocate/freesequences against the first-fitShmAllocatorplus a Python model, asserting the safety invariants every step — no overlap, in-bounds, sorted, header count consistent, and "allocate returns None only when no gap fits."
Both run in ~2.5s at committed settings and pass mypy strict + ruff.
Full diff: v0.20.2...v0.20.3
v0.20.2
Zero-suppression pydoclint gate
Every previously-frozen docstring violation is now fixed, so the pydoclint gate runs fully clean — no baseline, no per-code suppressions. New violations fail CI immediately.
Docstrings completed
- DOC101/103 —
Args:added to 17 private helpers, dunders, and exception__init__s. - DOC201 —
Returns:added to 16 value-returning functions/methods, including theStreamclient-side stubs and conformance Protocol producers. - DOC602/603/606 —
MessageClassVarconstants documented in the class docstring, data fields moved to__init__Args:;HttpTransientError.__init__documented. - DOC304 —
WorkerPoolconstructor docs moved from the class docstring to__init__.
Config
- Enabled
allow_init_docstring(validate__init__Args:on the method), matching vgi-python's current config. - Removed the baseline and the non-functional
ignorekey (pydoclint 0.8.x has no per-code ignore).
No public API changes — docstrings, annotations, and lint config only.
Full diff: v0.20.1...v0.20.2
v0.20.1
Tooling: pydoclint docstring gate
Adopts pydoclint with the same Google-style configuration as vgi-python, enforcing that documented arguments/attributes stay in sync with the code. Now runs in the CI lint job and is step 3 of the pre-commit checklist.
Docstring fixes (reviewed, not blindly frozen)
- Corrected genuine drift in
HttpServerCapabilities,RpcMethodInfo, andServiceDescription(missing / mis-ordered attributes). - Documented
Argson the public surface:RpcServer.serve_one,StreamSession.exchange,ShmAllocator.free,OutputCollector.merge_data_metadata, and thefmt_*debug helpers. - Added class-level annotations to
HttpTransientError(status_code/retry_after), resolving the attribute mismatch and improving type visibility.
No public API changes — docstrings, annotations, and dev tooling only.
Full diff: v0.20.0...v0.20.1
v0.20.0
Full Changelog: v0.19.1...v0.20.0
v0.19.1
Full Changelog: v0.19.0...v0.19.1
v0.19.0
Full Changelog: v0.18.3...v0.19.0