vgi-python 0.8.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.8.0/.gitattributes +5 -0
- vgi_python-0.8.0/.github/workflows/ci.yml +144 -0
- vgi_python-0.8.0/.github/workflows/release.yml +97 -0
- vgi_python-0.8.0/.gitignore +49 -0
- vgi_python-0.8.0/.python-version +1 -0
- vgi_python-0.8.0/CLAUDE.md +511 -0
- vgi_python-0.8.0/LICENSE +134 -0
- vgi_python-0.8.0/PKG-INFO +735 -0
- vgi_python-0.8.0/README.md +526 -0
- vgi_python-0.8.0/dist-vgi/.gitignore +1 -0
- vgi_python-0.8.0/docs/aggregate-functions.md +370 -0
- vgi_python-0.8.0/docs/argument-serialization.md +270 -0
- vgi_python-0.8.0/docs/authentication.md +143 -0
- vgi_python-0.8.0/docs/catalog-interface.md +782 -0
- vgi_python-0.8.0/docs/cli.md +716 -0
- vgi_python-0.8.0/docs/column-statistics.md +190 -0
- vgi_python-0.8.0/docs/filter-pushdown.md +166 -0
- vgi_python-0.8.0/docs/generator-api.md +350 -0
- vgi_python-0.8.0/docs/lifecycle.md +122 -0
- vgi_python-0.8.0/docs/metadata.md +124 -0
- vgi_python-0.8.0/docs/shared-storage.md +203 -0
- vgi_python-0.8.0/docs/vgi-logo.png +0 -0
- vgi_python-0.8.0/packages/vgi-fixtures/LICENSE +134 -0
- vgi_python-0.8.0/packages/vgi-fixtures/README.md +49 -0
- vgi_python-0.8.0/packages/vgi-fixtures/pyproject.toml +69 -0
- vgi_python-0.8.0/pyproject.toml +190 -0
- vgi_python-0.8.0/scripts/measure_startup.py +205 -0
- vgi_python-0.8.0/scripts/run_all_tests.sh +215 -0
- vgi_python-0.8.0/test-data/generate.sh +3 -0
- vgi_python-0.8.0/tests/__init__.py +3 -0
- vgi_python-0.8.0/tests/_http_fixtures.py +128 -0
- vgi_python-0.8.0/tests/catalog/__init__.py +3 -0
- vgi_python-0.8.0/tests/catalog/test_catalog_interface.py +1090 -0
- vgi_python-0.8.0/tests/catalog/test_client_catalog.py +87 -0
- vgi_python-0.8.0/tests/catalog/test_column_statistics.py +755 -0
- vgi_python-0.8.0/tests/catalog/test_declarative.py +1780 -0
- vgi_python-0.8.0/tests/catalog/test_example_worker_catalog.py +499 -0
- vgi_python-0.8.0/tests/catalog/test_integration.py +704 -0
- vgi_python-0.8.0/tests/catalog/test_required_field_filter_paths.py +98 -0
- vgi_python-0.8.0/tests/catalog/test_scan_branches.py +309 -0
- vgi_python-0.8.0/tests/catalog/test_serialization.py +1182 -0
- vgi_python-0.8.0/tests/catalog/test_setting.py +300 -0
- vgi_python-0.8.0/tests/catalog/test_storage.py +254 -0
- vgi_python-0.8.0/tests/catalog/test_time_travel.py +447 -0
- vgi_python-0.8.0/tests/catalog/test_writable_table.py +317 -0
- vgi_python-0.8.0/tests/client/__init__.py +3 -0
- vgi_python-0.8.0/tests/client/test_broken_pipe.py +104 -0
- vgi_python-0.8.0/tests/client/test_cli.py +1050 -0
- vgi_python-0.8.0/tests/client/test_cli_catalog_functions.py +535 -0
- vgi_python-0.8.0/tests/client/test_worker_debug.py +134 -0
- vgi_python-0.8.0/tests/conformance/__init__.py +9 -0
- vgi_python-0.8.0/tests/conformance/_stub.py +27 -0
- vgi_python-0.8.0/tests/conformance/conftest.py +22 -0
- vgi_python-0.8.0/tests/conformance/test_accumulate.py +425 -0
- vgi_python-0.8.0/tests/conformance/test_aggregate.py +33 -0
- vgi_python-0.8.0/tests/conformance/test_attach.py +24 -0
- vgi_python-0.8.0/tests/conformance/test_bearer_auth.py +14 -0
- vgi_python-0.8.0/tests/conformance/test_directory_parity.py +90 -0
- vgi_python-0.8.0/tests/conformance/test_function_inventory.py +206 -0
- vgi_python-0.8.0/tests/conformance/test_http_client.py +200 -0
- vgi_python-0.8.0/tests/conformance/test_http_external_location.py +122 -0
- vgi_python-0.8.0/tests/conformance/test_http_upload_url.py +123 -0
- vgi_python-0.8.0/tests/conformance/test_macro.py +9 -0
- vgi_python-0.8.0/tests/conformance/test_overload.py +17 -0
- vgi_python-0.8.0/tests/conformance/test_protocol_inventory.py +325 -0
- vgi_python-0.8.0/tests/conformance/test_protocol_version.py +57 -0
- vgi_python-0.8.0/tests/conformance/test_resumable_scan.py +156 -0
- vgi_python-0.8.0/tests/conformance/test_scalar.py +31 -0
- vgi_python-0.8.0/tests/conformance/test_scalar_attach_opaque_data.py +87 -0
- vgi_python-0.8.0/tests/conformance/test_secret.py +18 -0
- vgi_python-0.8.0/tests/conformance/test_settings.py +17 -0
- vgi_python-0.8.0/tests/conformance/test_table.py +44 -0
- vgi_python-0.8.0/tests/conformance/test_table_in_out.py +22 -0
- vgi_python-0.8.0/tests/conformance/test_view.py +9 -0
- vgi_python-0.8.0/tests/conformance/test_writable.py +36 -0
- vgi_python-0.8.0/tests/conftest.py +260 -0
- vgi_python-0.8.0/tests/scalar/__init__.py +3 -0
- vgi_python-0.8.0/tests/scalar/test_bernoulli_function.py +49 -0
- vgi_python-0.8.0/tests/scalar/test_binary_packet_function.py +67 -0
- vgi_python-0.8.0/tests/scalar/test_client.py +724 -0
- vgi_python-0.8.0/tests/scalar/test_conditional_message_function.py +51 -0
- vgi_python-0.8.0/tests/scalar/test_hash_seed_function.py +110 -0
- vgi_python-0.8.0/tests/scalar/test_multiply_by_setting_function.py +48 -0
- vgi_python-0.8.0/tests/scalar/test_multiply_function.py +66 -0
- vgi_python-0.8.0/tests/scalar/test_random_bytes_function.py +105 -0
- vgi_python-0.8.0/tests/scalar/test_return_secret_value_function.py +41 -0
- vgi_python-0.8.0/tests/table/__init__.py +3 -0
- vgi_python-0.8.0/tests/table/generator/__init__.py +3 -0
- vgi_python-0.8.0/tests/table/generator/test_constant_columns_function.py +54 -0
- vgi_python-0.8.0/tests/table/generator/test_double_sequence_function.py +50 -0
- vgi_python-0.8.0/tests/table/generator/test_exception_function.py +61 -0
- vgi_python-0.8.0/tests/table/generator/test_filter_echo_function.py +64 -0
- vgi_python-0.8.0/tests/table/generator/test_logging_function.py +56 -0
- vgi_python-0.8.0/tests/table/generator/test_nested_sequence_function.py +69 -0
- vgi_python-0.8.0/tests/table/generator/test_partitioned_function.py +120 -0
- vgi_python-0.8.0/tests/table/generator/test_projected_data_function.py +49 -0
- vgi_python-0.8.0/tests/table/generator/test_sequence_function.py +36 -0
- vgi_python-0.8.0/tests/table/generator/test_settings_function.py +120 -0
- vgi_python-0.8.0/tests/table/generator/test_struct_settings_function.py +48 -0
- vgi_python-0.8.0/tests/table/generator/test_ten_thousand_function.py +29 -0
- vgi_python-0.8.0/tests/table_in_out/__init__.py +3 -0
- vgi_python-0.8.0/tests/table_in_out/generator/__init__.py +3 -0
- vgi_python-0.8.0/tests/table_in_out/generator/test_buffer_input_function.py +42 -0
- vgi_python-0.8.0/tests/table_in_out/generator/test_echo_function.py +53 -0
- vgi_python-0.8.0/tests/table_in_out/generator/test_exception_functions.py +118 -0
- vgi_python-0.8.0/tests/table_in_out/generator/test_filter_by_setting_function.py +74 -0
- vgi_python-0.8.0/tests/table_in_out/generator/test_repeat_inputs_function.py +108 -0
- vgi_python-0.8.0/tests/table_in_out/generator/test_sum_all_columns_function.py +286 -0
- vgi_python-0.8.0/tests/table_in_out/test_client.py +279 -0
- vgi_python-0.8.0/tests/test_access_log_audit.py +265 -0
- vgi_python-0.8.0/tests/test_aggregate_function.py +785 -0
- vgi_python-0.8.0/tests/test_argument_spec.py +676 -0
- vgi_python-0.8.0/tests/test_auth.py +709 -0
- vgi_python-0.8.0/tests/test_bind_exceptions.py +113 -0
- vgi_python-0.8.0/tests/test_bind_request_at_clause.py +109 -0
- vgi_python-0.8.0/tests/test_bound_storage_conformance.py +279 -0
- vgi_python-0.8.0/tests/test_catalog_auth_binding.py +305 -0
- vgi_python-0.8.0/tests/test_documentation_examples.py +208 -0
- vgi_python-0.8.0/tests/test_example_function_arg_types.py +181 -0
- vgi_python-0.8.0/tests/test_exception_handling.py +270 -0
- vgi_python-0.8.0/tests/test_exceptions.py +234 -0
- vgi_python-0.8.0/tests/test_filter_pushdown.py +1406 -0
- vgi_python-0.8.0/tests/test_filter_pushdown_extension.py +322 -0
- vgi_python-0.8.0/tests/test_function_storage.py +552 -0
- vgi_python-0.8.0/tests/test_function_storage_azure_sql.py +485 -0
- vgi_python-0.8.0/tests/test_function_storage_cf_do.py +388 -0
- vgi_python-0.8.0/tests/test_function_storage_cf_do_integration.py +204 -0
- vgi_python-0.8.0/tests/test_function_storage_conformance.py +209 -0
- vgi_python-0.8.0/tests/test_generated_cpp_constants.py +107 -0
- vgi_python-0.8.0/tests/test_generated_cpp_protocol_version.py +93 -0
- vgi_python-0.8.0/tests/test_generated_cpp_request_builders.py +91 -0
- vgi_python-0.8.0/tests/test_generated_cpp_schemas.py +222 -0
- vgi_python-0.8.0/tests/test_generated_cpp_secret.py +72 -0
- vgi_python-0.8.0/tests/test_generated_go_schemas.py +214 -0
- vgi_python-0.8.0/tests/test_generated_protocol_version.py +71 -0
- vgi_python-0.8.0/tests/test_generated_schemas_cross_lang.py +116 -0
- vgi_python-0.8.0/tests/test_generated_ts_client.py +102 -0
- vgi_python-0.8.0/tests/test_generated_ts_schemas.py +217 -0
- vgi_python-0.8.0/tests/test_http_demo_storage.py +412 -0
- vgi_python-0.8.0/tests/test_http_s3_offload_input.py +191 -0
- vgi_python-0.8.0/tests/test_http_s3_offload_output.py +197 -0
- vgi_python-0.8.0/tests/test_metadata.py +615 -0
- vgi_python-0.8.0/tests/test_mypy_consolidated.py +37 -0
- vgi_python-0.8.0/tests/test_nest_tensor.py +495 -0
- vgi_python-0.8.0/tests/test_otel.py +465 -0
- vgi_python-0.8.0/tests/test_projection_enforcement.py +72 -0
- vgi_python-0.8.0/tests/test_projection_repro.py +247 -0
- vgi_python-0.8.0/tests/test_protocol_classes.py +1153 -0
- vgi_python-0.8.0/tests/test_schema_utils.py +290 -0
- vgi_python-0.8.0/tests/test_serve.py +589 -0
- vgi_python-0.8.0/tests/test_setting_secret_annotations.py +501 -0
- vgi_python-0.8.0/tests/test_table_buffering_function.py +433 -0
- vgi_python-0.8.0/tests/test_table_function_dynamic_to_string.py +186 -0
- vgi_python-0.8.0/tests/test_type_bounds.py +166 -0
- vgi_python-0.8.0/tests/test_worker.py +1637 -0
- vgi_python-0.8.0/tests/test_worker_cli.py +112 -0
- vgi_python-0.8.0/tests/test_worker_page.py +824 -0
- vgi_python-0.8.0/tests/transactor/__init__.py +3 -0
- vgi_python-0.8.0/tests/transactor/test_transactor.py +711 -0
- vgi_python-0.8.0/uv.lock +1982 -0
- vgi_python-0.8.0/vgi/__init__.py +152 -0
- vgi_python-0.8.0/vgi/_duckdb.py +62 -0
- vgi_python-0.8.0/vgi/_storage_profile.py +132 -0
- vgi_python-0.8.0/vgi/_test_fixtures/__init__.py +20 -0
- vgi_python-0.8.0/vgi/_test_fixtures/accumulate/__init__.py +19 -0
- vgi_python-0.8.0/vgi/_test_fixtures/accumulate/worker.py +762 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/__init__.py +62 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/_common.py +21 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/basic.py +232 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/dynamic.py +409 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/generic.py +86 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/listagg.py +71 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/percentile.py +107 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/streaming.py +192 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/varargs.py +75 -0
- vgi_python-0.8.0/vgi/_test_fixtures/aggregate/window.py +380 -0
- vgi_python-0.8.0/vgi/_test_fixtures/attach_options.py +308 -0
- vgi_python-0.8.0/vgi/_test_fixtures/bad_protocol.py +62 -0
- vgi_python-0.8.0/vgi/_test_fixtures/cancellable.py +336 -0
- vgi_python-0.8.0/vgi/_test_fixtures/catalog.py +813 -0
- vgi_python-0.8.0/vgi/_test_fixtures/http_server.py +394 -0
- vgi_python-0.8.0/vgi/_test_fixtures/nest_tensor.py +614 -0
- vgi_python-0.8.0/vgi/_test_fixtures/orchard_catalog.py +47 -0
- vgi_python-0.8.0/vgi/_test_fixtures/projection_repro/__init__.py +6 -0
- vgi_python-0.8.0/vgi/_test_fixtures/projection_repro/worker.py +454 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/__init__.py +116 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/_common.py +69 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/arithmetic.py +321 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/binary.py +120 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/formatting.py +176 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/geo.py +300 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/null_handling.py +107 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/random_demo.py +171 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/settings_secrets.py +102 -0
- vgi_python-0.8.0/vgi/_test_fixtures/scalar/type_info.py +219 -0
- vgi_python-0.8.0/vgi/_test_fixtures/schema_reconcile/__init__.py +29 -0
- vgi_python-0.8.0/vgi/_test_fixtures/schema_reconcile/worker.py +653 -0
- vgi_python-0.8.0/vgi/_test_fixtures/simple_writable.py +793 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/__init__.py +221 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/_common.py +162 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/batch_index.py +283 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/batch_index_broken.py +200 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/catalog_scans.py +162 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/filters.py +1005 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/late_materialization.py +249 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/make_series.py +273 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/misc.py +499 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/order_modes.py +164 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/pairs.py +437 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/partition_columns.py +472 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/partition_columns_broken.py +304 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/profiling_example.py +195 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/required_filters.py +234 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/sequence.py +710 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/settings.py +426 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/transaction_storage.py +162 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/tt_pushdown.py +191 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table/versioned.py +230 -0
- vgi_python-0.8.0/vgi/_test_fixtures/table_in_out.py +1392 -0
- vgi_python-0.8.0/vgi/_test_fixtures/versioned.py +155 -0
- vgi_python-0.8.0/vgi/_test_fixtures/versioned_tables.py +595 -0
- vgi_python-0.8.0/vgi/_test_fixtures/worker.py +1631 -0
- vgi_python-0.8.0/vgi/_test_fixtures/writable/__init__.py +8 -0
- vgi_python-0.8.0/vgi/_test_fixtures/writable/generic.py +236 -0
- vgi_python-0.8.0/vgi/_test_fixtures/writable/table.py +149 -0
- vgi_python-0.8.0/vgi/_test_fixtures/writable/worker.py +1148 -0
- vgi_python-0.8.0/vgi/aggregate_function.py +607 -0
- vgi_python-0.8.0/vgi/argument_spec.py +472 -0
- vgi_python-0.8.0/vgi/arguments.py +1747 -0
- vgi_python-0.8.0/vgi/auth.py +55 -0
- vgi_python-0.8.0/vgi/catalog/__init__.py +88 -0
- vgi_python-0.8.0/vgi/catalog/attach_option.py +206 -0
- vgi_python-0.8.0/vgi/catalog/catalog_interface.py +2767 -0
- vgi_python-0.8.0/vgi/catalog/descriptors.py +870 -0
- vgi_python-0.8.0/vgi/catalog/duckdb_statistics.py +377 -0
- vgi_python-0.8.0/vgi/catalog/secret_type.py +96 -0
- vgi_python-0.8.0/vgi/catalog/setting.py +253 -0
- vgi_python-0.8.0/vgi/catalog/storage.py +372 -0
- vgi_python-0.8.0/vgi/client/__init__.py +67 -0
- vgi_python-0.8.0/vgi/client/catalog_mixin.py +1251 -0
- vgi_python-0.8.0/vgi/client/cli.py +582 -0
- vgi_python-0.8.0/vgi/client/cli_catalog.py +182 -0
- vgi_python-0.8.0/vgi/client/cli_schema.py +270 -0
- vgi_python-0.8.0/vgi/client/cli_table.py +907 -0
- vgi_python-0.8.0/vgi/client/cli_transaction.py +97 -0
- vgi_python-0.8.0/vgi/client/cli_utils.py +441 -0
- vgi_python-0.8.0/vgi/client/cli_view.py +303 -0
- vgi_python-0.8.0/vgi/client/client.py +2183 -0
- vgi_python-0.8.0/vgi/codegen/__init__.py +8 -0
- vgi_python-0.8.0/vgi/codegen/_common.py +255 -0
- vgi_python-0.8.0/vgi/codegen/cpp_constants.py +142 -0
- vgi_python-0.8.0/vgi/codegen/cpp_protocol_version.py +113 -0
- vgi_python-0.8.0/vgi/codegen/cpp_request_builders.py +444 -0
- vgi_python-0.8.0/vgi/codegen/cpp_schemas.py +243 -0
- vgi_python-0.8.0/vgi/codegen/cpp_secret_protocol_version.py +68 -0
- vgi_python-0.8.0/vgi/codegen/cpp_secret_request_builders.py +61 -0
- vgi_python-0.8.0/vgi/codegen/cpp_secret_schemas.py +62 -0
- vgi_python-0.8.0/vgi/codegen/go_schemas.py +211 -0
- vgi_python-0.8.0/vgi/codegen/protocol_version.py +61 -0
- vgi_python-0.8.0/vgi/codegen/ts_client.py +434 -0
- vgi_python-0.8.0/vgi/codegen/ts_schemas.py +253 -0
- vgi_python-0.8.0/vgi/exceptions.py +205 -0
- vgi_python-0.8.0/vgi/function.py +245 -0
- vgi_python-0.8.0/vgi/function_storage.py +1636 -0
- vgi_python-0.8.0/vgi/function_storage_azure_sql.py +922 -0
- vgi_python-0.8.0/vgi/function_storage_cf_do.py +740 -0
- vgi_python-0.8.0/vgi/http/__init__.py +25 -0
- vgi_python-0.8.0/vgi/http/demo_storage.py +212 -0
- vgi_python-0.8.0/vgi/http/worker_page.py +1252 -0
- vgi_python-0.8.0/vgi/invocation.py +154 -0
- vgi_python-0.8.0/vgi/logging_config.py +93 -0
- vgi_python-0.8.0/vgi/meta_worker.py +661 -0
- vgi_python-0.8.0/vgi/metadata.py +1403 -0
- vgi_python-0.8.0/vgi/otel.py +406 -0
- vgi_python-0.8.0/vgi/protocol.py +2418 -0
- vgi_python-0.8.0/vgi/protocol_version.txt +1 -0
- vgi_python-0.8.0/vgi/py.typed +0 -0
- vgi_python-0.8.0/vgi/scalar_function.py +1211 -0
- vgi_python-0.8.0/vgi/schema_utils.py +234 -0
- vgi_python-0.8.0/vgi/secret_protocol.py +124 -0
- vgi_python-0.8.0/vgi/secret_service.py +238 -0
- vgi_python-0.8.0/vgi/serve.py +769 -0
- vgi_python-0.8.0/vgi/table_buffering_function.py +443 -0
- vgi_python-0.8.0/vgi/table_filter_pushdown.py +1528 -0
- vgi_python-0.8.0/vgi/table_function.py +1130 -0
- vgi_python-0.8.0/vgi/table_in_out_function.py +383 -0
- vgi_python-0.8.0/vgi/transactor/__init__.py +24 -0
- vgi_python-0.8.0/vgi/transactor/_duckdb_compat.py +27 -0
- vgi_python-0.8.0/vgi/transactor/client.py +137 -0
- vgi_python-0.8.0/vgi/transactor/protocol.py +149 -0
- vgi_python-0.8.0/vgi/transactor/server.py +740 -0
- vgi_python-0.8.0/vgi/worker.py +4761 -0
- vgi_python-0.8.0/wrangler.jsonc +14 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
# Least-privilege default for all jobs — none need write access. (The release
|
|
11
|
+
# workflow grants id-token: write per-job for OIDC publishing; CI needs read.)
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
test:
|
|
17
|
+
name: Python ${{ matrix.python-version }} on ${{ matrix.os }}
|
|
18
|
+
runs-on: ${{ matrix.os }}
|
|
19
|
+
strategy:
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
23
|
+
python-version: ["3.13", "3.14"]
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v5
|
|
27
|
+
|
|
28
|
+
- name: Install uv
|
|
29
|
+
uses: astral-sh/setup-uv@v8.2.0
|
|
30
|
+
|
|
31
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
32
|
+
run: uv python install ${{ matrix.python-version }}
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
run: uv sync --all-extras
|
|
36
|
+
|
|
37
|
+
- name: Run tests
|
|
38
|
+
run: uv run pytest
|
|
39
|
+
|
|
40
|
+
lint:
|
|
41
|
+
name: Lint
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
steps:
|
|
44
|
+
- uses: actions/checkout@v5
|
|
45
|
+
|
|
46
|
+
- name: Install uv
|
|
47
|
+
uses: astral-sh/setup-uv@v8.2.0
|
|
48
|
+
|
|
49
|
+
- name: Install dependencies
|
|
50
|
+
run: uv sync --all-extras
|
|
51
|
+
|
|
52
|
+
- name: Check formatting
|
|
53
|
+
run: uv run ruff format --check .
|
|
54
|
+
|
|
55
|
+
- name: Check linting
|
|
56
|
+
run: uv run ruff check .
|
|
57
|
+
|
|
58
|
+
- name: Type check (mypy)
|
|
59
|
+
run: uv run mypy vgi/
|
|
60
|
+
|
|
61
|
+
# ty is pre-1.0 and its inference drifts release-to-release; keep it
|
|
62
|
+
# visible as a signal but don't gate CI on it (mypy is the blocking
|
|
63
|
+
# type gate).
|
|
64
|
+
- name: Type check (ty, non-blocking)
|
|
65
|
+
run: uv run ty check vgi/
|
|
66
|
+
continue-on-error: true
|
|
67
|
+
|
|
68
|
+
s3-offload-localstack:
|
|
69
|
+
name: S3 Offload Tests (LocalStack)
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
services:
|
|
72
|
+
localstack:
|
|
73
|
+
image: localstack/localstack:3.0
|
|
74
|
+
ports:
|
|
75
|
+
- 4566:4566
|
|
76
|
+
env:
|
|
77
|
+
SERVICES: s3
|
|
78
|
+
AWS_DEFAULT_REGION: us-east-1
|
|
79
|
+
steps:
|
|
80
|
+
- uses: actions/checkout@v5
|
|
81
|
+
|
|
82
|
+
- name: Checkout vgi-rpc
|
|
83
|
+
uses: actions/checkout@v5
|
|
84
|
+
with:
|
|
85
|
+
repository: Query-farm/vgi-rpc-python
|
|
86
|
+
path: vgi-rpc
|
|
87
|
+
|
|
88
|
+
- name: Install uv
|
|
89
|
+
uses: astral-sh/setup-uv@v8.2.0
|
|
90
|
+
|
|
91
|
+
- name: Set up Python 3.13
|
|
92
|
+
run: uv python install 3.13
|
|
93
|
+
|
|
94
|
+
- name: Install test dependencies
|
|
95
|
+
run: |
|
|
96
|
+
# Project env first (vgi + fixtures + dev tools), then overlay the
|
|
97
|
+
# local vgi-rpc checkout with the s3/external extras plus boto3.
|
|
98
|
+
# Subsequent uv run calls must pass --no-sync or uv re-syncs the
|
|
99
|
+
# env to the lockfile and drops the overlay.
|
|
100
|
+
uv sync --all-extras --python 3.13
|
|
101
|
+
uv pip install './vgi-rpc[http,s3,external]' boto3
|
|
102
|
+
|
|
103
|
+
- name: Create test bucket in LocalStack
|
|
104
|
+
env:
|
|
105
|
+
AWS_ACCESS_KEY_ID: test
|
|
106
|
+
AWS_SECRET_ACCESS_KEY: test
|
|
107
|
+
AWS_DEFAULT_REGION: us-east-1
|
|
108
|
+
run: |
|
|
109
|
+
uv run --no-sync python - <<'PY'
|
|
110
|
+
import time
|
|
111
|
+
import boto3
|
|
112
|
+
from botocore.exceptions import EndpointConnectionError
|
|
113
|
+
|
|
114
|
+
endpoint = "http://127.0.0.1:4566"
|
|
115
|
+
s3 = boto3.client(
|
|
116
|
+
"s3",
|
|
117
|
+
endpoint_url=endpoint,
|
|
118
|
+
aws_access_key_id="test",
|
|
119
|
+
aws_secret_access_key="test",
|
|
120
|
+
region_name="us-east-1",
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
for _ in range(30):
|
|
124
|
+
try:
|
|
125
|
+
s3.list_buckets()
|
|
126
|
+
break
|
|
127
|
+
except EndpointConnectionError:
|
|
128
|
+
time.sleep(1)
|
|
129
|
+
else:
|
|
130
|
+
raise RuntimeError("LocalStack S3 did not become ready in time")
|
|
131
|
+
|
|
132
|
+
s3.create_bucket(Bucket="vgi-offload-test")
|
|
133
|
+
PY
|
|
134
|
+
|
|
135
|
+
- name: Run HTTP S3 offload tests
|
|
136
|
+
env:
|
|
137
|
+
AWS_ACCESS_KEY_ID: test
|
|
138
|
+
AWS_SECRET_ACCESS_KEY: test
|
|
139
|
+
AWS_DEFAULT_REGION: us-east-1
|
|
140
|
+
VGI_RUN_S3_HTTP_TESTS: "1"
|
|
141
|
+
VGI_HTTP_S3_BUCKET: vgi-offload-test
|
|
142
|
+
VGI_HTTP_S3_ENDPOINT_URL: http://127.0.0.1:4566
|
|
143
|
+
PYTHONPATH: ${{ github.workspace }}
|
|
144
|
+
run: uv run --no-sync pytest tests/test_http_s3_offload_output.py tests/test_http_s3_offload_input.py -q
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
# Publishes both distributions to PyPI when a GitHub Release is published:
|
|
4
|
+
# - vgi-python (sdist + universal wheel) — the public package
|
|
5
|
+
# - vgi-fixtures (universal wheel only) — example/test workers
|
|
6
|
+
#
|
|
7
|
+
# vgi-fixtures is wheel-only on purpose: its source lives at the repo root in
|
|
8
|
+
# vgi/_test_fixtures/, which the wheel force-includes but an sdist cannot reach
|
|
9
|
+
# (see packages/vgi-fixtures/pyproject.toml). It is a pure-python py3-none-any
|
|
10
|
+
# wheel, so the wheel alone installs everywhere.
|
|
11
|
+
#
|
|
12
|
+
# Auth is PyPI Trusted Publishing (OIDC) — no API tokens. Before the first run,
|
|
13
|
+
# configure a Trusted Publisher on PyPI for BOTH projects (vgi-python,
|
|
14
|
+
# vgi-fixtures) pointing at:
|
|
15
|
+
# owner: Query-farm
|
|
16
|
+
# repository: vgi-python
|
|
17
|
+
# workflow: release.yml
|
|
18
|
+
# environment: pypi
|
|
19
|
+
# The `vgi-python` and `vgi-fixtures` versions must match the released tag.
|
|
20
|
+
|
|
21
|
+
on:
|
|
22
|
+
release:
|
|
23
|
+
types: [published]
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
build:
|
|
30
|
+
name: Build distributions
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v5
|
|
34
|
+
|
|
35
|
+
- name: Install uv
|
|
36
|
+
uses: astral-sh/setup-uv@v8.2.0
|
|
37
|
+
|
|
38
|
+
- name: Build vgi (sdist + wheel)
|
|
39
|
+
run: uv build --sdist --wheel --out-dir dist-vgi .
|
|
40
|
+
|
|
41
|
+
- name: Build vgi-fixtures (wheel only)
|
|
42
|
+
run: uv build --wheel --out-dir dist-fixtures packages/vgi-fixtures
|
|
43
|
+
|
|
44
|
+
- name: Validate metadata
|
|
45
|
+
run: uvx twine check dist-vgi/* dist-fixtures/*
|
|
46
|
+
|
|
47
|
+
- name: Upload vgi artifacts
|
|
48
|
+
uses: actions/upload-artifact@v4
|
|
49
|
+
with:
|
|
50
|
+
name: dist-vgi
|
|
51
|
+
path: dist-vgi/
|
|
52
|
+
|
|
53
|
+
- name: Upload vgi-fixtures artifacts
|
|
54
|
+
uses: actions/upload-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: dist-fixtures
|
|
57
|
+
path: dist-fixtures/
|
|
58
|
+
|
|
59
|
+
publish-vgi:
|
|
60
|
+
name: Publish vgi to PyPI
|
|
61
|
+
needs: build
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
environment: pypi
|
|
64
|
+
permissions:
|
|
65
|
+
id-token: write # required for Trusted Publishing
|
|
66
|
+
steps:
|
|
67
|
+
- name: Download vgi artifacts
|
|
68
|
+
uses: actions/download-artifact@v4
|
|
69
|
+
with:
|
|
70
|
+
name: dist-vgi
|
|
71
|
+
path: dist/
|
|
72
|
+
|
|
73
|
+
- name: Publish vgi
|
|
74
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
75
|
+
|
|
76
|
+
publish-vgi-fixtures:
|
|
77
|
+
name: Publish vgi-fixtures to PyPI
|
|
78
|
+
needs: build
|
|
79
|
+
runs-on: ubuntu-latest
|
|
80
|
+
environment: pypi
|
|
81
|
+
# Disabled until a Trusted Publisher exists for the `vgi-fixtures`
|
|
82
|
+
# project on PyPI (blocked on a PyPI new-project limit). The wheel is
|
|
83
|
+
# still built + metadata-checked above; only the upload is skipped, so
|
|
84
|
+
# vgi-python releases cleanly. Re-enable (delete this `if`) once the
|
|
85
|
+
# publisher is configured.
|
|
86
|
+
if: false
|
|
87
|
+
permissions:
|
|
88
|
+
id-token: write # required for Trusted Publishing
|
|
89
|
+
steps:
|
|
90
|
+
- name: Download vgi-fixtures artifacts
|
|
91
|
+
uses: actions/download-artifact@v4
|
|
92
|
+
with:
|
|
93
|
+
name: dist-fixtures
|
|
94
|
+
path: dist/
|
|
95
|
+
|
|
96
|
+
- name: Publish vgi-fixtures
|
|
97
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv
|
|
11
|
+
|
|
12
|
+
# Mypy reports
|
|
13
|
+
mypy-reports/
|
|
14
|
+
mypy-html-report/
|
|
15
|
+
|
|
16
|
+
# Coverage artifacts
|
|
17
|
+
.coverage
|
|
18
|
+
.coverage.*
|
|
19
|
+
htmlcov/
|
|
20
|
+
test-data/v.parquet
|
|
21
|
+
|
|
22
|
+
# IDE / editor
|
|
23
|
+
.vscode/
|
|
24
|
+
.idea/
|
|
25
|
+
*.swp
|
|
26
|
+
|
|
27
|
+
# Claude Code agent state
|
|
28
|
+
.claude/
|
|
29
|
+
|
|
30
|
+
# Playwright MCP
|
|
31
|
+
.playwright-mcp/
|
|
32
|
+
|
|
33
|
+
# beads (local tool state — see commit 9cf33e2)
|
|
34
|
+
.beads/
|
|
35
|
+
|
|
36
|
+
# wrangler files
|
|
37
|
+
.wrangler
|
|
38
|
+
.dev.vars*
|
|
39
|
+
!.dev.vars.example
|
|
40
|
+
.env*
|
|
41
|
+
!.env.example
|
|
42
|
+
|
|
43
|
+
# Cloudflare Worker scaffolding
|
|
44
|
+
cloudflare/vgi-storage/node_modules/
|
|
45
|
+
|
|
46
|
+
# Local scratch / experiment artifacts (not part of the package)
|
|
47
|
+
/test.json
|
|
48
|
+
/client-tests/
|
|
49
|
+
/docs/time-travel-init-plan.md
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.14
|