vgi-python 0.43.1__tar.gz → 0.45.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.github/workflows/ci.yml +1 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.github/workflows/tailnet-integration.yml +2 -2
- {vgi_python-0.43.1 → vgi_python-0.45.0}/CLAUDE.md +5 -3
- {vgi_python-0.43.1 → vgi_python-0.45.0}/PKG-INFO +2 -2
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/auth.md +1 -1
- vgi_python-0.45.0/docs/api/exceptions.md +35 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/worker.md +1 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/authentication.md +1 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/catalog-interface.md +29 -26
- vgi_python-0.45.0/docs/design/reporting-protocols/IMPLEMENTATION.md +198 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/README.md +401 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/alerts.md +245 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/attach-tickets-plan.md +203 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/credentials.md +177 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/notify.md +105 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/prerequisites.md +370 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/render.md +60 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/reporting-protocols.html +3753 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/reports.md +118 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/schedules.md +243 -0
- vgi_python-0.45.0/docs/design/reporting-protocols/sql_tasks.md +292 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/protocol/index.md +2 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/protocol/vgi-attach-tickets.md +9 -5
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/protocol/vgi-catalog-query-pushdown-design.md +396 -139
- vgi_python-0.45.0/docs/protocol/vgi-secrets.md +131 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/mkdocs.yml +1 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/pyproject.toml +2 -2
- vgi_python-0.45.0/scripts/build_reporting_protocols_html.py +154 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/scripts/hosted_protocols_conformance.sh +1 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/scripts/regen_generated.py +19 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_writable_table.py +3 -3
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_attach_ticket.py +33 -7
- vgi_python-0.45.0/tests/test_error_codes.py +130 -0
- vgi_python-0.45.0/tests/test_function_subclass_check.py +151 -0
- vgi_python-0.45.0/tests/test_generated_cpp_records.py +125 -0
- vgi_python-0.45.0/tests/test_generated_registry.py +176 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_grant_auth.py +2 -2
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_hosted_protocols.py +2 -2
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_serve.py +11 -8
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_setting_secret_annotations.py +148 -38
- {vgi_python-0.43.1 → vgi_python-0.45.0}/uv.lock +317 -204
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/dynamic.py +3 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/http_server.py +1 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/identity_fixture.py +1 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/_common.py +2 -2
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/arguments.py +9 -4
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/attach_ticket.py +16 -7
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/auth.py +1 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/attach_option.py +3 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/catalog_interface.py +37 -37
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/aggregate.py +4 -6
- vgi_python-0.45.0/vgi/codegen/_registry.py +521 -0
- vgi_python-0.45.0/vgi/codegen/_registry_backend.py +328 -0
- vgi_python-0.45.0/vgi/codegen/cpp_records.py +650 -0
- vgi_python-0.45.0/vgi/codegen/cpp_registry.py +414 -0
- vgi_python-0.45.0/vgi/codegen/csharp_registry.py +379 -0
- vgi_python-0.45.0/vgi/codegen/go_registry.py +578 -0
- vgi_python-0.45.0/vgi/codegen/java_registry.py +452 -0
- vgi_python-0.45.0/vgi/codegen/rust_registry.py +425 -0
- vgi_python-0.45.0/vgi/codegen/ts_registry.py +587 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/exceptions.py +62 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/filter_v2.py +4 -4
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/function.py +14 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/meta_worker.py +13 -12
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/rpc_server.py +6 -6
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/scalar_function.py +12 -22
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/serve.py +1 -1
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/table_function.py +166 -164
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/worker.py +22 -15
- vgi_python-0.43.1/docs/api/exceptions.md +0 -8
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.dockerignore +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.gitattributes +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.github/dependabot.yml +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.github/styles/config/vocabularies/VGI/accept.txt +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.github/workflows/docs.yml +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.github/workflows/integration.yml +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.github/workflows/release.yml +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.gitignore +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.python-version +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/.vale.ini +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/DOCS_ACCEPTANCE_CRITERIA.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/DOCS_REVIEW_RUBRIC.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/DOCS_USABILITY_TEST.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/LICENSE +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/PROTOCOL.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/README.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/RELEASE-RUNBOOK.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/SECURITY.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/ci/README.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/ci/preprocess-require.awk +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/ci/run-integration.sh +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/README.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/negative/and-too-few-children.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/negative/delta-required-upsert.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/negative/nested-runtime-filter.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/negative/remove-with-expression.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/negative/required-runtime-filter.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/negative/snapshot-nonzero-revision.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/negative/unknown-document-property.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/negative/unknown-node.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/positive/advisory-upsert-delta.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/positive/boolean-column-predicate.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/positive/empty-snapshot.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/positive/nested-required-snapshot.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/positive/remove-delta.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/cases/positive/runtime-filter-snapshot.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/filter-v2.schema.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/generate_runtime.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/manifest.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/run_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-add/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-add/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-add/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-multiply/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-multiply/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-multiply/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-negate/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-negate/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-negate/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-subtract/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-subtract/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/arithmetic-subtract/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/cast-integer-to-double/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/cast-integer-to-double/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/cast-integer-to-double/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-distinct_from/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-distinct_from/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-distinct_from/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-distinct_from/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-eq/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-eq/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-eq/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-eq/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-ge/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-ge/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-ge/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-ge/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-gt/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-gt/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-gt/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-gt/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-le/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-le/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-le/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-le/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-lt/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-lt/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-lt/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-lt/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-ne/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-ne/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-ne/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-ne/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-not_distinct_from/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-not_distinct_from/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-not_distinct_from/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/comparison-not_distinct_from/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-atomic-multi-update/delta-0.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-atomic-multi-update/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-atomic-multi-update/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-atomic-multi-update/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-empty-noop/delta-0.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-empty-noop/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-empty-noop/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-empty-noop/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-0.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-1.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-2.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/delta-upsert-remove-stale/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/empty-snapshot/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/empty-snapshot/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/empty-snapshot/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/empty-snapshot/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-cast-type-not-null/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-cast-type-not-null/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-column-index/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-column-index/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-column-name/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-column-name/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-contextual-cast-without-session/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-contextual-cast-without-session/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-duplicate-predicate-id/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-duplicate-predicate-id/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-external-column-index/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-external-column-index/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-external-column-index/join-keys-0.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-external-column-name/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-external-column-name/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-external-column-name/join-keys-0.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-field-non-struct/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-field-non-struct/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-in-payload-not-list/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-in-payload-not-list/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-in-payload-null-list/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-in-payload-null-list/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-invalid-overload/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-invalid-overload/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-missing-literal/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-missing-literal/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-non-boolean-root/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-non-boolean-root/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-unknown-standard-function/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/error-unknown-standard-function/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/external-in-nonzero-column/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/external-in-nonzero-column/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/external-in-nonzero-column/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/external-in-nonzero-column/join-keys-0.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/external-in-nonzero-column/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-contains/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-contains/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-contains/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-ends-with/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-ends-with/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-ends-with/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-list-contains/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-list-contains/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-list-contains/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-starts-with/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-starts-with/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/function-starts-with/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/in-empty/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/in-empty/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/in-empty/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/in-empty/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/in-with-null/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/in-with-null/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/in-with-null/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/in-with-null/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/is-not-null/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/is-not-null/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/is-not-null/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/is-not-null/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/is-null/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/is-null/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/is-null/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/is-null/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-and/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-and/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-and/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-not/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-not/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-not/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-or/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-or/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/kleene-or/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/nan-comparison/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/nan-comparison/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/nan-comparison/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/negative-zero-membership/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/negative-zero-membership/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/negative-zero-membership/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/nested-null-propagation/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/nested-null-propagation/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/nested-null-propagation/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/not-in-empty/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/not-in-empty/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/not-in-empty/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/not-in-empty/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/not-in-with-null/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/not-in-with-null/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/not-in-with-null/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/not-in-with-null/worker-expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/session-integer-division/expected.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/session-integer-division/filter.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime/session-integer-division/input.arrow +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/conformance/filter-v2/runtime-manifest.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/dist-vgi/.gitignore +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/aggregate-functions.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/arguments.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/catalogs.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/client.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/filters.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/functions.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/http.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/index.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/metadata.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/observability.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/storage.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/api/transactor.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/argument-serialization.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/apple-touch-icon.png +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/favicon-16x16.png +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/favicon-32x32.png +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/favicon.ico +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/kinds/aggregate.svg +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/kinds/buffering.svg +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/kinds/scalar.svg +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/kinds/table-in-out.svg +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/kinds/table.svg +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/logo.png +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/social-card.png +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/assets/video-thumbnail.jpg +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/cli.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/column-statistics.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/concepts/index.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/contributing-docs.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/filter-pushdown.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/generator-api.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/global-functions.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/how-to/catalogs.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/how-to/function-patterns.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/how-to/http-auth.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/how-to/index.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/how-to/iroh.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/how-to/pushdown-and-statistics.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/how-to/state-storage.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/how-to/tailnet.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/index.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/lifecycle.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/metadata.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/overrides/main.html +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/protocol/vgi-duckdb-filter-adapter.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/protocol/vgi-filter-encoding-v2-spec.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/protocol/vgi-opaque-data-sealing.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/protocol/vgi-protocol-proposed-changes.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/protocol/vgi-runtime-filter-artifacts.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/robots.txt +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/shared-storage.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/stylesheets/extra.css +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/tutorial/index.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/tutorial/scalar.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/tutorial/table.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/docs/vgi-logo.png +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/batch_index_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/cache_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/calc_scalar_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/calc_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/copy_format_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/filter_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/greeting_scalar_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/row_count_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/series_streaming_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/examples/sum_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/identity.png +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/packages/vgi-fixtures/LICENSE +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/packages/vgi-fixtures/README.md +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/packages/vgi-fixtures/docker/Dockerfile +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/packages/vgi-fixtures/docker/docker-entrypoint.sh +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/packages/vgi-fixtures/pyproject.toml +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/scripts/gen_attach_ticket_vectors.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/scripts/measure_startup.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/scripts/run_all_tests.sh +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/test-data/generate.sh +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/_hosted_protocols_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/_http_fixtures.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_attach_option.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_catalog_contents.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_catalog_interface.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_client_catalog.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_client_load_catalog.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_column_statistics.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_declarative.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_example_worker_catalog.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_integration.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_required_filters.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_scan_branches.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_serialization.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_setting.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_storage.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/catalog/test_time_travel.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_aggregate_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_batch_metadata_callback.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_bind_and_join_keys.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_broken_pipe.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_cli.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_cli_catalog_functions.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_copy_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_http_response_budget.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_iroh_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_scan_branches_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_split_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_stop_force.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_table_column_statistics.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_time_travel_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/client/test_worker_debug.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/_stub.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/conftest.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_accumulate.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_aggregate.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_attach.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_bearer_auth.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_const_param_enforcement.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_container.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_copy_from.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_copy_to.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_directory_parity.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_function_inventory.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_github.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_http_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_http_external_location.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_http_upload_url.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_macro.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_overload.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_protocol_inventory.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_protocol_version.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_resumable_scan.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_scalar.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_scalar_attach_opaque_data.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_secret.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_settings.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_splits.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_table.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_table_in_out.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_view.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conformance/test_writable.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/conftest.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/anchor_len_overrun.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/bad_fingerprint.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/bad_flags_unsealed_but_key_present.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/bad_version.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/generate.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/manifest.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/reserved_flag_bit.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/stale_anchor.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/truncated.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/valid_sealed.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/data/split_tokens/valid_unsealed.bin +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_bernoulli_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_binary_packet_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_conditional_message_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_hash_seed_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_multiply_by_setting_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_multiply_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_random_bytes_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/scalar/test_return_secret_value_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/sdk_conformance/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/sdk_conformance/test_opaque_sealing.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/sdk_conformance/test_opaque_sealing_stdio.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_constant_columns_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_double_sequence_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_exception_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_filter_echo_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_logging_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_nested_sequence_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_partitioned_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_projected_data_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_sequence_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_settings_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_struct_settings_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/generator/test_ten_thousand_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table/test_wide_columns.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/generator/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/generator/test_buffer_input_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/generator/test_echo_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/generator/test_exception_functions.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/generator/test_filter_by_setting_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/generator/test_repeat_inputs_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/generator/test_substream_partial_sum_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/generator/test_sum_all_columns_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/test_blended_exchange.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/test_blended_metadata.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/test_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/table_in_out/test_table_buffering_empty_input.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/tailnet/Dockerfile +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/tailnet/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/tailnet/compose.yaml +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/tailnet/probe.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/tailnet/run.sh +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/tailnet/test_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/tailnet/worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_access_log_audit.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_aggregate_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_argument_spec.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_auth.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_bind_exceptions.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_bind_request_at_clause.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_bound_storage_conformance.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_cache_control.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_call_state_attach.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_catalog_auth_binding.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_client_oauth.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_client_reflection.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_codegen_request_inventory.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_copy_from_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_copy_to_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_docstrings.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_documentation_examples.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_dynamic_filter_http_turns.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_example_function_arg_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_examples_workers.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_exception_handling.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_exceptions.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_filter_pushdown.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_filter_pushdown_extension.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_filter_v2.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_filter_v2_builder.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_filter_v2_runtime_corpus.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_filter_v2_spec_schema.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_fixture_catalog_parity.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_function_shape_mismatch.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_function_storage.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_function_storage_azure_sql.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_function_storage_cf_do.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_function_storage_cf_do_integration.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_function_storage_conformance.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_cpp_constants.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_cpp_protocol_name.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_cpp_protocol_version.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_cpp_request_builders.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_cpp_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_cpp_secret.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_csharp.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_go_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_go_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_java_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_java_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_protocol_version.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_rust_request_builders.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_rust_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_rust_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_schemas_cross_lang.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_ts_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_ts_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_generated_ts_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_http_demo_storage.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_http_s3_offload_input.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_http_s3_offload_output.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_import_side_effects.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_landing_discovery.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_launch_transport.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_metadata.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_mypy_consolidated.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_nest_tensor.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_otel.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_projection_enforcement.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_projection_repro.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_protocol_classes.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_resolved_secrets.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_schema_paths_v2.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_schema_scoped_functions.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_schema_utils.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_signing_key.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_split_token.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_subprocess_transport.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_table_buffering_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_table_function_dynamic_to_string.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_table_function_early_close.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_tcp_transport.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_type_bounds.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_union_argument.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_wire_record_schema_parity.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_worker_cli.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_worker_page.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/test_write_results.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/transactor/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/tests/transactor/test_transactor.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_duckdb.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_redact.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_storage_profile.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/accumulate/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/accumulate/worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/_common.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/basic.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/generic.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/listagg.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/percentile.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/same_name.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/secret_typed.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/streaming.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/varargs.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/aggregate/window.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/attach_options.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/attach_ticket_vectors.json +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/bad_enum.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/bad_protocol.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/cancellable.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/catalog.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/catalog_contents.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/companion.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/copy_from.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/copy_to.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/global_functions.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/narrow_bind/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/narrow_bind/worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/nest_tensor.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/orchard_catalog.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/projection_repro/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/projection_repro/worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/arithmetic.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/bench_ladder.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/binary.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/formatting.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/geo.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/null_handling.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/random_demo.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/same_name.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/settings_secrets.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/scalar/type_info.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/schema_reconcile/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/schema_reconcile/worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/secret_cache.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/simple_writable.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/_common.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/batch_index.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/batch_index_broken.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/cache.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/catalog_scans.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/filters.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/late_materialization.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/make_series.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/misc.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/order_modes.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/pairs.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/partition_columns.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/partition_columns_broken.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/profiling_example.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/required_filters.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/same_name_cached.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/same_name_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/sequence.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/settings.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/splits.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/transaction_storage.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/tt_pushdown.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/typed_probe.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/versioned.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table/wide.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table_in_out.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/table_in_out_same_name.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/ticket_probe.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/twin_catalogs.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/versioned.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/versioned_tables.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/writable/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/writable/generic.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/writable/table.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/_test_fixtures/writable/worker.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/aggregate_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/argument_spec.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/attach_header.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/cache_control.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/_descriptor_spec.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/descriptors.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/duckdb_statistics.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/secret_type.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/setting.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/catalog/storage.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/catalog_mixin.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/cli.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/cli_catalog.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/cli_schema.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/cli_table.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/cli_transaction.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/cli_utils.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/cli_view.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/client/errors.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/_common.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/cpp_constants.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/cpp_protocol_name.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/cpp_protocol_version.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/cpp_request_builders.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/cpp_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/cpp_secret_protocol_version.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/cpp_secret_request_builders.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/cpp_secret_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/csharp_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/csharp_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/go_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/go_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/java_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/java_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/protocol_version.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/rust_request_builders.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/rust_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/rust_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/ts_client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/ts_schemas.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/codegen/ts_types.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/copy_from_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/copy_to_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/filter_v2_builder.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/function_storage.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/function_storage_azure_sql.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/function_storage_cf_do.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/http/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/http/demo_storage.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/http/landing.html +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/http/landing_page.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/http/vgi-client.js +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/http/worker_page.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/invocation.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/logging_config.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/metadata.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/otel.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/profiling.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/protocol.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/protocol_version.txt +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/py.typed +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/schema_path.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/schema_utils.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/secret_protocol.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/secret_service.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/split_token.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/table_buffering_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/table_filter_pushdown.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/table_in_out_function.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/transactor/__init__.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/transactor/_duckdb_compat.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/transactor/client.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/transactor/protocol.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/transactor/server.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/vgi/write_results.py +0 -0
- {vgi_python-0.43.1 → vgi_python-0.45.0}/wrangler.jsonc +0 -0
|
@@ -129,7 +129,7 @@ jobs:
|
|
|
129
129
|
hosted-protocols:
|
|
130
130
|
# vgi-rpc's cross-SDK hosted-protocols group: the fixture workers must host
|
|
131
131
|
# vgi.v2 then conformance.Secondary.v1 on stdio, unix and HTTP, and pass the
|
|
132
|
-
# Identity.
|
|
132
|
+
# Identity.v2 groups over HTTP (vgi-fixture-http --identity).
|
|
133
133
|
name: Hosted-protocols conformance
|
|
134
134
|
runs-on: ubuntu-latest
|
|
135
135
|
steps:
|
|
@@ -33,12 +33,12 @@ jobs:
|
|
|
33
33
|
steps:
|
|
34
34
|
- uses: actions/checkout@v7
|
|
35
35
|
|
|
36
|
-
- name: Checkout
|
|
36
|
+
- name: Checkout vgi-rpc (Identity.v2)
|
|
37
37
|
uses: actions/checkout@v7
|
|
38
38
|
with:
|
|
39
39
|
repository: Query-farm/vgi-rpc-python
|
|
40
40
|
path: .tailnet/vgi-rpc
|
|
41
|
-
ref:
|
|
41
|
+
ref: e04ddfa56c19b4cd7cc1e3729d165c763b0d98c7 # v0.52.0 (Identity.v2)
|
|
42
42
|
|
|
43
43
|
- name: Check kernel networking support
|
|
44
44
|
run: |
|
|
@@ -302,7 +302,7 @@ vgi-client --input data.parquet --function sum_all_columns --worker vgi-fixture-
|
|
|
302
302
|
| `VGI_OAUTH_DEVICE_CODE_CLIENT_SECRET` | Client secret for device-code flow (optional, URL-safe chars only) |
|
|
303
303
|
| `VGI_OAUTH_USE_ID_TOKEN` | When `1`/`true`/`yes`, clients use OIDC `id_token` as Bearer instead of `access_token` |
|
|
304
304
|
| `VGI_RPC_GRANT_KEYS` | Comma-separated base64 32-byte sealed-grant keys (first mints, all verify); enables grants as HTTP bearers. Also `VGI_RPC_GRANT_AUDIENCE`, `VGI_RPC_GRANT_MAX_TTL_SECONDS` |
|
|
305
|
-
| `VGI_INTROSPECT_PRINCIPALS` | Comma-separated principals permitted to call `vgi_rpc.Identity.
|
|
305
|
+
| `VGI_INTROSPECT_PRINCIPALS` | Comma-separated principals permitted to call `vgi_rpc.Identity.v2`'s `introspect_token`. Required — no permissive default — whenever the worker implements `resolve_token()` (see below) |
|
|
306
306
|
| `VGI_WORKER_ACCESS_LOG_SAMPLE` | Fraction of *successful* calls to keep in the access log, `0.0`–`1.0`. Errors are always kept; the decision is per call, so every record of one stream shares a fate |
|
|
307
307
|
| `VGI_WORKER_ACCESS_LOG_ASYNC` | When `1`/`true`/`yes`, emit access-log records from a listener thread. Bounded queue; full means drop, and a crash loses whatever is queued |
|
|
308
308
|
| `VGI_WORKER_ACCESS_LOG_QUEUE_SIZE` | Bound on the async access-log queue (default 10000) |
|
|
@@ -426,7 +426,7 @@ Also available on `Worker.main --http` and the fixture server. Under
|
|
|
426
426
|
|
|
427
427
|
### Token Introspection (`resolve_token`)
|
|
428
428
|
|
|
429
|
-
A worker may optionally host the `vgi_rpc.Identity.
|
|
429
|
+
A worker may optionally host the `vgi_rpc.Identity.v2` protocol, whose
|
|
430
430
|
`introspect_token` method resolves an opaque bearer credential to a principal —
|
|
431
431
|
for a reverse proxy that terminates the only public listener and must know the
|
|
432
432
|
caller's identity before it can authorize anything.
|
|
@@ -509,7 +509,9 @@ one. Allowlist rules are unchanged. See `docs/authentication.md` and
|
|
|
509
509
|
|
|
510
510
|
### Attach Tickets (`vgi.attach_tickets.v1`)
|
|
511
511
|
|
|
512
|
-
|
|
512
|
+
Protocol version `2.0.0`: `AttachTicket.expires_at` is nullable
|
|
513
|
+
`timestamp[us, tz="UTC"]` (`datetime | None`, null = no expiry); `1.0.0` was a
|
|
514
|
+
float64 with `+inf`. `seal_attach` seals a user's ATTACH (catalog name, options incl. secrets,
|
|
513
515
|
version specs) into a `vgia1.` ticket under `VGI_SIGNING_KEY`, AAD
|
|
514
516
|
`"vgi.attach_ticket.v1\0" + principal` (principal only, not domain). A runner
|
|
515
517
|
holding the user's grant reattaches with the single option `vgi_attach_ticket`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vgi-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.45.0
|
|
4
4
|
Summary: Vector Gateway Interface - Connect DuckDB to external programs via Apache Arrow
|
|
5
5
|
Project-URL: Homepage, https://query.farm
|
|
6
6
|
Project-URL: Repository, https://github.com/Query-farm/vgi-python
|
|
@@ -162,7 +162,7 @@ Requires-Dist: httpx2>=2.12.0
|
|
|
162
162
|
Requires-Dist: platformdirs
|
|
163
163
|
Requires-Dist: pyarrow
|
|
164
164
|
Requires-Dist: typer>=0.9
|
|
165
|
-
Requires-Dist: vgi-rpc>=0.
|
|
165
|
+
Requires-Dist: vgi-rpc>=0.52.0
|
|
166
166
|
Provides-Extra: azure
|
|
167
167
|
Requires-Dist: azure-identity>=1.16.0; extra == 'azure'
|
|
168
168
|
Requires-Dist: pymssql>=2.3.0; extra == 'azure'
|
|
@@ -18,7 +18,7 @@ require `pip install vgi-python[http]`; JWT authentication additionally requires
|
|
|
18
18
|
`principal` plus an optional `token_name`. It lives in a private `vgi-rpc` module, so `vgi.auth`
|
|
19
19
|
re-exports it — a worker that implements `resolve_token` never has to name a private import path.
|
|
20
20
|
|
|
21
|
-
As of vgi-rpc 0.46.0 introspection is the `vgi_rpc.Identity.
|
|
21
|
+
As of vgi-rpc 0.46.0 introspection is the `vgi_rpc.Identity.v2` protocol hosted on the RPC server,
|
|
22
22
|
not an HTTP JSON route, so clients discover it through reflection. VGI hosts it on HTTP only, the
|
|
23
23
|
transport that authenticates callers: its allowlist names principals, which stdin/stdout, AF_UNIX
|
|
24
24
|
and TCP do not have. `TokenIdentity` and `TokenResolver` are no longer gated on the `[http]` extra.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Exceptions
|
|
2
|
+
|
|
3
|
+
VGI raises typed exceptions for binding, catalog, schema, and execution errors. Several
|
|
4
|
+
validation errors also live alongside the features they guard (see
|
|
5
|
+
[Arguments](arguments.md#vgi.arguments.ArgumentValidationError) and
|
|
6
|
+
[Metadata](metadata.md)).
|
|
7
|
+
|
|
8
|
+
## Error codes
|
|
9
|
+
|
|
10
|
+
Errors cross the wire with a gRPC-style `error_code` from vgi-rpc's error model
|
|
11
|
+
(`vgi_rpc.errors.Code`). An exception class declares its code with an
|
|
12
|
+
`error_code` class attribute; one without it is sent as `UNKNOWN`. The SDK codes
|
|
13
|
+
its own errors so a client can tell bad input from a worker bug:
|
|
14
|
+
|
|
15
|
+
| Code | Raised for |
|
|
16
|
+
|------|------------|
|
|
17
|
+
| `INVALID_ARGUMENT` | `ArgumentValidationError`, `ArgumentTypeError` (failed `type_bound`), `TypeMismatchError` on an input parameter, `InvalidArgumentError` (no matching overload, ambiguous call, wrong call shape), `MissingAttachOptionsError` |
|
|
18
|
+
| `NOT_FOUND` | `NotFoundError` (unknown function, catalog, or table) |
|
|
19
|
+
| `FAILED_PRECONDITION` | `CatalogReadOnlyError` |
|
|
20
|
+
| `UNIMPLEMENTED` | `UnsupportedOperationError` (catalog operations a catalog does not implement) |
|
|
21
|
+
| `UNKNOWN` | everything else, including `SchemaValidationError` on a worker's output and `TypeMismatchError` on a return value -- those are worker bugs |
|
|
22
|
+
|
|
23
|
+
Your own exceptions can declare a code the same way:
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
from typing import ClassVar
|
|
27
|
+
|
|
28
|
+
from vgi_rpc.errors import Code
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class QuotaExceededError(Exception):
|
|
32
|
+
error_code: ClassVar[Code] = Code.RESOURCE_EXHAUSTED
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
::: vgi.exceptions
|
|
@@ -72,7 +72,7 @@ overriding the same hook stop it at startup.
|
|
|
72
72
|
|
|
73
73
|
Reflection (`list_protocols`) reports protocols in this order:
|
|
74
74
|
|
|
75
|
-
| Transport | `vgi.v2` | `hosted_protocols()` | `vgi_rpc.Reflection.v1` | `vgi_rpc.Identity.
|
|
75
|
+
| Transport | `vgi.v2` | `hosted_protocols()` | `vgi_rpc.Reflection.v1` | `vgi_rpc.Identity.v2` |
|
|
76
76
|
| --- | --- | --- | --- | --- |
|
|
77
77
|
| stdin/stdout | yes | yes | yes | no |
|
|
78
78
|
| AF_UNIX / named pipe | yes | yes | yes | no |
|
|
@@ -41,7 +41,7 @@ lookup.
|
|
|
41
41
|
|
|
42
42
|
## Grants and resolved tokens as bearer credentials
|
|
43
43
|
|
|
44
|
-
`vgi_rpc.Identity.
|
|
44
|
+
`vgi_rpc.Identity.v2`'s `issue_grant` mints a standing credential that
|
|
45
45
|
unattended automation later presents as an ordinary bearer. Over HTTP the
|
|
46
46
|
worker accepts two kinds of identity credential after the deployment's own
|
|
47
47
|
authenticator:
|
|
@@ -214,37 +214,40 @@ class MyCatalog(CatalogInterface):
|
|
|
214
214
|
|
|
215
215
|
| Category | Method | Default Behavior |
|
|
216
216
|
|----------|--------|------------------|
|
|
217
|
-
| **Catalog** | `catalog_create()` | `
|
|
218
|
-
| | `catalog_drop()` | `
|
|
217
|
+
| **Catalog** | `catalog_create()` | `UnsupportedOperationError` |
|
|
218
|
+
| | `catalog_drop()` | `UnsupportedOperationError` |
|
|
219
219
|
| | `catalog_detach()` | No-op |
|
|
220
220
|
| | `catalog_version()` | Returns `0` |
|
|
221
|
-
| **Transaction** | `catalog_transaction_begin()` | `
|
|
222
|
-
| | `catalog_transaction_commit()` | `
|
|
223
|
-
| | `catalog_transaction_rollback()` | `
|
|
221
|
+
| **Transaction** | `catalog_transaction_begin()` | `UnsupportedOperationError` |
|
|
222
|
+
| | `catalog_transaction_commit()` | `UnsupportedOperationError` |
|
|
223
|
+
| | `catalog_transaction_rollback()` | `UnsupportedOperationError` |
|
|
224
224
|
| **Schema** | `schemas()` | Returns `["main"]` |
|
|
225
|
-
| | `schema_create()` | `
|
|
226
|
-
| | `schema_drop()` | `
|
|
227
|
-
| | `schema_contents()` | `
|
|
228
|
-
| **Table** | `table_create()` | `
|
|
229
|
-
| | `table_drop()` | `
|
|
230
|
-
| | `table_rename()` | `
|
|
231
|
-
| | `table_comment_set()` | `
|
|
232
|
-
| | `table_column_add()` | `
|
|
233
|
-
| | `table_column_drop()` | `
|
|
234
|
-
| | `table_column_rename()` | `
|
|
235
|
-
| | `table_column_type_change()` | `
|
|
236
|
-
| | `table_column_default_set()` | `
|
|
237
|
-
| | `table_column_default_drop()` | `
|
|
238
|
-
| | `table_not_null_set()` | `
|
|
239
|
-
| | `table_not_null_drop()` | `
|
|
240
|
-
| | `table_scan_function_get()` | `
|
|
241
|
-
| **View** | `view_create()` | `
|
|
242
|
-
| | `view_drop()` | `
|
|
243
|
-
| | `view_rename()` | `
|
|
244
|
-
| | `view_comment_set()` | `
|
|
225
|
+
| | `schema_create()` | `UnsupportedOperationError` |
|
|
226
|
+
| | `schema_drop()` | `UnsupportedOperationError` |
|
|
227
|
+
| | `schema_contents()` | `UnsupportedOperationError` |
|
|
228
|
+
| **Table** | `table_create()` | `UnsupportedOperationError` |
|
|
229
|
+
| | `table_drop()` | `UnsupportedOperationError` |
|
|
230
|
+
| | `table_rename()` | `UnsupportedOperationError` |
|
|
231
|
+
| | `table_comment_set()` | `UnsupportedOperationError` |
|
|
232
|
+
| | `table_column_add()` | `UnsupportedOperationError` |
|
|
233
|
+
| | `table_column_drop()` | `UnsupportedOperationError` |
|
|
234
|
+
| | `table_column_rename()` | `UnsupportedOperationError` |
|
|
235
|
+
| | `table_column_type_change()` | `UnsupportedOperationError` |
|
|
236
|
+
| | `table_column_default_set()` | `UnsupportedOperationError` |
|
|
237
|
+
| | `table_column_default_drop()` | `UnsupportedOperationError` |
|
|
238
|
+
| | `table_not_null_set()` | `UnsupportedOperationError` |
|
|
239
|
+
| | `table_not_null_drop()` | `UnsupportedOperationError` |
|
|
240
|
+
| | `table_scan_function_get()` | `UnsupportedOperationError` |
|
|
241
|
+
| **View** | `view_create()` | `UnsupportedOperationError` |
|
|
242
|
+
| | `view_drop()` | `UnsupportedOperationError` |
|
|
243
|
+
| | `view_rename()` | `UnsupportedOperationError` |
|
|
244
|
+
| | `view_comment_set()` | `UnsupportedOperationError` |
|
|
245
245
|
| **Observability** | `loggable_attach_options()` | Returns `{}` (no options logged — see below) |
|
|
246
246
|
| **Bulk load** | `catalog_contents()` | Composes `schemas()` + `schema_contents()` per kind; no etag (see below) |
|
|
247
247
|
|
|
248
|
+
`UnsupportedOperationError` (from `vgi.exceptions`) subclasses `NotImplementedError` and is
|
|
249
|
+
sent to the client with error code `UNIMPLEMENTED`.
|
|
250
|
+
|
|
248
251
|
---
|
|
249
252
|
|
|
250
253
|
## Loading the Whole Catalog: `catalog_contents`
|
|
@@ -847,7 +850,7 @@ Errors are returned as exceptions that propagate through the VGI protocol:
|
|
|
847
850
|
| Error | When Raised |
|
|
848
851
|
|-------|-------------|
|
|
849
852
|
| `ValueError` | Invalid arguments, object not found |
|
|
850
|
-
| `
|
|
853
|
+
| `UnsupportedOperationError` | Method not supported |
|
|
851
854
|
| `CatalogReadOnlyError` | DDL on read-only catalog |
|
|
852
855
|
|
|
853
856
|
Example error handling:
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Implementing the reporting protocols
|
|
2
|
+
|
|
3
|
+
The build plan for the protocols in this directory, written so an agent with no
|
|
4
|
+
other context can pick up where the last one stopped. Read this file, then the
|
|
5
|
+
[README](README.md), [credentials.md](credentials.md) and the spec of the phase
|
|
6
|
+
you're on. **Update the status table when a phase lands**, in the same commit.
|
|
7
|
+
|
|
8
|
+
## Status
|
|
9
|
+
|
|
10
|
+
| Phase | Status | Landed in |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| P0 Specs committed, HTML builder in the repo | done | this commit |
|
|
13
|
+
| P1 Unlimited default grant lifetime | not started | |
|
|
14
|
+
| P2 SQL-binding framework (vgi-python) | not started | |
|
|
15
|
+
| P3 `vgi.reports.v1` | not started | |
|
|
16
|
+
| P4 `vgi.delegations.v1` | not started | |
|
|
17
|
+
| P5 Run engine and `vgi.schedules.v1` (`run_query`) | not started | |
|
|
18
|
+
| P6 `vgi.sql_tasks.v1` | not started | |
|
|
19
|
+
| P7 `vgi.notify.v1` reference and deliveries | not started | |
|
|
20
|
+
| P8 `vgi.alerts.v1` | not started | |
|
|
21
|
+
| P9 `vgi.report_render.v1` and `render_report` | not started | |
|
|
22
|
+
| P10 Cupola client | not started (can start after P3) | |
|
|
23
|
+
|
|
24
|
+
Already shipped and not part of this plan: multi-protocol hosting, the gRPC
|
|
25
|
+
error model, `Identity.v1`, grants as bearers, attach tickets
|
|
26
|
+
(`vgi.attach_tickets.v1`, `vgi_export_session()`, the `attach_ticket` ATTACH
|
|
27
|
+
option), full `vgi.v2` parity across the seven SDKs.
|
|
28
|
+
|
|
29
|
+
## Decisions
|
|
30
|
+
|
|
31
|
+
Settled; don't reopen them without the user. The README's Decisions table has
|
|
32
|
+
the protocol-level ones; these are the build-level ones and late changes.
|
|
33
|
+
|
|
34
|
+
| # | Decision |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| D1 | The protocol is the unit of optionality; every method is required. |
|
|
37
|
+
| D2 | `vgi.delegations.v1` (not "held attachments"): `Delegation`, `put_delegations`, `list_delegations`, `revoke_delegation`. |
|
|
38
|
+
| D3 | `vgi.sql_tasks.v1` is its own protocol on the shared run engine, for SQL that changes data. Both destination kinds (`catalog`, `host`) and both watermark kinds (`derived`, `stored`). Scripts run statements in one transaction by default; `CALL` is a statement. |
|
|
39
|
+
| D4 | `vgi.schedules.v1`'s `run_query` stays as specified (it may write). The overlap with SQL tasks is accepted. |
|
|
40
|
+
| D5 | The delegation field stays `grant`. DuckDB accepts it unquoted (the extension's `attach_ticket/round_trip.test` does `SELECT grant FROM …`). |
|
|
41
|
+
| D6 | The SQL binding is normative and **derived** from the RPC definition by a generic adapter plus a per-protocol annotation; never hand-written ([README](README.md#sql-binding)). |
|
|
42
|
+
| D7 | Protocol-table writes are refused inside an explicit multi-statement transaction (each row is an RPC that `ROLLBACK` can't undo). Revisit only if a real use needs it. |
|
|
43
|
+
| D8 | Specs stay in `docs/design/reporting-protocols/` until each protocol ships; a shipped protocol's spec then moves to `docs/protocol/`. |
|
|
44
|
+
| D9 | These are service protocols. The reference implementation is Python; other SDKs implement one only when someone wants to host it natively. The extension tests the SQL bindings cross-language. |
|
|
45
|
+
| D10 | Build order is by dependency, P1 to P9. Each phase ends usable, with conformance over both surfaces. |
|
|
46
|
+
|
|
47
|
+
## Working rules
|
|
48
|
+
|
|
49
|
+
**Where work happens**
|
|
50
|
+
|
|
51
|
+
- Build and test on the EC2 host `ec2-user@13.217.25.2` in a directory you
|
|
52
|
+
create and own, not the shared Mac. Debug builds, no LTO, at most 8 jobs.
|
|
53
|
+
Kill only processes you started, by PID; never a broad `pkill`.
|
|
54
|
+
- Never edit `~/Development/vgi` or `~/Development/vgi-typescript` in place;
|
|
55
|
+
use a git worktree. vgi-python's main checkout may hold the user's
|
|
56
|
+
uncommitted files: never stage what you didn't write.
|
|
57
|
+
- Implement, never skip: missing SDK functionality is ported, not excluded
|
|
58
|
+
from a cross-SDK test.
|
|
59
|
+
|
|
60
|
+
**Testing**
|
|
61
|
+
|
|
62
|
+
- vgi-python: `uv run ruff check --fix . && uv run ruff format . && uv run mypy vgi/`,
|
|
63
|
+
then `uv run pytest -n auto`.
|
|
64
|
+
- Feature tests that cross languages go in the extension as sqllogictests
|
|
65
|
+
(`~/Development/vgi/test/sql/integration/<protocol>/`). Every local
|
|
66
|
+
`unittest` run passes `--test-dir <tree>` (otherwise it silently runs its
|
|
67
|
+
compiled-in tree) and `--test-config test/configs/no_error_skip.json`
|
|
68
|
+
(otherwise HTTP-lane errors become skips).
|
|
69
|
+
- Anything a test starts in the background, the test stops: record PIDs in the
|
|
70
|
+
parent shell, never inside `$( … )`.
|
|
71
|
+
|
|
72
|
+
**Commits and releases**
|
|
73
|
+
|
|
74
|
+
- Agents commit on a branch and report; they don't push or tag.
|
|
75
|
+
- Docs and script-only changes go straight to `main`, no PR.
|
|
76
|
+
- A package release is CI-gated: push the release commit to `main`, wait for
|
|
77
|
+
**every** push-triggered workflow on that SHA to succeed (zero runs is a
|
|
78
|
+
failure: check the repo name from `git remote`), then create the GitHub
|
|
79
|
+
release or push the tag, whichever that repo publishes on. Retry GitHub 5xx.
|
|
80
|
+
- Commit messages are findings-style (what was wrong or missing, how it was
|
|
81
|
+
found, what changed, how it was verified) and end with the session's
|
|
82
|
+
`Co-Authored-By` trailer.
|
|
83
|
+
|
|
84
|
+
## Phases
|
|
85
|
+
|
|
86
|
+
### P0 Specs committed (done)
|
|
87
|
+
|
|
88
|
+
`docs/design/reporting-protocols/` committed, with
|
|
89
|
+
`scripts/build_reporting_protocols_html.py`, which regenerates
|
|
90
|
+
`reporting-protocols.html` from the markdown. Rerun it after editing a spec.
|
|
91
|
+
|
|
92
|
+
### P1 Unlimited default grant lifetime
|
|
93
|
+
|
|
94
|
+
The design says a grant's lifetime is the issuing worker's policy and unlimited
|
|
95
|
+
unless set. vgi-rpc still defaults to 7 days (`DEFAULT_MAX_TTL_SECONDS` in
|
|
96
|
+
`vgi_rpc/grants.py`), so every unattended job would stop a week after its
|
|
97
|
+
owner's last login.
|
|
98
|
+
|
|
99
|
+
- Decide the wire form of "no expiry" in the grant spec first (an absent or
|
|
100
|
+
zero `exp`), with test vectors.
|
|
101
|
+
- Unset `VGI_RPC_GRANT_MAX_TTL_SECONDS` means no maximum, in vgi-rpc and all
|
|
102
|
+
six ports. Attach tickets follow the worker's grant maximum, so check the
|
|
103
|
+
SDKs' ticket expiry the same way.
|
|
104
|
+
- **Done when** the shared vectors pass in every port, `expires_at` is `+inf`
|
|
105
|
+
(or `NULL` in `vgi_export_session()`) for an unlimited worker, and the ports
|
|
106
|
+
are released.
|
|
107
|
+
|
|
108
|
+
P1 doesn't block P2 to P4; development can set an explicit TTL meanwhile.
|
|
109
|
+
|
|
110
|
+
### P2 SQL-binding framework (vgi-python)
|
|
111
|
+
|
|
112
|
+
The generic adapter that serves a hosted RPC protocol as a VGI catalog schema,
|
|
113
|
+
built before any protocol so each ships both surfaces.
|
|
114
|
+
|
|
115
|
+
- Protocol classes for every protocol: Arrow-typed records and the `Protocol`
|
|
116
|
+
class, plus the SQL annotation (tables, get methods for fetched columns, DML
|
|
117
|
+
methods). Proposed home `vgi/reporting/`; adjust if the codebase suggests
|
|
118
|
+
better.
|
|
119
|
+
- The adapter, implementing the [README's derivation rules](README.md#derivation-rules)
|
|
120
|
+
1 to 9 and the semantics (conflict, `request_id`, autocommit, error text).
|
|
121
|
+
- `scripts/regen_generated.py --check` renders each spec's SQL-binding table
|
|
122
|
+
from the annotations.
|
|
123
|
+
- **Done when** each derivation rule and semantic has a test against a toy
|
|
124
|
+
protocol, and a protocol with an annotation that names a missing method or a
|
|
125
|
+
column the row lacks fails at startup.
|
|
126
|
+
|
|
127
|
+
### P3 `vgi.reports.v1`
|
|
128
|
+
|
|
129
|
+
- The store on `FunctionStorage`, `AccessPolicy` (by principal: grant callers
|
|
130
|
+
have no claims), `ReadOnlyReportStore`, `vgi-report-serve`.
|
|
131
|
+
- Pin every row schema in [reports.md](reports.md) exactly; the SQL binding
|
|
132
|
+
makes them a contract.
|
|
133
|
+
- A conformance suite that runs against any implementation over RPC and over
|
|
134
|
+
SQL.
|
|
135
|
+
- Extension sqllogictests `test/sql/integration/reports/` against the Python
|
|
136
|
+
service.
|
|
137
|
+
- **Done when** the conformance suite passes over both surfaces and Cupola
|
|
138
|
+
could save, list, publish and read history with no localStorage.
|
|
139
|
+
|
|
140
|
+
### P4 `vgi.delegations.v1`
|
|
141
|
+
|
|
142
|
+
- `put_delegations`, `list_delegations`, `revoke_delegation`; grants and tickets
|
|
143
|
+
encrypted under a key outside the store, never returned.
|
|
144
|
+
- **Done when** this round trip passes as a sqllogictest: `vgi_export_session()`,
|
|
145
|
+
`INSERT INTO … delegations BY NAME …`, then a runner reattaches each source
|
|
146
|
+
with `ATTACH … (bearer_token, attach_ticket)` from the stored delegation and
|
|
147
|
+
reads data, and `revoke_delegation` makes the next reattach fail.
|
|
148
|
+
|
|
149
|
+
### P5 Run engine and `vgi.schedules.v1`
|
|
150
|
+
|
|
151
|
+
- The shared engine from [schedules.md](schedules.md#reference-scheduler-non-normative):
|
|
152
|
+
`tick` / `advance_run`, `vgi.scheduler_driver.v1` (allowlisted), leases,
|
|
153
|
+
idempotent steps, hardened per-run sessions built from delegations.
|
|
154
|
+
- `vgi.schedules.v1` with `run_query`; deliveries wait for P7.
|
|
155
|
+
- **Done when** a schedule runs as its owner from delegations, runs are unique
|
|
156
|
+
on `(schedule_id, scheduled_for)` across two replicas, overlap is `skipped`,
|
|
157
|
+
and a missing delegation is `grant_required`.
|
|
158
|
+
|
|
159
|
+
### P6 `vgi.sql_tasks.v1`
|
|
160
|
+
|
|
161
|
+
- `load` (four modes), `script` (three transaction kinds), both watermark
|
|
162
|
+
kinds, `lookback`, the `host` store (DuckLake by default), health and
|
|
163
|
+
transition notifications (deliveries once P7 lands).
|
|
164
|
+
- **Done when** `derived` loads exactly once across a crash injected between
|
|
165
|
+
write and commit, `stored` replays at most the last window, a script that
|
|
166
|
+
writes two databases in `single` fails with `transaction_failed`, and
|
|
167
|
+
`test_run` leaves the target untouched.
|
|
168
|
+
|
|
169
|
+
### P7 `vgi.notify.v1` reference and deliveries
|
|
170
|
+
|
|
171
|
+
- A reference service with a recording fake channel and a webhook channel;
|
|
172
|
+
destination policy and suppression list. Wire schedule deliveries and task
|
|
173
|
+
notifications to it. The production service is the separate `vgi-notify`
|
|
174
|
+
repo, later.
|
|
175
|
+
|
|
176
|
+
### P8 `vgi.alerts.v1`
|
|
177
|
+
|
|
178
|
+
- Rules, instances and states, notifications on transitions, acknowledge,
|
|
179
|
+
snooze, subscriptions, on the shared engine. Pin the instance row schema
|
|
180
|
+
(it's loose in [alerts.md](alerts.md) today).
|
|
181
|
+
|
|
182
|
+
### P9 `vgi.report_render.v1` and `render_report`
|
|
183
|
+
|
|
184
|
+
- Depends on a headless Cupola renderer. Then enable the `render_report`
|
|
185
|
+
schedule action.
|
|
186
|
+
|
|
187
|
+
### P10 Cupola client
|
|
188
|
+
|
|
189
|
+
- Starts after P3: reports client and migration off localStorage, then
|
|
190
|
+
delegation on save and renewal on login (P4), schedule and task editors (P5,
|
|
191
|
+
P6), "Alert me when…" (P8). TypeScript types and clients come from codegen.
|
|
192
|
+
|
|
193
|
+
## Known gaps to close while building
|
|
194
|
+
|
|
195
|
+
- Row schemas are prose in places ("instances with state and times"). Each
|
|
196
|
+
phase pins its protocol's rows; the regen check keeps the spec in step.
|
|
197
|
+
- `get_*_info` limits (sizes, minimum intervals) have no values yet; choose
|
|
198
|
+
them in the phase and record them in the spec.
|