vgi-python 0.43.1__tar.gz → 0.45.0__tar.gz

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