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.
Files changed (293) hide show
  1. vgi_python-0.8.0/.gitattributes +5 -0
  2. vgi_python-0.8.0/.github/workflows/ci.yml +144 -0
  3. vgi_python-0.8.0/.github/workflows/release.yml +97 -0
  4. vgi_python-0.8.0/.gitignore +49 -0
  5. vgi_python-0.8.0/.python-version +1 -0
  6. vgi_python-0.8.0/CLAUDE.md +511 -0
  7. vgi_python-0.8.0/LICENSE +134 -0
  8. vgi_python-0.8.0/PKG-INFO +735 -0
  9. vgi_python-0.8.0/README.md +526 -0
  10. vgi_python-0.8.0/dist-vgi/.gitignore +1 -0
  11. vgi_python-0.8.0/docs/aggregate-functions.md +370 -0
  12. vgi_python-0.8.0/docs/argument-serialization.md +270 -0
  13. vgi_python-0.8.0/docs/authentication.md +143 -0
  14. vgi_python-0.8.0/docs/catalog-interface.md +782 -0
  15. vgi_python-0.8.0/docs/cli.md +716 -0
  16. vgi_python-0.8.0/docs/column-statistics.md +190 -0
  17. vgi_python-0.8.0/docs/filter-pushdown.md +166 -0
  18. vgi_python-0.8.0/docs/generator-api.md +350 -0
  19. vgi_python-0.8.0/docs/lifecycle.md +122 -0
  20. vgi_python-0.8.0/docs/metadata.md +124 -0
  21. vgi_python-0.8.0/docs/shared-storage.md +203 -0
  22. vgi_python-0.8.0/docs/vgi-logo.png +0 -0
  23. vgi_python-0.8.0/packages/vgi-fixtures/LICENSE +134 -0
  24. vgi_python-0.8.0/packages/vgi-fixtures/README.md +49 -0
  25. vgi_python-0.8.0/packages/vgi-fixtures/pyproject.toml +69 -0
  26. vgi_python-0.8.0/pyproject.toml +190 -0
  27. vgi_python-0.8.0/scripts/measure_startup.py +205 -0
  28. vgi_python-0.8.0/scripts/run_all_tests.sh +215 -0
  29. vgi_python-0.8.0/test-data/generate.sh +3 -0
  30. vgi_python-0.8.0/tests/__init__.py +3 -0
  31. vgi_python-0.8.0/tests/_http_fixtures.py +128 -0
  32. vgi_python-0.8.0/tests/catalog/__init__.py +3 -0
  33. vgi_python-0.8.0/tests/catalog/test_catalog_interface.py +1090 -0
  34. vgi_python-0.8.0/tests/catalog/test_client_catalog.py +87 -0
  35. vgi_python-0.8.0/tests/catalog/test_column_statistics.py +755 -0
  36. vgi_python-0.8.0/tests/catalog/test_declarative.py +1780 -0
  37. vgi_python-0.8.0/tests/catalog/test_example_worker_catalog.py +499 -0
  38. vgi_python-0.8.0/tests/catalog/test_integration.py +704 -0
  39. vgi_python-0.8.0/tests/catalog/test_required_field_filter_paths.py +98 -0
  40. vgi_python-0.8.0/tests/catalog/test_scan_branches.py +309 -0
  41. vgi_python-0.8.0/tests/catalog/test_serialization.py +1182 -0
  42. vgi_python-0.8.0/tests/catalog/test_setting.py +300 -0
  43. vgi_python-0.8.0/tests/catalog/test_storage.py +254 -0
  44. vgi_python-0.8.0/tests/catalog/test_time_travel.py +447 -0
  45. vgi_python-0.8.0/tests/catalog/test_writable_table.py +317 -0
  46. vgi_python-0.8.0/tests/client/__init__.py +3 -0
  47. vgi_python-0.8.0/tests/client/test_broken_pipe.py +104 -0
  48. vgi_python-0.8.0/tests/client/test_cli.py +1050 -0
  49. vgi_python-0.8.0/tests/client/test_cli_catalog_functions.py +535 -0
  50. vgi_python-0.8.0/tests/client/test_worker_debug.py +134 -0
  51. vgi_python-0.8.0/tests/conformance/__init__.py +9 -0
  52. vgi_python-0.8.0/tests/conformance/_stub.py +27 -0
  53. vgi_python-0.8.0/tests/conformance/conftest.py +22 -0
  54. vgi_python-0.8.0/tests/conformance/test_accumulate.py +425 -0
  55. vgi_python-0.8.0/tests/conformance/test_aggregate.py +33 -0
  56. vgi_python-0.8.0/tests/conformance/test_attach.py +24 -0
  57. vgi_python-0.8.0/tests/conformance/test_bearer_auth.py +14 -0
  58. vgi_python-0.8.0/tests/conformance/test_directory_parity.py +90 -0
  59. vgi_python-0.8.0/tests/conformance/test_function_inventory.py +206 -0
  60. vgi_python-0.8.0/tests/conformance/test_http_client.py +200 -0
  61. vgi_python-0.8.0/tests/conformance/test_http_external_location.py +122 -0
  62. vgi_python-0.8.0/tests/conformance/test_http_upload_url.py +123 -0
  63. vgi_python-0.8.0/tests/conformance/test_macro.py +9 -0
  64. vgi_python-0.8.0/tests/conformance/test_overload.py +17 -0
  65. vgi_python-0.8.0/tests/conformance/test_protocol_inventory.py +325 -0
  66. vgi_python-0.8.0/tests/conformance/test_protocol_version.py +57 -0
  67. vgi_python-0.8.0/tests/conformance/test_resumable_scan.py +156 -0
  68. vgi_python-0.8.0/tests/conformance/test_scalar.py +31 -0
  69. vgi_python-0.8.0/tests/conformance/test_scalar_attach_opaque_data.py +87 -0
  70. vgi_python-0.8.0/tests/conformance/test_secret.py +18 -0
  71. vgi_python-0.8.0/tests/conformance/test_settings.py +17 -0
  72. vgi_python-0.8.0/tests/conformance/test_table.py +44 -0
  73. vgi_python-0.8.0/tests/conformance/test_table_in_out.py +22 -0
  74. vgi_python-0.8.0/tests/conformance/test_view.py +9 -0
  75. vgi_python-0.8.0/tests/conformance/test_writable.py +36 -0
  76. vgi_python-0.8.0/tests/conftest.py +260 -0
  77. vgi_python-0.8.0/tests/scalar/__init__.py +3 -0
  78. vgi_python-0.8.0/tests/scalar/test_bernoulli_function.py +49 -0
  79. vgi_python-0.8.0/tests/scalar/test_binary_packet_function.py +67 -0
  80. vgi_python-0.8.0/tests/scalar/test_client.py +724 -0
  81. vgi_python-0.8.0/tests/scalar/test_conditional_message_function.py +51 -0
  82. vgi_python-0.8.0/tests/scalar/test_hash_seed_function.py +110 -0
  83. vgi_python-0.8.0/tests/scalar/test_multiply_by_setting_function.py +48 -0
  84. vgi_python-0.8.0/tests/scalar/test_multiply_function.py +66 -0
  85. vgi_python-0.8.0/tests/scalar/test_random_bytes_function.py +105 -0
  86. vgi_python-0.8.0/tests/scalar/test_return_secret_value_function.py +41 -0
  87. vgi_python-0.8.0/tests/table/__init__.py +3 -0
  88. vgi_python-0.8.0/tests/table/generator/__init__.py +3 -0
  89. vgi_python-0.8.0/tests/table/generator/test_constant_columns_function.py +54 -0
  90. vgi_python-0.8.0/tests/table/generator/test_double_sequence_function.py +50 -0
  91. vgi_python-0.8.0/tests/table/generator/test_exception_function.py +61 -0
  92. vgi_python-0.8.0/tests/table/generator/test_filter_echo_function.py +64 -0
  93. vgi_python-0.8.0/tests/table/generator/test_logging_function.py +56 -0
  94. vgi_python-0.8.0/tests/table/generator/test_nested_sequence_function.py +69 -0
  95. vgi_python-0.8.0/tests/table/generator/test_partitioned_function.py +120 -0
  96. vgi_python-0.8.0/tests/table/generator/test_projected_data_function.py +49 -0
  97. vgi_python-0.8.0/tests/table/generator/test_sequence_function.py +36 -0
  98. vgi_python-0.8.0/tests/table/generator/test_settings_function.py +120 -0
  99. vgi_python-0.8.0/tests/table/generator/test_struct_settings_function.py +48 -0
  100. vgi_python-0.8.0/tests/table/generator/test_ten_thousand_function.py +29 -0
  101. vgi_python-0.8.0/tests/table_in_out/__init__.py +3 -0
  102. vgi_python-0.8.0/tests/table_in_out/generator/__init__.py +3 -0
  103. vgi_python-0.8.0/tests/table_in_out/generator/test_buffer_input_function.py +42 -0
  104. vgi_python-0.8.0/tests/table_in_out/generator/test_echo_function.py +53 -0
  105. vgi_python-0.8.0/tests/table_in_out/generator/test_exception_functions.py +118 -0
  106. vgi_python-0.8.0/tests/table_in_out/generator/test_filter_by_setting_function.py +74 -0
  107. vgi_python-0.8.0/tests/table_in_out/generator/test_repeat_inputs_function.py +108 -0
  108. vgi_python-0.8.0/tests/table_in_out/generator/test_sum_all_columns_function.py +286 -0
  109. vgi_python-0.8.0/tests/table_in_out/test_client.py +279 -0
  110. vgi_python-0.8.0/tests/test_access_log_audit.py +265 -0
  111. vgi_python-0.8.0/tests/test_aggregate_function.py +785 -0
  112. vgi_python-0.8.0/tests/test_argument_spec.py +676 -0
  113. vgi_python-0.8.0/tests/test_auth.py +709 -0
  114. vgi_python-0.8.0/tests/test_bind_exceptions.py +113 -0
  115. vgi_python-0.8.0/tests/test_bind_request_at_clause.py +109 -0
  116. vgi_python-0.8.0/tests/test_bound_storage_conformance.py +279 -0
  117. vgi_python-0.8.0/tests/test_catalog_auth_binding.py +305 -0
  118. vgi_python-0.8.0/tests/test_documentation_examples.py +208 -0
  119. vgi_python-0.8.0/tests/test_example_function_arg_types.py +181 -0
  120. vgi_python-0.8.0/tests/test_exception_handling.py +270 -0
  121. vgi_python-0.8.0/tests/test_exceptions.py +234 -0
  122. vgi_python-0.8.0/tests/test_filter_pushdown.py +1406 -0
  123. vgi_python-0.8.0/tests/test_filter_pushdown_extension.py +322 -0
  124. vgi_python-0.8.0/tests/test_function_storage.py +552 -0
  125. vgi_python-0.8.0/tests/test_function_storage_azure_sql.py +485 -0
  126. vgi_python-0.8.0/tests/test_function_storage_cf_do.py +388 -0
  127. vgi_python-0.8.0/tests/test_function_storage_cf_do_integration.py +204 -0
  128. vgi_python-0.8.0/tests/test_function_storage_conformance.py +209 -0
  129. vgi_python-0.8.0/tests/test_generated_cpp_constants.py +107 -0
  130. vgi_python-0.8.0/tests/test_generated_cpp_protocol_version.py +93 -0
  131. vgi_python-0.8.0/tests/test_generated_cpp_request_builders.py +91 -0
  132. vgi_python-0.8.0/tests/test_generated_cpp_schemas.py +222 -0
  133. vgi_python-0.8.0/tests/test_generated_cpp_secret.py +72 -0
  134. vgi_python-0.8.0/tests/test_generated_go_schemas.py +214 -0
  135. vgi_python-0.8.0/tests/test_generated_protocol_version.py +71 -0
  136. vgi_python-0.8.0/tests/test_generated_schemas_cross_lang.py +116 -0
  137. vgi_python-0.8.0/tests/test_generated_ts_client.py +102 -0
  138. vgi_python-0.8.0/tests/test_generated_ts_schemas.py +217 -0
  139. vgi_python-0.8.0/tests/test_http_demo_storage.py +412 -0
  140. vgi_python-0.8.0/tests/test_http_s3_offload_input.py +191 -0
  141. vgi_python-0.8.0/tests/test_http_s3_offload_output.py +197 -0
  142. vgi_python-0.8.0/tests/test_metadata.py +615 -0
  143. vgi_python-0.8.0/tests/test_mypy_consolidated.py +37 -0
  144. vgi_python-0.8.0/tests/test_nest_tensor.py +495 -0
  145. vgi_python-0.8.0/tests/test_otel.py +465 -0
  146. vgi_python-0.8.0/tests/test_projection_enforcement.py +72 -0
  147. vgi_python-0.8.0/tests/test_projection_repro.py +247 -0
  148. vgi_python-0.8.0/tests/test_protocol_classes.py +1153 -0
  149. vgi_python-0.8.0/tests/test_schema_utils.py +290 -0
  150. vgi_python-0.8.0/tests/test_serve.py +589 -0
  151. vgi_python-0.8.0/tests/test_setting_secret_annotations.py +501 -0
  152. vgi_python-0.8.0/tests/test_table_buffering_function.py +433 -0
  153. vgi_python-0.8.0/tests/test_table_function_dynamic_to_string.py +186 -0
  154. vgi_python-0.8.0/tests/test_type_bounds.py +166 -0
  155. vgi_python-0.8.0/tests/test_worker.py +1637 -0
  156. vgi_python-0.8.0/tests/test_worker_cli.py +112 -0
  157. vgi_python-0.8.0/tests/test_worker_page.py +824 -0
  158. vgi_python-0.8.0/tests/transactor/__init__.py +3 -0
  159. vgi_python-0.8.0/tests/transactor/test_transactor.py +711 -0
  160. vgi_python-0.8.0/uv.lock +1982 -0
  161. vgi_python-0.8.0/vgi/__init__.py +152 -0
  162. vgi_python-0.8.0/vgi/_duckdb.py +62 -0
  163. vgi_python-0.8.0/vgi/_storage_profile.py +132 -0
  164. vgi_python-0.8.0/vgi/_test_fixtures/__init__.py +20 -0
  165. vgi_python-0.8.0/vgi/_test_fixtures/accumulate/__init__.py +19 -0
  166. vgi_python-0.8.0/vgi/_test_fixtures/accumulate/worker.py +762 -0
  167. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/__init__.py +62 -0
  168. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/_common.py +21 -0
  169. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/basic.py +232 -0
  170. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/dynamic.py +409 -0
  171. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/generic.py +86 -0
  172. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/listagg.py +71 -0
  173. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/percentile.py +107 -0
  174. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/streaming.py +192 -0
  175. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/varargs.py +75 -0
  176. vgi_python-0.8.0/vgi/_test_fixtures/aggregate/window.py +380 -0
  177. vgi_python-0.8.0/vgi/_test_fixtures/attach_options.py +308 -0
  178. vgi_python-0.8.0/vgi/_test_fixtures/bad_protocol.py +62 -0
  179. vgi_python-0.8.0/vgi/_test_fixtures/cancellable.py +336 -0
  180. vgi_python-0.8.0/vgi/_test_fixtures/catalog.py +813 -0
  181. vgi_python-0.8.0/vgi/_test_fixtures/http_server.py +394 -0
  182. vgi_python-0.8.0/vgi/_test_fixtures/nest_tensor.py +614 -0
  183. vgi_python-0.8.0/vgi/_test_fixtures/orchard_catalog.py +47 -0
  184. vgi_python-0.8.0/vgi/_test_fixtures/projection_repro/__init__.py +6 -0
  185. vgi_python-0.8.0/vgi/_test_fixtures/projection_repro/worker.py +454 -0
  186. vgi_python-0.8.0/vgi/_test_fixtures/scalar/__init__.py +116 -0
  187. vgi_python-0.8.0/vgi/_test_fixtures/scalar/_common.py +69 -0
  188. vgi_python-0.8.0/vgi/_test_fixtures/scalar/arithmetic.py +321 -0
  189. vgi_python-0.8.0/vgi/_test_fixtures/scalar/binary.py +120 -0
  190. vgi_python-0.8.0/vgi/_test_fixtures/scalar/formatting.py +176 -0
  191. vgi_python-0.8.0/vgi/_test_fixtures/scalar/geo.py +300 -0
  192. vgi_python-0.8.0/vgi/_test_fixtures/scalar/null_handling.py +107 -0
  193. vgi_python-0.8.0/vgi/_test_fixtures/scalar/random_demo.py +171 -0
  194. vgi_python-0.8.0/vgi/_test_fixtures/scalar/settings_secrets.py +102 -0
  195. vgi_python-0.8.0/vgi/_test_fixtures/scalar/type_info.py +219 -0
  196. vgi_python-0.8.0/vgi/_test_fixtures/schema_reconcile/__init__.py +29 -0
  197. vgi_python-0.8.0/vgi/_test_fixtures/schema_reconcile/worker.py +653 -0
  198. vgi_python-0.8.0/vgi/_test_fixtures/simple_writable.py +793 -0
  199. vgi_python-0.8.0/vgi/_test_fixtures/table/__init__.py +221 -0
  200. vgi_python-0.8.0/vgi/_test_fixtures/table/_common.py +162 -0
  201. vgi_python-0.8.0/vgi/_test_fixtures/table/batch_index.py +283 -0
  202. vgi_python-0.8.0/vgi/_test_fixtures/table/batch_index_broken.py +200 -0
  203. vgi_python-0.8.0/vgi/_test_fixtures/table/catalog_scans.py +162 -0
  204. vgi_python-0.8.0/vgi/_test_fixtures/table/filters.py +1005 -0
  205. vgi_python-0.8.0/vgi/_test_fixtures/table/late_materialization.py +249 -0
  206. vgi_python-0.8.0/vgi/_test_fixtures/table/make_series.py +273 -0
  207. vgi_python-0.8.0/vgi/_test_fixtures/table/misc.py +499 -0
  208. vgi_python-0.8.0/vgi/_test_fixtures/table/order_modes.py +164 -0
  209. vgi_python-0.8.0/vgi/_test_fixtures/table/pairs.py +437 -0
  210. vgi_python-0.8.0/vgi/_test_fixtures/table/partition_columns.py +472 -0
  211. vgi_python-0.8.0/vgi/_test_fixtures/table/partition_columns_broken.py +304 -0
  212. vgi_python-0.8.0/vgi/_test_fixtures/table/profiling_example.py +195 -0
  213. vgi_python-0.8.0/vgi/_test_fixtures/table/required_filters.py +234 -0
  214. vgi_python-0.8.0/vgi/_test_fixtures/table/sequence.py +710 -0
  215. vgi_python-0.8.0/vgi/_test_fixtures/table/settings.py +426 -0
  216. vgi_python-0.8.0/vgi/_test_fixtures/table/transaction_storage.py +162 -0
  217. vgi_python-0.8.0/vgi/_test_fixtures/table/tt_pushdown.py +191 -0
  218. vgi_python-0.8.0/vgi/_test_fixtures/table/versioned.py +230 -0
  219. vgi_python-0.8.0/vgi/_test_fixtures/table_in_out.py +1392 -0
  220. vgi_python-0.8.0/vgi/_test_fixtures/versioned.py +155 -0
  221. vgi_python-0.8.0/vgi/_test_fixtures/versioned_tables.py +595 -0
  222. vgi_python-0.8.0/vgi/_test_fixtures/worker.py +1631 -0
  223. vgi_python-0.8.0/vgi/_test_fixtures/writable/__init__.py +8 -0
  224. vgi_python-0.8.0/vgi/_test_fixtures/writable/generic.py +236 -0
  225. vgi_python-0.8.0/vgi/_test_fixtures/writable/table.py +149 -0
  226. vgi_python-0.8.0/vgi/_test_fixtures/writable/worker.py +1148 -0
  227. vgi_python-0.8.0/vgi/aggregate_function.py +607 -0
  228. vgi_python-0.8.0/vgi/argument_spec.py +472 -0
  229. vgi_python-0.8.0/vgi/arguments.py +1747 -0
  230. vgi_python-0.8.0/vgi/auth.py +55 -0
  231. vgi_python-0.8.0/vgi/catalog/__init__.py +88 -0
  232. vgi_python-0.8.0/vgi/catalog/attach_option.py +206 -0
  233. vgi_python-0.8.0/vgi/catalog/catalog_interface.py +2767 -0
  234. vgi_python-0.8.0/vgi/catalog/descriptors.py +870 -0
  235. vgi_python-0.8.0/vgi/catalog/duckdb_statistics.py +377 -0
  236. vgi_python-0.8.0/vgi/catalog/secret_type.py +96 -0
  237. vgi_python-0.8.0/vgi/catalog/setting.py +253 -0
  238. vgi_python-0.8.0/vgi/catalog/storage.py +372 -0
  239. vgi_python-0.8.0/vgi/client/__init__.py +67 -0
  240. vgi_python-0.8.0/vgi/client/catalog_mixin.py +1251 -0
  241. vgi_python-0.8.0/vgi/client/cli.py +582 -0
  242. vgi_python-0.8.0/vgi/client/cli_catalog.py +182 -0
  243. vgi_python-0.8.0/vgi/client/cli_schema.py +270 -0
  244. vgi_python-0.8.0/vgi/client/cli_table.py +907 -0
  245. vgi_python-0.8.0/vgi/client/cli_transaction.py +97 -0
  246. vgi_python-0.8.0/vgi/client/cli_utils.py +441 -0
  247. vgi_python-0.8.0/vgi/client/cli_view.py +303 -0
  248. vgi_python-0.8.0/vgi/client/client.py +2183 -0
  249. vgi_python-0.8.0/vgi/codegen/__init__.py +8 -0
  250. vgi_python-0.8.0/vgi/codegen/_common.py +255 -0
  251. vgi_python-0.8.0/vgi/codegen/cpp_constants.py +142 -0
  252. vgi_python-0.8.0/vgi/codegen/cpp_protocol_version.py +113 -0
  253. vgi_python-0.8.0/vgi/codegen/cpp_request_builders.py +444 -0
  254. vgi_python-0.8.0/vgi/codegen/cpp_schemas.py +243 -0
  255. vgi_python-0.8.0/vgi/codegen/cpp_secret_protocol_version.py +68 -0
  256. vgi_python-0.8.0/vgi/codegen/cpp_secret_request_builders.py +61 -0
  257. vgi_python-0.8.0/vgi/codegen/cpp_secret_schemas.py +62 -0
  258. vgi_python-0.8.0/vgi/codegen/go_schemas.py +211 -0
  259. vgi_python-0.8.0/vgi/codegen/protocol_version.py +61 -0
  260. vgi_python-0.8.0/vgi/codegen/ts_client.py +434 -0
  261. vgi_python-0.8.0/vgi/codegen/ts_schemas.py +253 -0
  262. vgi_python-0.8.0/vgi/exceptions.py +205 -0
  263. vgi_python-0.8.0/vgi/function.py +245 -0
  264. vgi_python-0.8.0/vgi/function_storage.py +1636 -0
  265. vgi_python-0.8.0/vgi/function_storage_azure_sql.py +922 -0
  266. vgi_python-0.8.0/vgi/function_storage_cf_do.py +740 -0
  267. vgi_python-0.8.0/vgi/http/__init__.py +25 -0
  268. vgi_python-0.8.0/vgi/http/demo_storage.py +212 -0
  269. vgi_python-0.8.0/vgi/http/worker_page.py +1252 -0
  270. vgi_python-0.8.0/vgi/invocation.py +154 -0
  271. vgi_python-0.8.0/vgi/logging_config.py +93 -0
  272. vgi_python-0.8.0/vgi/meta_worker.py +661 -0
  273. vgi_python-0.8.0/vgi/metadata.py +1403 -0
  274. vgi_python-0.8.0/vgi/otel.py +406 -0
  275. vgi_python-0.8.0/vgi/protocol.py +2418 -0
  276. vgi_python-0.8.0/vgi/protocol_version.txt +1 -0
  277. vgi_python-0.8.0/vgi/py.typed +0 -0
  278. vgi_python-0.8.0/vgi/scalar_function.py +1211 -0
  279. vgi_python-0.8.0/vgi/schema_utils.py +234 -0
  280. vgi_python-0.8.0/vgi/secret_protocol.py +124 -0
  281. vgi_python-0.8.0/vgi/secret_service.py +238 -0
  282. vgi_python-0.8.0/vgi/serve.py +769 -0
  283. vgi_python-0.8.0/vgi/table_buffering_function.py +443 -0
  284. vgi_python-0.8.0/vgi/table_filter_pushdown.py +1528 -0
  285. vgi_python-0.8.0/vgi/table_function.py +1130 -0
  286. vgi_python-0.8.0/vgi/table_in_out_function.py +383 -0
  287. vgi_python-0.8.0/vgi/transactor/__init__.py +24 -0
  288. vgi_python-0.8.0/vgi/transactor/_duckdb_compat.py +27 -0
  289. vgi_python-0.8.0/vgi/transactor/client.py +137 -0
  290. vgi_python-0.8.0/vgi/transactor/protocol.py +149 -0
  291. vgi_python-0.8.0/vgi/transactor/server.py +740 -0
  292. vgi_python-0.8.0/vgi/worker.py +4761 -0
  293. vgi_python-0.8.0/wrangler.jsonc +14 -0
@@ -0,0 +1,5 @@
1
+
2
+ # Use bd merge for beads JSONL files
3
+
4
+ # Use bd merge for beads JSONL files
5
+ .beads/issues.jsonl merge=beads
@@ -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