vgi-python 0.22.0__tar.gz → 0.22.1__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.22.0 → vgi_python-0.22.1}/PKG-INFO +2 -2
- {vgi_python-0.22.0 → vgi_python-0.22.1}/pyproject.toml +2 -2
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_serve.py +51 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/uv.lock +5 -5
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/serve.py +11 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.gitattributes +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.github/dependabot.yml +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.github/styles/config/vocabularies/VGI/accept.txt +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.github/workflows/ci.yml +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.github/workflows/docs.yml +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.github/workflows/integration.yml +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.github/workflows/release.yml +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.gitignore +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.python-version +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/.vale.ini +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/CLAUDE.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/DOCS_ACCEPTANCE_CRITERIA.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/DOCS_REVIEW_RUBRIC.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/DOCS_USABILITY_TEST.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/LICENSE +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/README.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/SECURITY.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/ci/README.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/ci/preprocess-require.awk +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/ci/run-integration.sh +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/dist-vgi/.gitignore +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/aggregate-functions.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/arguments.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/auth.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/catalogs.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/client.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/exceptions.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/filters.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/functions.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/http.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/index.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/metadata.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/observability.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/storage.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/transactor.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/api/worker.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/argument-serialization.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/apple-touch-icon.png +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/favicon-16x16.png +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/favicon-32x32.png +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/favicon.ico +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/kinds/aggregate.svg +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/kinds/buffering.svg +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/kinds/scalar.svg +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/kinds/table-in-out.svg +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/kinds/table.svg +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/logo.png +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/assets/social-card.png +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/authentication.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/catalog-interface.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/cli.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/column-statistics.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/concepts/index.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/contributing-docs.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/filter-pushdown.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/generator-api.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/how-to/catalogs.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/how-to/function-patterns.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/how-to/http-auth.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/how-to/index.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/how-to/pushdown-and-statistics.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/how-to/state-storage.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/index.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/lifecycle.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/metadata.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/overrides/main.html +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/robots.txt +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/shared-storage.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/stylesheets/extra.css +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/tutorial/index.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/tutorial/scalar.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/tutorial/table.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/docs/vgi-logo.png +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/examples/calc_scalar_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/examples/calc_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/examples/filter_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/examples/greeting_scalar_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/examples/row_count_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/examples/series_streaming_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/examples/sum_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/mkdocs.yml +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/packages/vgi-fixtures/LICENSE +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/packages/vgi-fixtures/README.md +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/packages/vgi-fixtures/docker/Dockerfile +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/packages/vgi-fixtures/docker/docker-entrypoint.sh +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/packages/vgi-fixtures/pyproject.toml +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/scripts/measure_startup.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/scripts/run_all_tests.sh +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/test-data/generate.sh +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/_http_fixtures.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_catalog_interface.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_client_catalog.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_column_statistics.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_declarative.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_example_worker_catalog.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_integration.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_required_filters.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_scan_branches.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_serialization.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_setting.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_storage.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_time_travel.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/catalog/test_writable_table.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/client/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/client/test_broken_pipe.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/client/test_cli.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/client/test_cli_catalog_functions.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/client/test_worker_debug.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/_stub.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/conftest.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_accumulate.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_aggregate.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_attach.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_bearer_auth.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_const_param_enforcement.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_container.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_copy_from.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_copy_to.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_directory_parity.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_function_inventory.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_github.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_http_client.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_http_external_location.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_http_upload_url.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_macro.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_overload.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_protocol_inventory.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_protocol_version.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_resumable_scan.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_scalar.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_scalar_attach_opaque_data.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_secret.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_settings.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_table.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_table_in_out.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_view.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conformance/test_writable.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/conftest.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/landing/_checker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/landing/describe.expected.json +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/landing/describe.schema.json +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_bernoulli_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_binary_packet_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_client.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_conditional_message_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_hash_seed_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_multiply_by_setting_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_multiply_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_random_bytes_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/scalar/test_return_secret_value_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_constant_columns_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_double_sequence_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_exception_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_filter_echo_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_logging_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_nested_sequence_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_partitioned_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_projected_data_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_sequence_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_settings_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_struct_settings_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_ten_thousand_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/generator/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/generator/test_buffer_input_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/generator/test_echo_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/generator/test_exception_functions.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/generator/test_filter_by_setting_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/generator/test_repeat_inputs_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/generator/test_substream_partial_sum_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/generator/test_sum_all_columns_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/test_blended_metadata.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table_in_out/test_client.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_access_log_audit.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_aggregate_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_argument_spec.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_auth.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_bind_exceptions.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_bind_request_at_clause.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_bound_storage_conformance.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_cache_control.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_catalog_auth_binding.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_copy_from_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_copy_to_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_docstrings.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_documentation_examples.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_example_function_arg_types.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_examples_workers.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_exception_handling.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_exceptions.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_filter_pushdown.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_filter_pushdown_extension.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_function_storage.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_function_storage_azure_sql.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_function_storage_cf_do.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_function_storage_cf_do_integration.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_function_storage_conformance.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_cpp_constants.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_cpp_protocol_version.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_cpp_request_builders.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_cpp_schemas.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_cpp_secret.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_go_schemas.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_protocol_version.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_schemas_cross_lang.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_ts_client.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_generated_ts_schemas.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_http_demo_storage.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_http_s3_offload_input.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_http_s3_offload_output.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_landing_conformance.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_metadata.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_mypy_consolidated.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_nest_tensor.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_otel.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_projection_enforcement.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_projection_repro.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_protocol_classes.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_resolved_secrets.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_schema_scoped_functions.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_schema_utils.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_setting_secret_annotations.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_table_buffering_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_table_function_dynamic_to_string.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_tcp_transport.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_type_bounds.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_union_argument.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_worker_cli.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/test_worker_page.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/transactor/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/tests/transactor/test_transactor.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_duckdb.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_storage_profile.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/accumulate/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/accumulate/worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/_common.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/basic.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/dynamic.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/generic.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/listagg.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/percentile.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/same_name.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/secret_typed.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/streaming.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/varargs.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/aggregate/window.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/attach_options.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/bad_enum.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/bad_protocol.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/cancellable.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/catalog.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/companion.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/copy_from.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/copy_to.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/http_server.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/narrow_bind/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/narrow_bind/worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/nest_tensor.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/orchard_catalog.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/projection_repro/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/projection_repro/worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/_common.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/arithmetic.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/bench_ladder.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/binary.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/formatting.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/geo.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/null_handling.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/random_demo.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/same_name.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/settings_secrets.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/scalar/type_info.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/schema_reconcile/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/schema_reconcile/worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/simple_writable.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/_common.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/batch_index.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/batch_index_broken.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/cache.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/catalog_scans.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/filters.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/late_materialization.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/make_series.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/misc.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/order_modes.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/pairs.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/partition_columns.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/partition_columns_broken.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/profiling_example.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/required_filters.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/same_name_cached.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/sequence.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/settings.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/transaction_storage.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/tt_pushdown.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/typed_probe.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table/versioned.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table_in_out.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/table_in_out_same_name.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/twin_catalogs.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/versioned.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/versioned_tables.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/writable/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/writable/generic.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/writable/table.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/_test_fixtures/writable/worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/aggregate_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/argument_spec.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/arguments.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/attach_header.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/auth.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/cache_control.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/_descriptor_spec.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/attach_option.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/catalog_interface.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/descriptors.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/duckdb_statistics.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/secret_type.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/setting.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/catalog/storage.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/catalog_mixin.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/cli.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/cli_catalog.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/cli_schema.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/cli_table.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/cli_transaction.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/cli_utils.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/cli_view.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/client/client.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/_common.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/cpp_constants.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/cpp_protocol_version.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/cpp_request_builders.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/cpp_schemas.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/cpp_secret_protocol_version.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/cpp_secret_request_builders.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/cpp_secret_schemas.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/go_schemas.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/protocol_version.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/ts_client.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/codegen/ts_schemas.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/copy_from_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/copy_to_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/exceptions.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/function_storage.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/function_storage_azure_sql.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/function_storage_cf_do.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/http/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/http/demo_storage.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/http/describe_json.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/http/landing.html +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/http/landing_page.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/http/worker_page.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/invocation.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/logging_config.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/meta_worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/metadata.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/otel.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/protocol.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/protocol_version.txt +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/py.typed +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/scalar_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/schema_utils.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/secret_protocol.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/secret_service.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/table_buffering_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/table_filter_pushdown.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/table_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/table_in_out_function.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/transactor/__init__.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/transactor/_duckdb_compat.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/transactor/client.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/transactor/protocol.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/transactor/server.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/vgi/worker.py +0 -0
- {vgi_python-0.22.0 → vgi_python-0.22.1}/wrangler.jsonc +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vgi-python
|
|
3
|
-
Version: 0.22.
|
|
3
|
+
Version: 0.22.1
|
|
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: httpx>=0.24
|
|
|
162
162
|
Requires-Dist: platformdirs
|
|
163
163
|
Requires-Dist: pyarrow
|
|
164
164
|
Requires-Dist: typer>=0.9
|
|
165
|
-
Requires-Dist: vgi-rpc>=0.28.
|
|
165
|
+
Requires-Dist: vgi-rpc>=0.28.3
|
|
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'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "vgi-python"
|
|
3
|
-
version = "0.22.
|
|
3
|
+
version = "0.22.1"
|
|
4
4
|
description = "Vector Gateway Interface - Connect DuckDB to external programs via Apache Arrow"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
keywords = [
|
|
@@ -40,7 +40,7 @@ dependencies = [
|
|
|
40
40
|
"pyarrow",
|
|
41
41
|
"typer>=0.9",
|
|
42
42
|
"platformdirs",
|
|
43
|
-
"vgi-rpc>=0.28.
|
|
43
|
+
"vgi-rpc>=0.28.3",
|
|
44
44
|
"httpx>=0.24",
|
|
45
45
|
]
|
|
46
46
|
|
|
@@ -206,6 +206,57 @@ class TestCreateApp:
|
|
|
206
206
|
|
|
207
207
|
assert isinstance(app, falcon.App)
|
|
208
208
|
|
|
209
|
+
@staticmethod
|
|
210
|
+
def _health_proof_header(**env: str) -> str | None:
|
|
211
|
+
"""Serve an app under ``env`` and read the proof capability header.
|
|
212
|
+
|
|
213
|
+
Args:
|
|
214
|
+
**env: ``VGI_PROXY_PROOF_*`` values to set for the duration.
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
The ``VGI-Proxy-Proof-Required`` value, or ``None`` when absent.
|
|
218
|
+
|
|
219
|
+
"""
|
|
220
|
+
import falcon.testing
|
|
221
|
+
|
|
222
|
+
with pytest.MonkeyPatch.context() as mp:
|
|
223
|
+
for key in ("VGI_PROXY_PROOF_MODE", "VGI_PROXY_PROOF_ORIGIN_ID", "VGI_PROXY_PROOF_SECRETS"):
|
|
224
|
+
mp.delenv(key, raising=False)
|
|
225
|
+
for key, value in env.items():
|
|
226
|
+
mp.setenv(key, value)
|
|
227
|
+
app = create_app(_SingleWorker, prefix="/vgi", describe=False)
|
|
228
|
+
resp = falcon.testing.TestClient(app).simulate_get("/vgi/health")
|
|
229
|
+
assert resp.status_code == 200
|
|
230
|
+
return {k.lower(): v for k, v in resp.headers.items()}.get("vgi-proxy-proof-required")
|
|
231
|
+
|
|
232
|
+
def test_advertises_proof_required_in_require_mode(self) -> None:
|
|
233
|
+
"""A ``require``-mode worker tells proxies it actually enforces.
|
|
234
|
+
|
|
235
|
+
Derived from ``VGI_PROXY_PROOF_MODE`` rather than passed separately,
|
|
236
|
+
because that env var is also where the gate itself comes from — so the
|
|
237
|
+
advertisement cannot drift from the posture it describes.
|
|
238
|
+
"""
|
|
239
|
+
value = self._health_proof_header(
|
|
240
|
+
VGI_PROXY_PROOF_MODE="require",
|
|
241
|
+
VGI_PROXY_PROOF_ORIGIN_ID="worker-a",
|
|
242
|
+
VGI_PROXY_PROOF_SECRETS="k:" + "11" * 32,
|
|
243
|
+
)
|
|
244
|
+
assert value == "true"
|
|
245
|
+
|
|
246
|
+
@pytest.mark.parametrize("mode", ["off", "allow"])
|
|
247
|
+
def test_does_not_advertise_below_require(self, mode: str) -> None:
|
|
248
|
+
"""Only ``require`` advertises — ``allow`` never denies, so it must not.
|
|
249
|
+
|
|
250
|
+
A proxy reads this to confirm a rollout landed; an ``allow``-mode worker
|
|
251
|
+
that claimed to require would report the rollout complete while every
|
|
252
|
+
unproofed direct caller still sailed through.
|
|
253
|
+
"""
|
|
254
|
+
env = {"VGI_PROXY_PROOF_MODE": mode}
|
|
255
|
+
if mode != "off":
|
|
256
|
+
env["VGI_PROXY_PROOF_ORIGIN_ID"] = "worker-a"
|
|
257
|
+
env["VGI_PROXY_PROOF_SECRETS"] = "k:" + "11" * 32
|
|
258
|
+
assert self._health_proof_header(**env) is None
|
|
259
|
+
|
|
209
260
|
def test_signing_key_passed(self) -> None:
|
|
210
261
|
"""Explicit signing_key is accepted without warning."""
|
|
211
262
|
import warnings
|
|
@@ -2228,7 +2228,7 @@ requires-dist = [
|
|
|
2228
2228
|
|
|
2229
2229
|
[[package]]
|
|
2230
2230
|
name = "vgi-python"
|
|
2231
|
-
version = "0.22.
|
|
2231
|
+
version = "0.22.1"
|
|
2232
2232
|
source = { editable = "." }
|
|
2233
2233
|
dependencies = [
|
|
2234
2234
|
{ name = "click" },
|
|
@@ -2338,7 +2338,7 @@ requires-dist = [
|
|
|
2338
2338
|
{ name = "vgi-python", extras = ["test-fixtures"], marker = "extra == 'test-fixtures-writable'" },
|
|
2339
2339
|
{ name = "vgi-python", extras = ["test-fixtures", "test-fixtures-writable", "http", "oauth", "otel", "sentry", "azure"], marker = "extra == 'dev'" },
|
|
2340
2340
|
{ name = "vgi-python", extras = ["transactor"], marker = "extra == 'test-fixtures-writable'" },
|
|
2341
|
-
{ name = "vgi-rpc", specifier = ">=0.28.
|
|
2341
|
+
{ name = "vgi-rpc", specifier = ">=0.28.3" },
|
|
2342
2342
|
{ name = "vgi-rpc", extras = ["conformance", "external", "http", "oauth", "otel", "sentry"], marker = "extra == 'dev'" },
|
|
2343
2343
|
{ name = "vgi-rpc", extras = ["http"], marker = "extra == 'http'" },
|
|
2344
2344
|
{ name = "vgi-rpc", extras = ["oauth"], marker = "extra == 'oauth'" },
|
|
@@ -2367,7 +2367,7 @@ docs = [
|
|
|
2367
2367
|
|
|
2368
2368
|
[[package]]
|
|
2369
2369
|
name = "vgi-rpc"
|
|
2370
|
-
version = "0.28.
|
|
2370
|
+
version = "0.28.3"
|
|
2371
2371
|
source = { registry = "https://pypi.org/simple" }
|
|
2372
2372
|
dependencies = [
|
|
2373
2373
|
{ name = "docstring-parser" },
|
|
@@ -2375,9 +2375,9 @@ dependencies = [
|
|
|
2375
2375
|
{ name = "pywin32", marker = "sys_platform == 'win32'" },
|
|
2376
2376
|
{ name = "tzdata", marker = "sys_platform == 'win32'" },
|
|
2377
2377
|
]
|
|
2378
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2378
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a0/5a/1996a64ca9ecb0a030cee5a4b9944301f20d6269369b39a5d30f07bf71a9/vgi_rpc-0.28.3.tar.gz", hash = "sha256:772f535912926ce47c17c3eba33769ad226171277159c591f441169f642e14d6", size = 908548, upload-time = "2026-07-27T16:45:47.344Z" }
|
|
2379
2379
|
wheels = [
|
|
2380
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2380
|
+
{ url = "https://files.pythonhosted.org/packages/70/d1/db1b3aa48d1d0526bc30ad72e51ad8fd7f67f693310de8c143e707a87d0a/vgi_rpc-0.28.3-py3-none-any.whl", hash = "sha256:bf913b9b95ac4abde4e4ddad5b228c1d81bd748268773f9a2e5fa9626cc68bf7", size = 406388, upload-time = "2026-07-27T16:45:45.905Z" },
|
|
2381
2381
|
]
|
|
2382
2382
|
|
|
2383
2383
|
[package.optional-dependencies]
|
|
@@ -202,6 +202,7 @@ def create_app(
|
|
|
202
202
|
signing_key: bytes | None = None,
|
|
203
203
|
log_level: int = logging.INFO,
|
|
204
204
|
authenticate: Callable[[falcon.Request], AuthContext] | None = None,
|
|
205
|
+
proxy_proof_required: bool | None = None,
|
|
205
206
|
oauth_resource_metadata: Any = None,
|
|
206
207
|
otel_config: OtelConfig | None = None,
|
|
207
208
|
max_stream_response_bytes: int | None = None,
|
|
@@ -224,6 +225,12 @@ def create_app(
|
|
|
224
225
|
authenticate: Optional callback that validates each HTTP request
|
|
225
226
|
and returns an `AuthContext`. When ``None``, all requests are
|
|
226
227
|
anonymous.
|
|
228
|
+
proxy_proof_required: Whether to advertise ``VGI-Proxy-Proof-Required``
|
|
229
|
+
so a proxy can confirm this worker actually enforces the proof it
|
|
230
|
+
mints. ``None`` (the default) derives it from
|
|
231
|
+
``VGI_PROXY_PROOF_MODE``, which is also where the gate itself comes
|
|
232
|
+
from — so the advertisement cannot drift from the posture. Pass a
|
|
233
|
+
bool only when supplying a hand-built gate via ``authenticate``.
|
|
227
234
|
oauth_resource_metadata: Optional `OAuthResourceMetadata` for
|
|
228
235
|
RFC 9728 discovery endpoint.
|
|
229
236
|
otel_config: Optional OpenTelemetry configuration. When provided,
|
|
@@ -259,6 +266,9 @@ def create_app(
|
|
|
259
266
|
if signing_key is None:
|
|
260
267
|
signing_key = os.urandom(32)
|
|
261
268
|
|
|
269
|
+
if proxy_proof_required is None:
|
|
270
|
+
proxy_proof_required = (os.environ.get("VGI_PROXY_PROOF_MODE") or "").strip().lower() == "require"
|
|
271
|
+
|
|
262
272
|
worker = worker_cls(quiet=True, log_level=log_level)
|
|
263
273
|
worker._vgi_tracer = VgiTracer.create(otel_config)
|
|
264
274
|
worker._signing_key = signing_key
|
|
@@ -271,6 +281,7 @@ def create_app(
|
|
|
271
281
|
cors_origins=cors_origins,
|
|
272
282
|
token_key=signing_key,
|
|
273
283
|
authenticate=authenticate,
|
|
284
|
+
proxy_proof_required=proxy_proof_required,
|
|
274
285
|
oauth_resource_metadata=oauth_resource_metadata,
|
|
275
286
|
otel_config=otel_config,
|
|
276
287
|
max_stream_response_bytes=max_stream_response_bytes,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_constant_columns_function.py
RENAMED
|
File without changes
|
{vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_double_sequence_function.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_nested_sequence_function.py
RENAMED
|
File without changes
|
|
File without changes
|
{vgi_python-0.22.0 → vgi_python-0.22.1}/tests/table/generator/test_projected_data_function.py
RENAMED
|
File without changes
|
|
File without changes
|