Repository navigation
Releases: Query-farm/vgi-python
Release list
v0.48.0
Publishes the Python SDK for the successor VGI wire contract, vgi.v3 / 3.0.0.
- Canonical catalog metadata now covers nested schema paths, nullable default schemas, column expressions/comments/tags, macro overload families, typed constraints and indexes, dependencies, and view/security metadata.
- Adds typed prepared-query contracts, explicit statements through existing query calls, structured scalar projection negotiation, and bind-scoped scan repeatability.
- Requires published
vgi-rpc>=0.52.3for complete outer IPC framing. Includes the one-shot writable-scan continuation fix. - Keeps the existing Arrow C++ generator as the default and adds an explicit Nanoarrow backend for the DuckDB 2.0 adapter. Nested Go schema output now reproduces gofmt without changing wire shapes or hashes.
- Completes strict typing for the new protocol tests and reference providers, preserving malformed-input and absent-object tests.
Compatibility: requires a native VGI build that speaks vgi.v3 / 3.0.0; older vgi.v2 extensions are incompatible. The protocol is qualified with the DuckDB 1.5 adapter and the DuckDB 2.0/Nanoarrow candidate. Automatic whole-query pushdown remains separate adapter work.
Validation: Ruff, strict mypy for runtime and tests, package builds and metadata checks passed. The full Python suite qualified 4,609 passing tests with 192 expected/environment skips; four initial failures were resolved by one stub-only cast correction and an exact Rust checkout path, then targeted tests passed. Existing full native SDK language matrices and canonical HTTP qualification cover the runtime changes.
The core wheel continues to bundle import-only fixture modules. The separate vgi-fixtures wheel is built and checked, while its PyPI publication remains disabled because that project has not been provisioned.
v0.47.0
Continued table-in-out output and input_rows_per_call. This release requires the vgi DuckDB extension at or after fc3e08f (Query-farm/vgi main, published to the haybarn community channel as 454fefa). It retains wire contract 2.2.0 under vgi.v2; the regenerated FunctionInfo changes the catalog contract hash.
- A table-in-out function can answer one input batch with several replies: it emits each reply but the last with
more=True(vgi.status: HAVE_MORE_OUTPUT), and the framework callsresume()for each continuation tick the client sends (a zero-row batch of the input schema carryingvgi.status: CONTINUE). The resume position lives in the function's serializableTState, so over HTTP it rides the stream's state token: no sticky session and no vgi-rpc change. Meta.input_rows_per_call(RowTransformFunctiononly) caps the input rows one worker call receives and is advertised as the new nullableFunctionInfo.input_rows_per_call; the client splits each chunk into calls of at most that many rows.- Framework refusals: while output is pending a tick is the only valid input, a tick is valid only then, cache control may only ride an input's first reply, and
emit(more=True)is refused outside a table-in-out exchange. A table-in-out turn that emits no batch is refused (vgi-rpc'sOutputCollector.validate(), "No data batch was emitted"), so no turn can leave the client waiting. At registration, a function that overridesresume()must declare a serializableTStateand may not setmax_workers = 1. _FilteringOutputCollectorfiltersparent_rowswith the same mask as the batch, keeping provenance aligned when auto-applied filters drop rows.- Standard fixtures every SDK implements:
blended_paged,blended_slicedandpaged_explode(withfail_on_page,revalidate,not_modified_moreandcache_ttl);examples/paged_api_worker.pypages a fake cursor API one page per reply. - Reporting protocol contracts: bounded summary discovery, streamed checks and histories, scoped enterprise ownership, portable source identities and asynchronous preview contracts, with the reporting reference generator.
regen_generatedgains--onlyand--rootto regenerate one SDK checkout.
Validation: CI and the integration suite passed on 8889b81; wheel/sdist metadata checks passed. Uses published vgi-rpc>=0.52.0.
The companion fixture wheel and container images are versioned 0.47.0. Standalone vgi-fixtures PyPI publication remains disabled; fixture modules continue to ship in the vgi-python wheel.
v0.46.1
Fix gzip external results served by the in-process demo blob store. GET and HEAD responses now advertise only the standard Content-Encoding header, preventing a second decompression attempt after an HTTP client has already decoded the body.
This patch retains wire contract 2.2.0 under vgi.v2. Workers and native/WASM clients must use matching wire minor versions (2.2); no wire contract or production catalog publication behavior changes.
Validation: all 17 demo-storage tests passed, lint/type checks passed, wheel/sdist metadata checks passed, and a clean installed wheel using published vgi-rpc==0.52.0 passed automatic gzip externalization, catalog discovery, and query execution against signed native extension 437d3b6.
The companion fixture wheel and container images are versioned 0.46.1. Standalone vgi-fixtures PyPI publication remains disabled; fixture modules continue to ship in the vgi-python wheel.
v0.46.0
This release implements the vgi.v2 wire contract 2.2.0. Native/WASM clients and workers must use the same wire minor version: deploy matching 2.2 clients and workers together. Wire 2.1 clients and workers are not compatible with this release.
- Batch every catalog metadata kind into six catalog-wide Arrow IPC streams across schema boundaries, with multi-batch readers.
- Dictionary-encode repeated binary function arguments, output schemas, and parameter defaults while retaining typed author APIs.
- Add opt-in cached catalog publication through external results, with memory and durable S3-compatible repositories, validated recovery/readback, per-key concurrency, expiration handling, and invalidation.
- Remove
SchemaInfo.attach_opaque_datafrom the wire contract; catalog attachment information remains on the attachment result. - Validate development compatibility against the matching native client in CI.
Requires published vgi-rpc >= 0.52.0. Includes wheel/sdist packaging and updated fixture images; standalone fixture PyPI publication remains disabled.
v0.45.0
v0.44.0
v0.43.1
v0.43.0
v0.42.1
Client fixes
Bug fixes only; VGI protocol and API are unchanged from 0.42.0.
- Parallel table-function scans closed early now shut down cleanly. Closing a
Client.table_functiongenerator before the scan finished used to leave its reader threads running. A followingClient.stop()could then hang (two readers on one pipe), or a pooled worker abandoned mid-stream could corrupt the next call on it. Each reader now cancels its own stream within one batch, and the generator joins the threads and releases the workers. Client.bindacceptssecrets,at_unitandat_value, matchingtable_function. You can now bind a secret-backed function or a versioned table's historical schema.- Filter Encoding v2 parser: view-typed payloads (
string_view,binary_view,list_view) are measured correctly on pyarrow < 19, instead of failing with a rawArrowTypeError.