querysource 4.5.16__tar.gz → 5.0.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 (724) hide show
  1. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-coder.md +3 -1
  2. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-worker.md +6 -1
  3. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-done.md +30 -0
  4. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-spec.md +12 -4
  5. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-task.md +59 -9
  6. {querysource-4.5.16 → querysource-5.0.0}/CHANGES.rst +19 -0
  7. {querysource-4.5.16/querysource.egg-info → querysource-5.0.0}/PKG-INFO +1 -1
  8. {querysource-4.5.16 → querysource-5.0.0}/generated/Query.json +13 -1
  9. {querysource-4.5.16 → querysource-5.0.0}/policies/defaults.yaml +2 -0
  10. {querysource-4.5.16 → querysource-5.0.0}/pyproject.toml +63 -0
  11. {querysource-4.5.16 → querysource-5.0.0}/querysource/_version.py +3 -3
  12. querysource-5.0.0/querysource/auth/slug_visibility.py +471 -0
  13. querysource-5.0.0/querysource/cache_identity.py +94 -0
  14. {querysource-4.5.16 → querysource-5.0.0}/querysource/conf.py +12 -0
  15. {querysource-4.5.16 → querysource-5.0.0}/querysource/connections.py +40 -18
  16. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/__init__.py +12 -9
  17. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/_pagination.py +90 -10
  18. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/abstract.py +117 -4
  19. querysource-5.0.0/querysource/handlers/describe.py +354 -0
  20. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/log.py +35 -10
  21. querysource-5.0.0/querysource/handlers/manager.py +890 -0
  22. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/multi.py +145 -10
  23. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/scheduler.py +60 -16
  24. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/service.py +106 -24
  25. querysource-5.0.0/querysource/handlers/tenant.py +277 -0
  26. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/connections.py +83 -38
  27. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/queries.py +106 -38
  28. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/output.py +29 -12
  29. querysource-5.0.0/querysource/ownership_logging.py +124 -0
  30. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/abstract.py +37 -0
  31. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/cassandra.py +3 -1
  32. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/default.py +3 -1
  33. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/documentdb.py +3 -1
  34. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/mysql.py +3 -1
  35. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/pg.py +27 -0
  36. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sql.py +6 -2
  37. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sqlserver.py +3 -1
  38. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/base.py +10 -9
  39. querysource-5.0.0/querysource/queries/describe.py +260 -0
  40. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/__init__.py +151 -26
  41. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/executors.py +79 -25
  42. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/query.catalog.yaml +9 -0
  43. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/query.py +6 -0
  44. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/obj.py +30 -22
  45. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/qs.py +51 -25
  46. querysource-5.0.0/querysource/repositories/__init__.py +4 -0
  47. querysource-5.0.0/querysource/repositories/definitions.py +496 -0
  48. querysource-5.0.0/querysource/scheduler/jobs.py +204 -0
  49. {querysource-4.5.16 → querysource-5.0.0}/querysource/scheduler/scheduler.py +298 -94
  50. {querysource-4.5.16 → querysource-5.0.0}/querysource/services.py +144 -21
  51. querysource-5.0.0/querysource/tenant_errors.py +20 -0
  52. querysource-5.0.0/querysource/tenant_models.py +69 -0
  53. querysource-5.0.0/querysource/tenants.py +439 -0
  54. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/validators.cpp +4086 -2466
  55. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/validators.pyx +55 -6
  56. querysource-5.0.0/querysource/utils/vocabulary.py +211 -0
  57. {querysource-4.5.16 → querysource-5.0.0}/querysource/version.py +1 -1
  58. {querysource-4.5.16 → querysource-5.0.0/querysource.egg-info}/PKG-INFO +1 -1
  59. {querysource-4.5.16 → querysource-5.0.0}/querysource.egg-info/SOURCES.txt +44 -1
  60. {querysource-4.5.16 → querysource-5.0.0}/querysource.egg-info/scm_file_list.json +116 -0
  61. querysource-5.0.0/querysource.egg-info/scm_version.json +8 -0
  62. querysource-5.0.0/scripts/sdd/check_task_graph.py +334 -0
  63. querysource-5.0.0/tests/auth/test_slug_visibility.py +316 -0
  64. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/conftest.py +13 -2
  65. querysource-5.0.0/tests/handlers/test_describe_columns.py +281 -0
  66. querysource-5.0.0/tests/handlers/test_describe_detail.py +174 -0
  67. querysource-5.0.0/tests/handlers/test_describe_list.py +186 -0
  68. querysource-5.0.0/tests/handlers/test_describe_tenant.py +428 -0
  69. querysource-5.0.0/tests/handlers/test_describe_vocabulary.py +69 -0
  70. querysource-5.0.0/tests/handlers/test_pagination_describe_helpers.py +58 -0
  71. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/test_queryservice_pbac_smoke.py +51 -1
  72. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/test_multiquery_output_errors.py +48 -6
  73. {querysource-4.5.16 → querysource-5.0.0}/tests/policies/test_default_policies_load.py +18 -0
  74. querysource-5.0.0/tests/tenants/conftest.py +152 -0
  75. querysource-5.0.0/tests/tenants/test_integration.py +457 -0
  76. querysource-5.0.0/tests/tenants/test_tenant_bootstrap_lookup.py +274 -0
  77. querysource-5.0.0/tests/tenants/test_tenant_child_execution.py +456 -0
  78. querysource-5.0.0/tests/tenants/test_tenant_definition_model.py +117 -0
  79. querysource-5.0.0/tests/tenants/test_tenant_execution_context.py +198 -0
  80. querysource-5.0.0/tests/tenants/test_tenant_http_routes.py +233 -0
  81. querysource-5.0.0/tests/tenants/test_tenant_management_reads.py +430 -0
  82. querysource-5.0.0/tests/tenants/test_tenant_management_writes.py +270 -0
  83. querysource-5.0.0/tests/tenants/test_tenant_observability_outputs.py +237 -0
  84. querysource-5.0.0/tests/tenants/test_tenant_policy_preflight.py +276 -0
  85. querysource-5.0.0/tests/tenants/test_tenant_registry.py +404 -0
  86. querysource-5.0.0/tests/tenants/test_tenant_remote_protocol.py +238 -0
  87. querysource-5.0.0/tests/tenants/test_tenant_repository_reads.py +270 -0
  88. querysource-5.0.0/tests/tenants/test_tenant_repository_writes.py +325 -0
  89. querysource-5.0.0/tests/tenants/test_tenant_result_cache.py +240 -0
  90. querysource-5.0.0/tests/tenants/test_tenant_rollout_documentation.py +129 -0
  91. querysource-5.0.0/tests/tenants/test_tenant_scheduler_api_jobs.py +352 -0
  92. querysource-5.0.0/tests/tenants/test_tenant_scheduler_registry.py +309 -0
  93. {querysource-4.5.16 → querysource-5.0.0}/tests/test_multiqs_remote_dispatch.py +23 -3
  94. querysource-5.0.0/tests/test_route_registration.py +316 -0
  95. {querysource-4.5.16 → querysource-5.0.0}/tests/test_scheduler_core.py +9 -2
  96. {querysource-4.5.16 → querysource-5.0.0}/tests/test_scheduler_handler_unit.py +81 -0
  97. {querysource-4.5.16 → querysource-5.0.0}/tests/test_scheduler_jobs.py +83 -4
  98. {querysource-4.5.16 → querysource-5.0.0}/tests/test_scheduler_multi_routing.py +6 -3
  99. {querysource-4.5.16 → querysource-5.0.0}/tests/test_threadquery_executor.py +9 -4
  100. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_multiqs_output_raise.py +27 -2
  101. querysource-5.0.0/tests/unit/test_provider_describe_columns.py +149 -0
  102. querysource-5.0.0/tests/unit/test_slug_describer.py +196 -0
  103. querysource-5.0.0/tests/unit/test_udf_keyword_resolution.py +109 -0
  104. querysource-5.0.0/tests/unit/test_vocabulary.py +70 -0
  105. querysource-4.5.16/querysource/handlers/manager.py +0 -521
  106. querysource-4.5.16/querysource/scheduler/jobs.py +0 -122
  107. querysource-4.5.16/querysource.egg-info/scm_version.json +0 -8
  108. querysource-4.5.16/tests/test_route_registration.py +0 -100
  109. {querysource-4.5.16 → querysource-5.0.0}/.agent/rules/async-programming-expert.md +0 -0
  110. {querysource-4.5.16 → querysource-5.0.0}/.agent/rules/code-reviewer.md +0 -0
  111. {querysource-4.5.16 → querysource-5.0.0}/.agent/rules/cython-development.md +0 -0
  112. {querysource-4.5.16 → querysource-5.0.0}/.agent/rules/prompt-expert.md +0 -0
  113. {querysource-4.5.16 → querysource-5.0.0}/.agent/rules/python-development.md +0 -0
  114. {querysource-4.5.16 → querysource-5.0.0}/.agent/rules/rust-development.md +0 -0
  115. {querysource-4.5.16 → querysource-5.0.0}/.agent/workflows/create-parrot-tool.md +0 -0
  116. {querysource-4.5.16 → querysource-5.0.0}/.agent/workflows/create-workflow.md +0 -0
  117. {querysource-4.5.16 → querysource-5.0.0}/.agent/workflows/debug-regressions-with-git-bisect-binary-search.md +0 -0
  118. {querysource-4.5.16 → querysource-5.0.0}/.agent/workflows/generate-tests.md +0 -0
  119. {querysource-4.5.16 → querysource-5.0.0}/.agent/workflows/git-new-feature.md +0 -0
  120. {querysource-4.5.16 → querysource-5.0.0}/.agent/workflows/parrot-mcp-server.md +0 -0
  121. {querysource-4.5.16 → querysource-5.0.0}/.agent/workflows/release_package.md +0 -0
  122. {querysource-4.5.16 → querysource-5.0.0}/.agent/workflows/start-flow.md +0 -0
  123. {querysource-4.5.16 → querysource-5.0.0}/.bumpversion.cfg +0 -0
  124. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/code-review.md +0 -0
  125. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/code-reviewer.md +0 -0
  126. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/qa-runner.md +0 -0
  127. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-autopilot.md +0 -0
  128. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-feedback.md +0 -0
  129. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-ideation.md +0 -0
  130. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-planner.md +0 -0
  131. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-qa.md +0 -0
  132. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-research.md +0 -0
  133. {querysource-4.5.16 → querysource-5.0.0}/.claude/agents/sdd-secondopinion.md +0 -0
  134. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/bookstore.md +0 -0
  135. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/parrotwiki.md +0 -0
  136. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/pr-review.md +0 -0
  137. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/release.md +0 -0
  138. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/remove-worktree.md +0 -0
  139. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-brainstorm.md +0 -0
  140. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-codereview.md +0 -0
  141. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-explain.md +0 -0
  142. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-fromjira.md +0 -0
  143. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-insight.md +0 -0
  144. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-next.md +0 -0
  145. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-proposal.md +0 -0
  146. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-start.md +0 -0
  147. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-status.md +0 -0
  148. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/sdd-tojira.md +0 -0
  149. {querysource-4.5.16 → querysource-5.0.0}/.claude/commands/security-check.md +0 -0
  150. {querysource-4.5.16 → querysource-5.0.0}/.claude/hooks/dangerous-actions-blocker.sh +0 -0
  151. {querysource-4.5.16 → querysource-5.0.0}/.claude/hooks/sdd-worker-format.sh +0 -0
  152. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/aws-cost-optimization.md +0 -0
  153. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/code-reviewer.md +0 -0
  154. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/codebase-conventions.md +0 -0
  155. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/cython-development.md +0 -0
  156. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/python-development.md +0 -0
  157. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/rust-development.md +0 -0
  158. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/using-git-worktrees.md +0 -0
  159. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/worktree-pr-and-clean.md +0 -0
  160. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/worktree-start-feature.md +0 -0
  161. {querysource-4.5.16 → querysource-5.0.0}/.claude/rules/worktree-status.md +0 -0
  162. {querysource-4.5.16 → querysource-5.0.0}/.claude/skills/bookstore/SKILL.md +0 -0
  163. {querysource-4.5.16 → querysource-5.0.0}/.claude/skills/meta-prompting/SKILL.md +0 -0
  164. {querysource-4.5.16 → querysource-5.0.0}/.claude/skills/meta-prompting/analyze-complexity/SKILL.md +0 -0
  165. {querysource-4.5.16 → querysource-5.0.0}/.claude/skills/meta-prompting/assess-quality/SKILL.md +0 -0
  166. {querysource-4.5.16 → querysource-5.0.0}/.claude/skills/meta-prompting/extract-context/SKILL.md +0 -0
  167. {querysource-4.5.16 → querysource-5.0.0}/.claude/skills/meta-prompting/meta-prompt-iterate/SKILL.md +0 -0
  168. {querysource-4.5.16 → querysource-5.0.0}/.claude/workflows/sdd-insight.js +0 -0
  169. {querysource-4.5.16 → querysource-5.0.0}/.github/dependabot.yml +0 -0
  170. {querysource-4.5.16 → querysource-5.0.0}/.github/workflows/codeql-analysis.yml +0 -0
  171. {querysource-4.5.16 → querysource-5.0.0}/.github/workflows/release.yml +0 -0
  172. {querysource-4.5.16 → querysource-5.0.0}/.isort.cfg +0 -0
  173. {querysource-4.5.16 → querysource-5.0.0}/.jupyter/jupyter_notebook_config.py +0 -0
  174. {querysource-4.5.16 → querysource-5.0.0}/.parrot/wiki.json +0 -0
  175. {querysource-4.5.16 → querysource-5.0.0}/.parrot/wiki.local.json +0 -0
  176. {querysource-4.5.16 → querysource-5.0.0}/.pre-commit-config.yaml +0 -0
  177. {querysource-4.5.16 → querysource-5.0.0}/.pylintrc +0 -0
  178. {querysource-4.5.16 → querysource-5.0.0}/CODE_OF_CONDUCT.md +0 -0
  179. {querysource-4.5.16 → querysource-5.0.0}/CONTRIBUTING.md +0 -0
  180. {querysource-4.5.16 → querysource-5.0.0}/INSTALL +0 -0
  181. {querysource-4.5.16 → querysource-5.0.0}/JOIN_CONDITIONS_FEATURE.md +0 -0
  182. {querysource-4.5.16 → querysource-5.0.0}/JOIN_CONDITIONS_SUMMARY.md +0 -0
  183. {querysource-4.5.16 → querysource-5.0.0}/LICENSE +0 -0
  184. {querysource-4.5.16 → querysource-5.0.0}/MANIFEST.in +0 -0
  185. {querysource-4.5.16 → querysource-5.0.0}/Makefile +0 -0
  186. {querysource-4.5.16 → querysource-5.0.0}/README.md +0 -0
  187. {querysource-4.5.16 → querysource-5.0.0}/app.py +0 -0
  188. {querysource-4.5.16 → querysource-5.0.0}/bin/README.md +0 -0
  189. {querysource-4.5.16 → querysource-5.0.0}/conftest.py +0 -0
  190. {querysource-4.5.16 → querysource-5.0.0}/generated/AirtableSource.json +0 -0
  191. {querysource-4.5.16 → querysource-5.0.0}/generated/Concat.json +0 -0
  192. {querysource-4.5.16 → querysource-5.0.0}/generated/DWHDestination.json +0 -0
  193. {querysource-4.5.16 → querysource-5.0.0}/generated/DropCols.json +0 -0
  194. {querysource-4.5.16 → querysource-5.0.0}/generated/FileSource.json +0 -0
  195. {querysource-4.5.16 → querysource-5.0.0}/generated/Filter.json +0 -0
  196. {querysource-4.5.16 → querysource-5.0.0}/generated/FilterCols.json +0 -0
  197. {querysource-4.5.16 → querysource-5.0.0}/generated/Forecast.json +0 -0
  198. {querysource-4.5.16 → querysource-5.0.0}/generated/GoogleMaps.json +0 -0
  199. {querysource-4.5.16 → querysource-5.0.0}/generated/GroupBy.json +0 -0
  200. {querysource-4.5.16 → querysource-5.0.0}/generated/Info.json +0 -0
  201. {querysource-4.5.16 → querysource-5.0.0}/generated/Join.json +0 -0
  202. {querysource-4.5.16 → querysource-5.0.0}/generated/Map.json +0 -0
  203. {querysource-4.5.16 → querysource-5.0.0}/generated/Melt.json +0 -0
  204. {querysource-4.5.16 → querysource-5.0.0}/generated/Merge.json +0 -0
  205. {querysource-4.5.16 → querysource-5.0.0}/generated/NormalizeColumns.json +0 -0
  206. {querysource-4.5.16 → querysource-5.0.0}/generated/PluckCols.json +0 -0
  207. {querysource-4.5.16 → querysource-5.0.0}/generated/S3Source.json +0 -0
  208. {querysource-4.5.16 → querysource-5.0.0}/generated/SharepointSource.json +0 -0
  209. {querysource-4.5.16 → querysource-5.0.0}/generated/SmartSheetSource.json +0 -0
  210. {querysource-4.5.16 → querysource-5.0.0}/generated/Table.json +0 -0
  211. {querysource-4.5.16 → querysource-5.0.0}/generated/TableDestination.json +0 -0
  212. {querysource-4.5.16 → querysource-5.0.0}/generated/TableOutput.json +0 -0
  213. {querysource-4.5.16 → querysource-5.0.0}/generated/TableOutputAdapter.json +0 -0
  214. {querysource-4.5.16 → querysource-5.0.0}/generated/TableSource.json +0 -0
  215. {querysource-4.5.16 → querysource-5.0.0}/generated/ToS3.json +0 -0
  216. {querysource-4.5.16 → querysource-5.0.0}/generated/ToSharepoint.json +0 -0
  217. {querysource-4.5.16 → querysource-5.0.0}/generated/correlation.json +0 -0
  218. {querysource-4.5.16 → querysource-5.0.0}/generated/crosstab.json +0 -0
  219. {querysource-4.5.16 → querysource-5.0.0}/generated/pivot.json +0 -0
  220. {querysource-4.5.16 → querysource-5.0.0}/generated/tExplode.json +0 -0
  221. {querysource-4.5.16 → querysource-5.0.0}/generated/tOrder.json +0 -0
  222. {querysource-4.5.16 → querysource-5.0.0}/generated/tPandas.json +0 -0
  223. {querysource-4.5.16 → querysource-5.0.0}/gunicorn_config.py +0 -0
  224. {querysource-4.5.16 → querysource-5.0.0}/mypy.ini +0 -0
  225. {querysource-4.5.16 → querysource-5.0.0}/nav.py +0 -0
  226. {querysource-4.5.16 → querysource-5.0.0}/policies/HARDENING.md +0 -0
  227. {querysource-4.5.16 → querysource-5.0.0}/policies/authorized.yaml +0 -0
  228. {querysource-4.5.16 → querysource-5.0.0}/policies/baseline.yaml +0 -0
  229. {querysource-4.5.16 → querysource-5.0.0}/policies/datasources.yaml +0 -0
  230. {querysource-4.5.16 → querysource-5.0.0}/policies/drivers.yaml +0 -0
  231. {querysource-4.5.16 → querysource-5.0.0}/policies/raw_queries.yaml +0 -0
  232. {querysource-4.5.16 → querysource-5.0.0}/policies/slugs.yaml +0 -0
  233. {querysource-4.5.16 → querysource-5.0.0}/policies/superusers.yaml +0 -0
  234. {querysource-4.5.16 → querysource-5.0.0}/pytest.ini +0 -0
  235. {querysource-4.5.16 → querysource-5.0.0}/querysource/__cli__.py +0 -0
  236. {querysource-4.5.16 → querysource-5.0.0}/querysource/__init__.py +0 -0
  237. {querysource-4.5.16 → querysource-5.0.0}/querysource/auth/__init__.py +0 -0
  238. {querysource-4.5.16 → querysource-5.0.0}/querysource/auth/_resource_types.py +0 -0
  239. {querysource-4.5.16 → querysource-5.0.0}/querysource/auth/credentials.py +0 -0
  240. {querysource-4.5.16 → querysource-5.0.0}/querysource/auth/pbac.py +0 -0
  241. {querysource-4.5.16 → querysource-5.0.0}/querysource/cache/__init__.py +0 -0
  242. {querysource-4.5.16 → querysource-5.0.0}/querysource/cache/backends/__init__.py +0 -0
  243. {querysource-4.5.16 → querysource-5.0.0}/querysource/cache/backends/abstract.py +0 -0
  244. {querysource-4.5.16 → querysource-5.0.0}/querysource/cache/backends/memcache.py +0 -0
  245. {querysource-4.5.16 → querysource-5.0.0}/querysource/cache/backends/redis.py +0 -0
  246. {querysource-4.5.16 → querysource-5.0.0}/querysource/cache/base.py +0 -0
  247. {querysource-4.5.16 → querysource-5.0.0}/querysource/cli/__init__.py +0 -0
  248. {querysource-4.5.16 → querysource-5.0.0}/querysource/cli/generate_docs.py +0 -0
  249. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/__init__.py +0 -0
  250. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/__init__.py +0 -0
  251. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/abstract.py +0 -0
  252. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/arangodb.py +0 -0
  253. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/athena.py +0 -0
  254. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/bigquery.py +0 -0
  255. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/cassandra.py +0 -0
  256. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/clickhouse.py +0 -0
  257. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/cockroachdb.py +0 -0
  258. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/couchbase.py +0 -0
  259. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/couchdb.py +0 -0
  260. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/countries.py +0 -0
  261. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/delta.py +0 -0
  262. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/documentdb.py +0 -0
  263. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/dynamodb.py +0 -0
  264. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/elastic.py +0 -0
  265. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/ga.py +0 -0
  266. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/gcalc.py +0 -0
  267. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/hazel.py +0 -0
  268. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/iceberg.py +0 -0
  269. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/influx.py +0 -0
  270. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/jdbc.py +0 -0
  271. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/jira.py +0 -0
  272. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/mariadb.py +0 -0
  273. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/memcached.py +0 -0
  274. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/mongo.py +0 -0
  275. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/mysql.py +0 -0
  276. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/odbc.py +0 -0
  277. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/openweather.py +0 -0
  278. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/oracle.py +0 -0
  279. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/pg.py +0 -0
  280. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/pg_admin.py +0 -0
  281. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/postgres.py +0 -0
  282. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/py.typed +0 -0
  283. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/qs.py +0 -0
  284. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/redis.py +0 -0
  285. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/rest.py +0 -0
  286. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/rethink.py +0 -0
  287. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/sa.py +0 -0
  288. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/salesforce.py +0 -0
  289. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/scylladb.py +0 -0
  290. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/sqlalchemy.py +0 -0
  291. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/sqlite.py +0 -0
  292. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/sqlserver.py +0 -0
  293. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/upc.py +0 -0
  294. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/drivers/zipcodeapi.py +0 -0
  295. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/handlers/__init__.py +0 -0
  296. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/handlers/datasource.py +0 -0
  297. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/handlers/utils.py +0 -0
  298. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/introspection.py +0 -0
  299. {querysource-4.5.16 → querysource-5.0.0}/querysource/datasources/models.py +0 -0
  300. {querysource-4.5.16 → querysource-5.0.0}/querysource/events/__init__.py +0 -0
  301. {querysource-4.5.16 → querysource-5.0.0}/querysource/exceptions.py +0 -0
  302. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/components.py +0 -0
  303. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/executor.py +0 -0
  304. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/integrations/__init__.py +0 -0
  305. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/integrations/airtable.py +0 -0
  306. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/outputs/__init__.py +0 -0
  307. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/__init__.py +0 -0
  308. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/postgres.py +0 -0
  309. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/table.py +0 -0
  310. {querysource-4.5.16 → querysource-5.0.0}/querysource/handlers/variables.py +0 -0
  311. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/__init__.py +0 -0
  312. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/airtable.py +0 -0
  313. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/credentials.py +0 -0
  314. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/databases/__init__.py +0 -0
  315. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/databases/abstract.py +0 -0
  316. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/databases/bigquery.py +0 -0
  317. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/databases/db.py +0 -0
  318. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/databases/mongo.py +0 -0
  319. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/databases/rethink.py +0 -0
  320. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/http.py +0 -0
  321. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/playwright_service.py +0 -0
  322. {querysource-4.5.16 → querysource-5.0.0}/querysource/interfaces/selenium_service.py +0 -0
  323. {querysource-4.5.16 → querysource-5.0.0}/querysource/libs/__init__.py +0 -0
  324. {querysource-4.5.16 → querysource-5.0.0}/querysource/libs/encoders.py +0 -0
  325. {querysource-4.5.16 → querysource-5.0.0}/querysource/libs/functions/__init__.py +0 -0
  326. {querysource-4.5.16 → querysource-5.0.0}/querysource/libs/py.typed +0 -0
  327. {querysource-4.5.16 → querysource-5.0.0}/querysource/models.py +0 -0
  328. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/__init__.py +0 -0
  329. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/destinations/__init__.py +0 -0
  330. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/destinations/abstract.py +0 -0
  331. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/destinations/dwh.py +0 -0
  332. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/destinations/s3.py +0 -0
  333. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/destinations/sharepoint.py +0 -0
  334. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/destinations/table.py +0 -0
  335. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/__init__.py +0 -0
  336. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/abstract.py +0 -0
  337. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/arrow.py +0 -0
  338. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/dt.py +0 -0
  339. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/factory.py +0 -0
  340. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/iter.py +0 -0
  341. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/modin.py +0 -0
  342. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/pandas.py +0 -0
  343. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/dt/polars.py +0 -0
  344. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/__init__.py +0 -0
  345. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/abstract.py +0 -0
  346. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/bigquery.py +0 -0
  347. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/documentdb.py +0 -0
  348. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/mongodb.py +0 -0
  349. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/mysql.py +0 -0
  350. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/postgres.py +0 -0
  351. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/rethink.py +0 -0
  352. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/sa.py +0 -0
  353. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/table.py +0 -0
  354. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/tables/__init__.py +0 -0
  355. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/__init__.py +0 -0
  356. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/abstract.py +0 -0
  357. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/bokeh.py +0 -0
  358. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/clustering.py +0 -0
  359. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/csv.py +0 -0
  360. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/describe.py +0 -0
  361. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/eda.py +0 -0
  362. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/excel.py +0 -0
  363. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/html.py +0 -0
  364. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/json.py +0 -0
  365. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/pdf.py +0 -0
  366. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/pickle.py +0 -0
  367. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/plotly.py +0 -0
  368. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/profiling.py +0 -0
  369. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/report.py +0 -0
  370. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/table.py +0 -0
  371. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/tsv.py +0 -0
  372. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/txt.py +0 -0
  373. {querysource-4.5.16 → querysource-5.0.0}/querysource/outputs/writers/xml.py +0 -0
  374. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/__init__.py +0 -0
  375. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/abstract.c +0 -0
  376. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/abstract.pxd +0 -0
  377. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/abstract.pyx +0 -0
  378. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/arangodb.c +0 -0
  379. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/arangodb.pxd +0 -0
  380. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/arangodb.pyx +0 -0
  381. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/bigquery.c +0 -0
  382. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/bigquery.pxd +0 -0
  383. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/bigquery.pyx +0 -0
  384. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/cql.c +0 -0
  385. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/cql.pxd +0 -0
  386. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/cql.pyx +0 -0
  387. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/deltatbl.c +0 -0
  388. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/deltatbl.pxd +0 -0
  389. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/deltatbl.pyx +0 -0
  390. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/elastic.cpp +0 -0
  391. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/elastic.pxd +0 -0
  392. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/elastic.pyx +0 -0
  393. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/iceberg.c +0 -0
  394. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/iceberg.pxd +0 -0
  395. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/iceberg.pyx +0 -0
  396. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/influx.c +0 -0
  397. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/influx.pxd +0 -0
  398. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/influx.pyx +0 -0
  399. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/mongo.cpp +0 -0
  400. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/mongo.pxd +0 -0
  401. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/mongo.pyx +0 -0
  402. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/parser.c +0 -0
  403. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/parser.pxd +0 -0
  404. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/parser.pyx +0 -0
  405. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/pgsql.c +0 -0
  406. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/pgsql.pxd +0 -0
  407. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/pgsql.pyx +0 -0
  408. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/rethink.c +0 -0
  409. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/rethink.pxd +0 -0
  410. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/rethink.pyx +0 -0
  411. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sosql.c +0 -0
  412. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sosql.pxd +0 -0
  413. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sosql.pyx +0 -0
  414. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sql.c +0 -0
  415. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sql.pxd +0 -0
  416. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sql.pyx +0 -0
  417. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sqlserver.c +0 -0
  418. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sqlserver.pxd +0 -0
  419. {querysource-4.5.16 → querysource-5.0.0}/querysource/parsers/sqlserver.pyx +0 -0
  420. {querysource-4.5.16 → querysource-5.0.0}/querysource/plugins/__init__.py +0 -0
  421. {querysource-4.5.16 → querysource-5.0.0}/querysource/plugins/importer.py +0 -0
  422. {querysource-4.5.16 → querysource-5.0.0}/querysource/plugins/sources/__init__.py +0 -0
  423. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/__init__.py +0 -0
  424. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/arangodb.py +0 -0
  425. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/bigquery.py +0 -0
  426. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/db.py +0 -0
  427. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/deltatbl.py +0 -0
  428. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/dummy.py +0 -0
  429. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/elastic.py +0 -0
  430. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/external.py +0 -0
  431. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/http.py +0 -0
  432. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/iceberg.py +0 -0
  433. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/influx.py +0 -0
  434. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/py.typed +0 -0
  435. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/rest.py +0 -0
  436. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/rethink.py +0 -0
  437. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/salesforce.py +0 -0
  438. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/scylladb.py +0 -0
  439. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/__init__.py +0 -0
  440. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/abstract.py +0 -0
  441. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/amazon.py +0 -0
  442. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/countries.py +0 -0
  443. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/ga.py +0 -0
  444. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/geofcc.py +0 -0
  445. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/gmaps.py +0 -0
  446. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/graphcountries.py +0 -0
  447. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/graphql.py +0 -0
  448. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/http.py +0 -0
  449. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/hubspot.py +0 -0
  450. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/openweather.py +0 -0
  451. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/parsers/__init__.py +0 -0
  452. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/parsers/amproduct.py +0 -0
  453. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/parsers/xpath.py +0 -0
  454. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/pokemon.py +0 -0
  455. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/populartimes.py +0 -0
  456. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/py.typed +0 -0
  457. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/rest.py +0 -0
  458. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/retailnext.py +0 -0
  459. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/rssapp.py +0 -0
  460. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/salesforce.py +0 -0
  461. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/scrapper.py +0 -0
  462. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/shoppertrack.py +0 -0
  463. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/swop.py +0 -0
  464. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/uap.py +0 -0
  465. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/upc.py +0 -0
  466. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/wm_stores.py +0 -0
  467. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/zammad.py +0 -0
  468. {querysource-4.5.16 → querysource-5.0.0}/querysource/providers/sources/zipcodeapi.py +0 -0
  469. {querysource-4.5.16 → querysource-5.0.0}/querysource/py.typed +0 -0
  470. {querysource-4.5.16 → querysource-5.0.0}/querysource/qs_parsers/__init__.py +0 -0
  471. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/__init__.py +0 -0
  472. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/executor.py +0 -0
  473. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/models.py +0 -0
  474. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/_introspect.py +0 -0
  475. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/abstract.py +0 -0
  476. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/components/__init__.py +0 -0
  477. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/components/abstract.py +0 -0
  478. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/destinations/__init__.py +0 -0
  479. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/destinations/dwh.py +0 -0
  480. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/destinations/s3.py +0 -0
  481. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/destinations/sharepoint.py +0 -0
  482. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/destinations/table.py +0 -0
  483. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/Concat.py +0 -0
  484. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/GroupBy.catalog.yaml +0 -0
  485. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/GroupBy.py +0 -0
  486. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/Info.py +0 -0
  487. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/Join.catalog.yaml +0 -0
  488. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/Join.py +0 -0
  489. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/Melt.catalog.yaml +0 -0
  490. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/Melt.py +0 -0
  491. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/Merge.catalog.yaml +0 -0
  492. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/Merge.py +0 -0
  493. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/__init__.py +0 -0
  494. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/abstract.py +0 -0
  495. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/filter/Filter.catalog.yaml +0 -0
  496. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/filter/__init__.py +0 -0
  497. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/operators/filter/flt.py +0 -0
  498. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/registry.py +0 -0
  499. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/__init__.py +0 -0
  500. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/airtable.py +0 -0
  501. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/base.py +0 -0
  502. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/file.py +0 -0
  503. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/s3.py +0 -0
  504. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/sharepoint.py +0 -0
  505. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/smartsheet.py +0 -0
  506. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/sources/table.py +0 -0
  507. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/DropCols.catalog.yaml +0 -0
  508. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/DropCols.py +0 -0
  509. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/FilterCols.catalog.yaml +0 -0
  510. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/FilterCols.py +0 -0
  511. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/Forecast.catalog.yaml +0 -0
  512. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/Forecast.py +0 -0
  513. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/Map.catalog.yaml +0 -0
  514. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/Map.py +0 -0
  515. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/NormalizeColumns.catalog.yaml +0 -0
  516. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/NormalizeColumns.py +0 -0
  517. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/PluckCols.catalog.yaml +0 -0
  518. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/PluckCols.py +0 -0
  519. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/__init__.py +0 -0
  520. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/abstract.py +0 -0
  521. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/correlation.catalog.yaml +0 -0
  522. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/correlation.py +0 -0
  523. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/crosstab.catalog.yaml +0 -0
  524. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/crosstab.py +0 -0
  525. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/google/GoogleMaps.catalog.yaml +0 -0
  526. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/google/__init__.py +0 -0
  527. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/google/maps.py +0 -0
  528. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/pivot.catalog.yaml +0 -0
  529. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/pivot.py +0 -0
  530. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/tExplode.catalog.yaml +0 -0
  531. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/tExplode.py +0 -0
  532. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/tOrder.catalog.yaml +0 -0
  533. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/tOrder.py +0 -0
  534. {querysource-4.5.16 → querysource-5.0.0}/querysource/queries/multi/transformations/tPandas.py +0 -0
  535. {querysource-4.5.16 → querysource-5.0.0}/querysource/scheduler/__init__.py +0 -0
  536. {querysource-4.5.16 → querysource-5.0.0}/querysource/scheduler/notifications.py +0 -0
  537. {querysource-4.5.16 → querysource-5.0.0}/querysource/template/__init__.py +0 -0
  538. {querysource-4.5.16 → querysource-5.0.0}/querysource/template/parser.py +0 -0
  539. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/__init__.py +0 -0
  540. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/converters.cpp +0 -0
  541. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/converters.pyx +0 -0
  542. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/dt/__init__.py +0 -0
  543. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/dt/filters.py +0 -0
  544. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/dt/transforms.py +0 -0
  545. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/py.typed +0 -0
  546. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/typedefs.c +0 -0
  547. {querysource-4.5.16 → querysource-5.0.0}/querysource/types/typedefs.pyx +0 -0
  548. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/__init__.py +0 -0
  549. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/cache_serialization.py +0 -0
  550. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/dataframes.py +0 -0
  551. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/errors.py +0 -0
  552. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/events.py +0 -0
  553. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/fn.py +0 -0
  554. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/functions.cpp +0 -0
  555. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/functions.pyx +0 -0
  556. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/getfunc.py +0 -0
  557. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/handlers.py +0 -0
  558. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/parseqs.cpp +0 -0
  559. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/parseqs.pyx +0 -0
  560. {querysource-4.5.16 → querysource-5.0.0}/querysource/utils/validators.py +0 -0
  561. {querysource-4.5.16 → querysource-5.0.0}/querysource.egg-info/dependency_links.txt +0 -0
  562. {querysource-4.5.16 → querysource-5.0.0}/querysource.egg-info/entry_points.txt +0 -0
  563. {querysource-4.5.16 → querysource-5.0.0}/querysource.egg-info/not-zip-safe +0 -0
  564. {querysource-4.5.16 → querysource-5.0.0}/querysource.egg-info/requires.txt +0 -0
  565. {querysource-4.5.16 → querysource-5.0.0}/querysource.egg-info/top_level.txt +0 -0
  566. {querysource-4.5.16 → querysource-5.0.0}/run.py +0 -0
  567. {querysource-4.5.16 → querysource-5.0.0}/rust/Cargo.lock +0 -0
  568. {querysource-4.5.16 → querysource-5.0.0}/rust/Cargo.toml +0 -0
  569. {querysource-4.5.16 → querysource-5.0.0}/rust/pyproject.toml +0 -0
  570. {querysource-4.5.16 → querysource-5.0.0}/rust/src/arangodb_parser.rs +0 -0
  571. {querysource-4.5.16 → querysource-5.0.0}/rust/src/bigquery_parser.rs +0 -0
  572. {querysource-4.5.16 → querysource-5.0.0}/rust/src/cql_parser.rs +0 -0
  573. {querysource-4.5.16 → querysource-5.0.0}/rust/src/elastic_parser.rs +0 -0
  574. {querysource-4.5.16 → querysource-5.0.0}/rust/src/filter_common.rs +0 -0
  575. {querysource-4.5.16 → querysource-5.0.0}/rust/src/flux_parser.rs +0 -0
  576. {querysource-4.5.16 → querysource-5.0.0}/rust/src/lib.rs +0 -0
  577. {querysource-4.5.16 → querysource-5.0.0}/rust/src/mongo_parser.rs +0 -0
  578. {querysource-4.5.16 → querysource-5.0.0}/rust/src/mssql_parser.rs +0 -0
  579. {querysource-4.5.16 → querysource-5.0.0}/rust/src/parseqs.rs +0 -0
  580. {querysource-4.5.16 → querysource-5.0.0}/rust/src/pgsql_parser.rs +0 -0
  581. {querysource-4.5.16 → querysource-5.0.0}/rust/src/rethink_parser.rs +0 -0
  582. {querysource-4.5.16 → querysource-5.0.0}/rust/src/safe_dict.rs +0 -0
  583. {querysource-4.5.16 → querysource-5.0.0}/rust/src/soql_parser.rs +0 -0
  584. {querysource-4.5.16 → querysource-5.0.0}/rust/src/sql_parser.rs +0 -0
  585. {querysource-4.5.16 → querysource-5.0.0}/rust/src/validators.rs +0 -0
  586. {querysource-4.5.16 → querysource-5.0.0}/scripts/remove_worktree.py +0 -0
  587. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/__init__.py +0 -0
  588. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/check_id_collisions.py +0 -0
  589. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/close_task.sh +0 -0
  590. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/ensure_worktree.py +0 -0
  591. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/heal_orphans.sh +0 -0
  592. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/id_ledger.py +0 -0
  593. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/insight.py +0 -0
  594. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/lint_new.py +0 -0
  595. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/migrate_index.py +0 -0
  596. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/reserve_ids.py +0 -0
  597. {querysource-4.5.16 → querysource-5.0.0}/scripts/sdd/sdd_meta.py +0 -0
  598. {querysource-4.5.16 → querysource-5.0.0}/setup.cfg +0 -0
  599. {querysource-4.5.16 → querysource-5.0.0}/setup.py +0 -0
  600. {querysource-4.5.16 → querysource-5.0.0}/static/notebook/bundle.js +0 -0
  601. {querysource-4.5.16 → querysource-5.0.0}/templates/__init__.py +0 -0
  602. {querysource-4.5.16 → querysource-5.0.0}/templates/base.html +0 -0
  603. {querysource-4.5.16 → querysource-5.0.0}/templates/default.html +0 -0
  604. {querysource-4.5.16 → querysource-5.0.0}/templates/default_table.html +0 -0
  605. {querysource-4.5.16 → querysource-5.0.0}/templates/fontlist-v330.json +0 -0
  606. {querysource-4.5.16 → querysource-5.0.0}/templates/fontlist-v390.json +0 -0
  607. {querysource-4.5.16 → querysource-5.0.0}/templates/table_charts.html +0 -0
  608. {querysource-4.5.16 → querysource-5.0.0}/tests/auth/__init__.py +0 -0
  609. {querysource-4.5.16 → querysource-5.0.0}/tests/auth/test_credentials.py +0 -0
  610. {querysource-4.5.16 → querysource-5.0.0}/tests/auth/test_pbac_bootstrap.py +0 -0
  611. {querysource-4.5.16 → querysource-5.0.0}/tests/check_concurrent_get_slug.py +0 -0
  612. {querysource-4.5.16 → querysource-5.0.0}/tests/conftest.py +0 -0
  613. {querysource-4.5.16 → querysource-5.0.0}/tests/datasources/__init__.py +0 -0
  614. {querysource-4.5.16 → querysource-5.0.0}/tests/datasources/test_datasource_view_pbac.py +0 -0
  615. {querysource-4.5.16 → querysource-5.0.0}/tests/datasources/test_driver_factory_session.py +0 -0
  616. {querysource-4.5.16 → querysource-5.0.0}/tests/datasources/test_pg_admin_registration.py +0 -0
  617. {querysource-4.5.16 → querysource-5.0.0}/tests/datasources/test_pg_params_for.py +0 -0
  618. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/__init__.py +0 -0
  619. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/test_abstract_pbac_helpers.py +0 -0
  620. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/test_airtable_oauth.py +0 -0
  621. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/test_multiquery_pbac_smoke.py +0 -0
  622. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/test_query_param_exclusion.py +0 -0
  623. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/test_queryexecutor_pbac_smoke.py +0 -0
  624. {querysource-4.5.16 → querysource-5.0.0}/tests/handlers/test_querymanager_pagination.py +0 -0
  625. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/__init__.py +0 -0
  626. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/test_csv_stream_response.py +0 -0
  627. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/test_datasource_endpoint.py +0 -0
  628. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/test_pbac_credentials.py +0 -0
  629. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/test_pbac_enforcement.py +0 -0
  630. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/test_pbac_listing.py +0 -0
  631. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/test_slug_injection.py +0 -0
  632. {querysource-4.5.16 → querysource-5.0.0}/tests/integration/test_slug_regression.py +0 -0
  633. {querysource-4.5.16 → querysource-5.0.0}/tests/interfaces/__init__.py +0 -0
  634. {querysource-4.5.16 → querysource-5.0.0}/tests/interfaces/test_airtable_interface.py +0 -0
  635. {querysource-4.5.16 → querysource-5.0.0}/tests/multi/__init__.py +0 -0
  636. {querysource-4.5.16 → querysource-5.0.0}/tests/multi/sources/__init__.py +0 -0
  637. {querysource-4.5.16 → querysource-5.0.0}/tests/multi/sources/test_airtable_source.py +0 -0
  638. {querysource-4.5.16 → querysource-5.0.0}/tests/multi/sources/test_registry.py +0 -0
  639. {querysource-4.5.16 → querysource-5.0.0}/tests/perf/__init__.py +0 -0
  640. {querysource-4.5.16 → querysource-5.0.0}/tests/perf/test_pbac_overhead.py +0 -0
  641. {querysource-4.5.16 → querysource-5.0.0}/tests/policies/__init__.py +0 -0
  642. {querysource-4.5.16 → querysource-5.0.0}/tests/policies/test_authorized_policy.py +0 -0
  643. {querysource-4.5.16 → querysource-5.0.0}/tests/scheduler/__init__.py +0 -0
  644. {querysource-4.5.16 → querysource-5.0.0}/tests/scheduler/test_parse_trigger_shorthands.py +0 -0
  645. {querysource-4.5.16 → querysource-5.0.0}/tests/scheduler/test_shorthand_loaders.py +0 -0
  646. {querysource-4.5.16 → querysource-5.0.0}/tests/services/__init__.py +0 -0
  647. {querysource-4.5.16 → querysource-5.0.0}/tests/services/test_querysource_setup_pbac.py +0 -0
  648. {querysource-4.5.16 → querysource-5.0.0}/tests/test_abstract_multi.py +0 -0
  649. {querysource-4.5.16 → querysource-5.0.0}/tests/test_abstract_refactor.py +0 -0
  650. {querysource-4.5.16 → querysource-5.0.0}/tests/test_api.py +0 -0
  651. {querysource-4.5.16 → querysource-5.0.0}/tests/test_arangodb_parser.py +0 -0
  652. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_colcols.py +0 -0
  653. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_correlation.py +0 -0
  654. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_filter.py +0 -0
  655. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_forecast.py +0 -0
  656. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_googlemaps.py +0 -0
  657. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_groupby.py +0 -0
  658. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_map.py +0 -0
  659. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_pivot.py +0 -0
  660. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_remote.py +0 -0
  661. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_texplode.py +0 -0
  662. {querysource-4.5.16 → querysource-5.0.0}/tests/test_catalog_torder.py +0 -0
  663. {querysource-4.5.16 → querysource-5.0.0}/tests/test_cli_generate_docs.py +0 -0
  664. {querysource-4.5.16 → querysource-5.0.0}/tests/test_column_filters.py +0 -0
  665. {querysource-4.5.16 → querysource-5.0.0}/tests/test_component_handler.py +0 -0
  666. {querysource-4.5.16 → querysource-5.0.0}/tests/test_component_registry.py +0 -0
  667. {querysource-4.5.16 → querysource-5.0.0}/tests/test_conf_airtable.py +0 -0
  668. {querysource-4.5.16 → querysource-5.0.0}/tests/test_destination_base.py +0 -0
  669. {querysource-4.5.16 → querysource-5.0.0}/tests/test_destination_dwh.py +0 -0
  670. {querysource-4.5.16 → querysource-5.0.0}/tests/test_destination_integration.py +0 -0
  671. {querysource-4.5.16 → querysource-5.0.0}/tests/test_destination_s3.py +0 -0
  672. {querysource-4.5.16 → querysource-5.0.0}/tests/test_destination_sharepoint.py +0 -0
  673. {querysource-4.5.16 → querysource-5.0.0}/tests/test_destination_table.py +0 -0
  674. {querysource-4.5.16 → querysource-5.0.0}/tests/test_destinations_documentation_endpoint.py +0 -0
  675. {querysource-4.5.16 → querysource-5.0.0}/tests/test_elastic_parser.py +0 -0
  676. {querysource-4.5.16 → querysource-5.0.0}/tests/test_error_formatter.py +0 -0
  677. {querysource-4.5.16 → querysource-5.0.0}/tests/test_eval.py +0 -0
  678. {querysource-4.5.16 → querysource-5.0.0}/tests/test_feat102_error_redaction.py +0 -0
  679. {querysource-4.5.16 → querysource-5.0.0}/tests/test_filters_drop_duplicates.py +0 -0
  680. {querysource-4.5.16 → querysource-5.0.0}/tests/test_grouping_sync.py +0 -0
  681. {querysource-4.5.16 → querysource-5.0.0}/tests/test_info_eda.py +0 -0
  682. {querysource-4.5.16 → querysource-5.0.0}/tests/test_info_eda_e2e.py +0 -0
  683. {querysource-4.5.16 → querysource-5.0.0}/tests/test_info_eda_integration.py +0 -0
  684. {querysource-4.5.16 → querysource-5.0.0}/tests/test_join_conditions.py +0 -0
  685. {querysource-4.5.16 → querysource-5.0.0}/tests/test_join_with_column_filter.py +0 -0
  686. {querysource-4.5.16 → querysource-5.0.0}/tests/test_local_executor.py +0 -0
  687. {querysource-4.5.16 → querysource-5.0.0}/tests/test_multi_destinations_subpackage.py +0 -0
  688. {querysource-4.5.16 → querysource-5.0.0}/tests/test_multiqs_column_transforms.py +0 -0
  689. {querysource-4.5.16 → querysource-5.0.0}/tests/test_multiqs_destination_dispatch.py +0 -0
  690. {querysource-4.5.16 → querysource-5.0.0}/tests/test_multiqs_slug_sources_normalize.py +0 -0
  691. {querysource-4.5.16 → querysource-5.0.0}/tests/test_multiqs_sources_integration.py +0 -0
  692. {querysource-4.5.16 → querysource-5.0.0}/tests/test_queryslug_concurrency.py +0 -0
  693. {querysource-4.5.16 → querysource-5.0.0}/tests/test_querysource_setup_airtable.py +0 -0
  694. {querysource-4.5.16 → querysource-5.0.0}/tests/test_qworker_config.py +0 -0
  695. {querysource-4.5.16 → querysource-5.0.0}/tests/test_remote_executor.py +0 -0
  696. {querysource-4.5.16 → querysource-5.0.0}/tests/test_rss.py +0 -0
  697. {querysource-4.5.16 → querysource-5.0.0}/tests/test_rust_parsers.py +0 -0
  698. {querysource-4.5.16 → querysource-5.0.0}/tests/test_scheduler_handler_integration.py +0 -0
  699. {querysource-4.5.16 → querysource-5.0.0}/tests/test_scheduler_integration.py +0 -0
  700. {querysource-4.5.16 → querysource-5.0.0}/tests/test_scheduler_notifications.py +0 -0
  701. {querysource-4.5.16 → querysource-5.0.0}/tests/test_schema_introspectable.py +0 -0
  702. {querysource-4.5.16 → querysource-5.0.0}/tests/test_source_registry.py +0 -0
  703. {querysource-4.5.16 → querysource-5.0.0}/tests/test_source_s3.py +0 -0
  704. {querysource-4.5.16 → querysource-5.0.0}/tests/test_source_sharepoint.py +0 -0
  705. {querysource-4.5.16 → querysource-5.0.0}/tests/test_source_smartsheet.py +0 -0
  706. {querysource-4.5.16 → querysource-5.0.0}/tests/test_source_table.py +0 -0
  707. {querysource-4.5.16 → querysource-5.0.0}/tests/test_sql_parser_combinations.py +0 -0
  708. {querysource-4.5.16 → querysource-5.0.0}/tests/test_table_output_postgres.py +0 -0
  709. {querysource-4.5.16 → querysource-5.0.0}/tests/test_texplode.py +0 -0
  710. {querysource-4.5.16 → querysource-5.0.0}/tests/test_thread_file_refactor.py +0 -0
  711. {querysource-4.5.16 → querysource-5.0.0}/tests/test_thread_query_refactor.py +0 -0
  712. {querysource-4.5.16 → querysource-5.0.0}/tests/test_thread_source_base.py +0 -0
  713. {querysource-4.5.16 → querysource-5.0.0}/tests/test_zammad_search.py +0 -0
  714. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_csv_writer_dataframe.py +0 -0
  715. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_cython_filter_fallback.py +0 -0
  716. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_datasource_redaction.py +0 -0
  717. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_error_payload.py +0 -0
  718. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_handler_output_status.py +0 -0
  719. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_iter_format_dataframe.py +0 -0
  720. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_output_error.py +0 -0
  721. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_provider_raw_query_validated.py +0 -0
  722. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_qs_parsers_validated.py +0 -0
  723. {querysource-4.5.16 → querysource-5.0.0}/tests/unit/test_raw_query_cond_definition_wiring.py +0 -0
  724. {querysource-4.5.16 → querysource-5.0.0}/tox.ini +0 -0
@@ -121,7 +121,9 @@ VERIFICATION CHECKLIST for TASK-<NNN>:
121
121
  If ANY check fails, fix it or STOP and report.
122
122
 
123
123
  ### e) Validate
124
- - Run linting (`ruff check`) on the files you touched and fix issues.
124
+ - Do NOT run `ruff`/`black` or spend turns on style: the engine runs `ruff check --fix` plus the
125
+ repo formatter on your committed files at merge time and commits the result itself. Style debt
126
+ that remains is fixed once, feature-wide, by `/sdd-done`.
125
127
  - Run THIS task's acceptance-criteria tests.
126
128
  - If stuck after 3 attempts, stop and report the failure clearly instead of
127
129
  committing broken code — the orchestrator treats an unresolved failure as
@@ -244,6 +244,9 @@ consolidate, and own SDD state. Coders (`sdd-coder`) run one task each in their
244
244
  green → step (g) of the Fallback loop for this task, with a Completion Note that ends with
245
245
  `Seat: <seat_label> · Backend: <backend> · Model: <model> · Attempts: <n> · Duration: <sum duration_s> · Tokens: <usage>`
246
246
  taken from `attempts[*]`; red → treat as `failed`.
247
+ The engine already ran `ruff check --fix` + the repo formatter and committed it (`lint.commit`). Fix ONLY
248
+ `lint.errors` (syntax errors / undefined names) in this worktree; ignore `lint.residual` — style debt is
249
+ fixed once, feature-wide, by `/sdd-done`. Never run `ruff`/`black` per task yourself.
247
250
  - `merge_conflict` → `git merge <branch>` in this worktree, resolve, commit, then `coder_merge(task_id)` again.
248
251
  - `failed` with `diagnostics` starting `branch_not_merged:` → the engine merged nothing (it never answers
249
252
  `merged` unless the branch is an ancestor of the feature branch). Run
@@ -295,7 +298,9 @@ VERIFICATION CHECKLIST for TASK-<NNN>:
295
298
  If ANY check fails, fix or STOP.
296
299
 
297
300
  ### e) Validate (in worktree)
298
- - Run linting and fix issues.
301
+ - Lint mechanically, never by hand (this path has no engine to do it): `ruff check --fix <task .py files>`, then
302
+ `black <task .py files>` only if `pyproject.toml` has `[tool.black]`. Fix only syntax errors / undefined names
303
+ (`ruff check --select E9,F63,F7,F82`); leave remaining style findings to `/sdd-done`.
299
304
  - Run acceptance-criteria tests.
300
305
  - If stuck after 3 attempts, mark as `"done-with-issues"`.
301
306
 
@@ -115,6 +115,35 @@ test -f <worktree-path>/<filepath>
115
115
  its acceptance-criteria tests during `/sdd-start` or `sdd-worker` execution.
116
116
  Re-running them at close time adds latency without new signal.
117
117
 
118
+ ### 4.5. Full Lint Pass (once per feature)
119
+
120
+ Per-task lint is engine-owned and only auto-fixes (`sdd-coder` engine, merge
121
+ boundary). This step is the ONE place the repo's full ruff rule set is enforced
122
+ for the feature — never per task. With `--dry-run`, run only the final
123
+ `ruff check` and report; do not fix or commit.
124
+
125
+ ```bash
126
+ WT="<worktree-path>"
127
+ git -C "$WT" fetch origin <base_branch>
128
+ mapfile -t PY < <(git -C "$WT" diff --name-only --diff-filter=ACMR "origin/<base_branch>...HEAD" -- '*.py')
129
+ if [ ${#PY[@]} -gt 0 ]; then
130
+ (cd "$WT" && ruff check --fix --exit-zero --quiet "${PY[@]}")
131
+ if grep -q '^\[tool\.black\]' "$WT/pyproject.toml"; then (cd "$WT" && black -q "${PY[@]}"); fi
132
+ git -C "$WT" add -- "${PY[@]}"
133
+ git -C "$WT" diff --cached --quiet || git -C "$WT" commit -m "style(<slug>): FEAT-<ID> — full lint pass"
134
+ (cd "$WT" && ruff check --output-format concise "${PY[@]}")
135
+ fi
136
+ ```
137
+
138
+ Then fix what `ruff check` still reports, in those files only (pre-existing
139
+ violations in a touched file included — that is deliberate code improvement):
140
+ - Keep each fix behavior-neutral; when one is not (e.g. narrowing a blind
141
+ `except Exception`), run the tests of the touched module before committing.
142
+ - Commit as `style(<slug>): FEAT-<ID> — lint fixes`.
143
+ - A finding you cannot fix safely goes under **Lint residual** in the report.
144
+ Residual syntax errors / undefined names (`E9`, `F63`, `F7`, `F82`) are merge
145
+ blockers: they turn Step 6 into the "issues" branch. Other residue does not.
146
+
118
147
  ### 5. Build Verification Report
119
148
  Classify each task:
120
149
 
@@ -130,6 +159,7 @@ Worktree: .claude/worktrees/feat-<ID>-<slug>
130
159
  Branch: feat-<ID>-<slug>
131
160
  Commits found: <N>
132
161
  Tasks: <total> total, <verified> verified, <partial> partial, <missing> missing
162
+ Lint: <autofixed files> auto-fixed, <fixed> hand-fixed, <residual> residual (<blocking> blocking)
133
163
 
134
164
  ✅ TASK-096 — Scene Editor Refactor
135
165
  Commits: feat(videoreel): TASK-096 — Scene Editor Refactor (abc1234)
@@ -537,9 +537,17 @@ stay with the thinking model — eligibility never delegates a design choice.
537
537
 
538
538
  **Worktree hint (new section in spec):**
539
539
  Include a `## Worktree Strategy` section in the spec with:
540
- - Default isolation unit: `per-spec` or `per-task`.
541
- - If `per-spec`: all tasks run sequentially in one worktree.
542
- - If mixed: list which tasks are parallelizable and why.
540
+ - Isolation: always ONE feature worktree per spec; the `sdd-coder` engine gives
541
+ each task its own sub-worktree inside it. Do not write "tasks run
542
+ sequentially" — that is not an isolation choice, and `/sdd-task` must not
543
+ turn it into a dependency chain.
544
+ - Module dependency graph: which modules need which (M2 → M1 because M2 imports
545
+ M1's `<symbol>`), with the evidence. Modules without an edge between them
546
+ are expected to run concurrently.
547
+ - Shared files: files more than one module modifies (their tasks get serialized).
548
+ - Exclusive resources: steps that mutate shared state outside a module's own
549
+ files (extension rebuild, lockfile, migration) — their tasks become
550
+ `parallel: false`.
543
551
  - Cross-feature dependencies: list any specs that must be merged first.
544
552
 
545
553
  ### 6. Commit the Spec
@@ -588,7 +596,7 @@ git commit -m "sdd: add spec for FEAT-<ID> — <feature-name>"
588
596
  ✅ Spec created and committed: sdd/specs/<feature-name>.spec.md
589
597
 
590
598
  Feature ID: FEAT-<ID>
591
- Isolation: per-spec (sequential tasks) | mixed (some parallel tasks)
599
+ Module graph: <M> modules, <E> dependency edges, exclusive: <modules or "none">
592
600
  Design research: <N> suggestions — <C> confirmed / <R> rejected / <E> escalated (model <MODEL>)
593
601
  # or: Design research: skipped (<SKIP_REASON>)
594
602
 
@@ -16,7 +16,9 @@ Decompose an approved Feature Specification into atomic, assignable implementati
16
16
  **Implementation Blueprint** (executor-ready per-file code blocks + why +
17
17
  `FILL IN` checklist, see §3). Blueprints stop at the mechanical parts;
18
18
  branches, edge cases and test bodies stay as `FILL IN` stubs.
19
- - Mark tasks that can run in parallel worktrees with `parallel: true`.
19
+ - Build the task graph by §3's **Task graph rules** — `depends_on` is the only
20
+ ordering, `parallel: false` means *exclusive* — and run
21
+ `scripts/sdd/check_task_graph.py` on the index before committing (§4b).
20
22
  - **`TASK-<NNN>` numbers are reserved via `scripts/sdd/reserve_ids.py`
21
23
  (FEAT-387), never hand-computed by scanning existing files for the
22
24
  highest number in use.** That scan-and-increment approach has no lock
@@ -93,11 +95,37 @@ Analyze the spec and identify atomic tasks:
93
95
  - Order tasks to respect implementation dependencies.
94
96
  - Aim for tasks completable in 1–4 hours each.
95
97
 
96
- **Parallelism analysis:**
97
- - Identify tasks within the spec that share NO files or imports with other tasks.
98
- - Mark those tasks as `parallel: true` — they CAN run in separate worktrees.
99
- - Tasks that import/extend code from a prior task in the same spec are `parallel: false` (default).
100
- - Document the rationale in the `parallelism_notes` field.
98
+ **Task graph rules (`depends_on`, `parallel`, `parallelism_notes`):**
99
+
100
+ Every task runs in its own sub-worktree, dispatched by the `sdd-coder` engine as
101
+ soon as its `depends_on` are done; tasks whose dependencies are met run
102
+ **concurrently**. So the graph, not the prose, decides how long a feature takes
103
+ (querysource FEAT-147: 18 tasks chained 1→2→…→18 with one copy-pasted
104
+ rationale ran strictly in series for ~7 h).
105
+
106
+ - **`depends_on` is the ONLY ordering.** Add `B depends_on A` only with evidence:
107
+ - B imports, calls, extends or tests a symbol A **creates**; or
108
+ - B consumes a file/table/config/fixture A creates; or
109
+ - B and A both **modify the same file** (serialize them: the lower id first).
110
+
111
+ Never add an edge because tasks share a module, a spec section or a "phase", or
112
+ "to be safe". A spec that says tasks run *sequentially* or *per-spec* means ONE
113
+ feature worktree — it is NOT a dependency chain. Transitive edges may be
114
+ omitted.
115
+ - **`parallel` defaults to `true`.** Set `parallel: false` (*exclusive* — never
116
+ dispatched alongside any other task, even with its dependencies met) only when
117
+ the task mutates shared state **outside its declared files**: rebuilding
118
+ compiled extensions (Cython `make build-inplace`, maturin), editing dependency
119
+ manifests or lockfiles (`pyproject.toml`, `uv.lock`), running DDL/migrations
120
+ against a shared database, regenerating shared generated code, or changing a
121
+ `conftest.py` other tasks' tests load.
122
+ - **`parallelism_notes` is per task and names its evidence**: for each
123
+ `depends_on` edge, the dependency id plus the symbol/file it needs
124
+ (`"imports TenantRegistry from TASK-716 (querysource/tenants.py)"`); for an
125
+ exclusive task, the shared resource. Identical notes on several tasks is a
126
+ defect.
127
+ - Write `"parallel_semantics": "exclusive"` in the index header (see schema) —
128
+ without it the engine ignores every `parallel` flag.
101
129
 
102
130
  **CRITICAL — Codebase Contract per Task (Anti-Hallucination):**
103
131
  For EACH task, you MUST populate its `## Codebase Contract` section:
@@ -225,6 +253,7 @@ and ignored by all FEAT-145 commands). Schema:
225
253
  "base_branch": "dev",
226
254
  "created_at": "<ISO-8601>",
227
255
  "completed_at": null,
256
+ "parallel_semantics": "exclusive",
228
257
  "tasks": [
229
258
  {
230
259
  "id": "TASK-<NNN>",
@@ -237,8 +266,8 @@ and ignored by all FEAT-145 commands). Schema:
237
266
  "priority": "<high|medium|low>",
238
267
  "effort": "<S|M|L|XL>",
239
268
  "depends_on": [],
240
- "parallel": false,
241
- "parallelism_notes": "<rationale>",
269
+ "parallel": true,
270
+ "parallelism_notes": "<per-task evidence: 'needs <symbol> from TASK-<X> (<file>)' | exclusive resource>",
242
271
  "assigned_to": null,
243
272
  "started_at": null,
244
273
  "completed_at": null,
@@ -251,7 +280,9 @@ and ignored by all FEAT-145 commands). Schema:
251
280
  **Header fields (`type`, `base_branch`)** are populated from the spec's
252
281
  frontmatter (resolved in §1 above). If `sdd/tasks/index/<feature>.json`
253
282
  already exists (created by the migration script for older specs), append
254
- the new tasks to its `tasks[]` array — do NOT overwrite the header.
283
+ the new tasks to its `tasks[]` array — do NOT overwrite the header. Do not add
284
+ `parallel_semantics` to an existing header whose tasks were written before these
285
+ rules: their `parallel: false` meant something else and would serialize them.
255
286
 
256
287
  **Index location helper:**
257
288
  ```bash
@@ -285,6 +316,24 @@ complete. `design_complete: true` is a declaration the task author signs.
285
316
  - Omit the section entirely when the task is not eligible. Most tasks are not,
286
317
  and that is the normal, expected route.
287
318
 
319
+ ### 4b. Validate the Task Graph
320
+
321
+ Run the deterministic graph check on the index you just wrote:
322
+
323
+ ```bash
324
+ python -m scripts.sdd.check_task_graph sdd/tasks/index/<feature-slug>.json
325
+ ```
326
+
327
+ - **Errors** (exit 1) block the commit: `file-overlap` (two tasks declare the
328
+ same file with no dependency path between them — they would run concurrently
329
+ and conflict), `unknown-dependency`, `cycle`. Fix the graph, re-run.
330
+ - **Every warning is resolved, not ignored**: `unjustified-edge` → remove the
331
+ edge, or write its evidence in `parallelism_notes` (naming the dependency id);
332
+ `possible-missing-dependency` → add the edge or confirm the reference is not
333
+ a use; `duplicate-notes` / `exclusive-without-notes` → write per-task notes.
334
+ - Copy the report's first line (`<N> tasks, <W> waves, max width <M>`) into the
335
+ §6 output. A width of 1 on a multi-task feature needs a one-line justification.
336
+
288
337
  ### 5. Commit Tasks and Per-Spec Index to `<BASE>`
289
338
 
290
339
  > **CRITICAL — Only commit the per-spec index and the new task files. NEVER
@@ -331,6 +380,7 @@ Tasks created:
331
380
  HOTFIX-<JIRA-KEY>-<N> — <title> [<priority>/<effort>] # hotfix
332
381
 
333
382
  Blueprints: <N>/<N> tasks carry an Implementation Blueprint
383
+ Graph: <N> tasks, <W> waves, max width <M>; exclusive: <ids or "none">
334
384
  Delegated: <D>/<N> tasks carry a Delegation Contract (targeted writer)
335
385
  TASK-<NNN>, TASK-<NNN> # list them, or "none"
336
386
 
@@ -1,6 +1,25 @@
1
1
  Unreleased
2
2
  ==========
3
3
 
4
+ Describe API for query slugs (FEAT-148)
5
+ ---------------------------------------
6
+
7
+ New read-only endpoints for discovering stored query slugs without executing them:
8
+ ``GET /api/v1/queries/describe`` (paginated list), ``GET /api/v1/queries/{slug}/describe``
9
+ (definition + typed variables), ``GET /api/v1/queries/{slug}/columns`` (prepared, never
10
+ executed) and ``GET /api/v1/queries/vocabulary`` (relative-date keywords).
11
+
12
+ Tenant-scoped endpoints (when FEAT-147 tenant registry is enabled):
13
+ ``GET /api/v1/{tenant}/queries/describe``, ``GET /api/v1/{tenant}/queries/{slug}/describe``,
14
+ and ``GET /api/v1/{tenant}/queries/{slug}/columns`` serve per-tenant definitions via the tenant
15
+ registry. Access control, redaction, and all pagination/filtering rules apply identically.
16
+
17
+ - Access rules: Requires a principal (session or sessionless authz). List visibility requires ``slug:list`` or ``slug:execute``; detail and columns require ``slug:describe`` or ``slug:execute``. Denials return ``404`` to prevent enumeration.
18
+ - Redaction: Sensitive fields (like ``query_raw``) are redacted unless the principal has ``slug:describe_raw``. Admin-only fields (like ``dwh_info``, ``cache_options``) are visible only to superusers or members of ``QS_DESCRIBE_ADMIN_GROUPS``.
19
+ - Configuration: Configured via ``QS_DESCRIBE_MAX_SCAN`` (default 10000), ``QS_DESCRIBE_ADMIN_GROUPS`` (default admin,superuser), and ``QS_DESCRIBE_COLUMNS_TIMEOUT`` (default 5).
20
+ - Policy: Default policies in ``policies/defaults.yaml`` (such as ``admin_full_access``) are updated to grant ``slug:describe`` and ``slug:describe_raw``.
21
+ - Behaviour change: Relative-date keywords (``TODAY``, ``YESTERDAY``, ``FDOM``, ``LDOM``, ``CURRENT_YEAR``, ``CURRENT_MONTH``, ``LAST_YEAR``) now resolve consistently on raw-query providers for untyped and date/datetime/timestamp conditions. Environment overrides for ``UDF_LIST``, ``PG_CONSTANTS``, and ``PG_UDF`` now accept comma-separated values.
22
+
4
23
  Row-oriented outputs — DataFrame results and swallowed errors
5
24
  -------------------------------------------------------------
6
25
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: querysource
3
- Version: 4.5.16
3
+ Version: 5.0.0
4
4
  Summary: Aiohttp web service for querying several databases easily
5
5
  Author-email: Jesus Lara <jesuslarag@gmail.com>
6
6
  License: BSD-3-Clause
@@ -45,6 +45,13 @@
45
45
  "default": null,
46
46
  "required": false,
47
47
  "description": "Address of the remote qworker to use for this query, in ``host:port`` format (e.g. ``qworker1.internal:8888``). Overrides the central ``QWORKER_HOST`` / ``QWORKER_PORT`` settings. Only relevant when ``remote: true``. If no port is specified, QWORKER_PORT is used as the fallback (default: 8888)."
48
+ },
49
+ {
50
+ "name": "tenant",
51
+ "type": "str",
52
+ "default": null,
53
+ "required": false,
54
+ "description": "Tenant owner for this query. If omitted, inherits from parent or uses the configured default store. If explicitly ``null``, uses the legacy store. If a string, selects that exact tenant from the allowlist. Examples: ``null`` (legacy), ``client_a`` (explicit tenant)."
48
55
  }
49
56
  ],
50
57
  "json_schema": {
@@ -76,6 +83,11 @@
76
83
  "worker": {
77
84
  "type": "string",
78
85
  "description": "Address of the remote qworker to use for this query, in ``host:port`` format (e.g. ``qworker1.internal:8888``). Overrides the central ``QWORKER_HOST`` / ``QWORKER_PORT`` settings. Only relevant when ``remote: true``. If no port is specified, QWORKER_PORT is used as the fallback (default: 8888)."
86
+ },
87
+ "tenant": {
88
+ "type": "string",
89
+ "description": "Tenant owner for this query. If omitted, inherits from parent or uses the configured default store. If explicitly ``null``, uses the legacy store. If a string, selects that exact tenant from the allowlist. Examples: ``null`` (legacy), ``client_a`` (explicit tenant).",
90
+ "default": null
79
91
  }
80
92
  },
81
93
  "oneOf": [
@@ -94,6 +106,6 @@
94
106
  "additionalProperties": true,
95
107
  "description": "A single entry under the MultiQS ``queries:`` block. Must provide either ``slug`` or ``query`` (but not both)."
96
108
  },
97
- "example": "{\n \"queries\": {\n \"stores\": {\n \"query\": \"select * from hisense.stores\",\n \"driver\": \"pg\"\n },\n \"products\": {\n \"slug\": \"all_products\"\n },\n \"remote_orders\": {\n \"slug\": \"daily_orders\",\n \"remote\": true,\n \"worker\": \"qworker1.internal:8888\",\n \"store_id\": 42\n }\n }\n}",
109
+ "example": "{\n \"queries\": {\n \"stores\": {\n \"query\": \"select * from hisense.stores\",\n \"driver\": \"pg\"\n },\n \"products\": {\n \"slug\": \"all_products\"\n },\n \"remote_orders\": {\n \"slug\": \"daily_orders\",\n \"remote\": true,\n \"worker\": \"qworker1.internal:8888\",\n \"store_id\": 42\n },\n \"tenant_sales\": {\n \"slug\": \"sales_report\",\n \"tenant\": \"client_a\"\n }\n }\n}",
98
110
  "icon": "database"
99
111
  }
@@ -24,6 +24,8 @@ policies:
24
24
  - "driver:use"
25
25
  - "driver:list"
26
26
  - "raw_query:execute"
27
+ - "slug:describe"
28
+ - "slug:describe_raw"
27
29
  subjects:
28
30
  groups:
29
31
  - superuser
@@ -211,6 +211,69 @@ filterwarnings = [
211
211
  'ignore:The loop argument is deprecated since Python 3\.8, and scheduled for removal in Python 3\.10:DeprecationWarning:asyncio',
212
212
  ]
213
213
 
214
+ # ---------------------------------------------------------------------------
215
+ # Formatting (black) and linting (ruff)
216
+ # ---------------------------------------------------------------------------
217
+ # black formats, ruff lints (no `ruff format`). Both use 120 columns, matching
218
+ # tox.ini's [flake8]/[pep8] max-line-length. The sdd-coder engine runs
219
+ # `ruff check --fix` + black on each task's files at merge time; `/sdd-done`
220
+ # fixes the remaining findings in the files a feature touches.
221
+ [tool.black]
222
+ line-length = 120
223
+ # Floor of requires-python (>=3.10.1) plus the venv's 3.11; formatting for
224
+ # 3.10 is valid on every supported interpreter and keeps black's AST safety
225
+ # check on when run from an older venv.
226
+ target-version = ["py310", "py311"]
227
+ extend-exclude = '''
228
+ /(
229
+ \.claude/worktrees
230
+ | build
231
+ | generated
232
+ | rust
233
+ )/
234
+ '''
235
+
236
+ [tool.ruff]
237
+ line-length = 120
238
+ target-version = "py310"
239
+ src = ["."]
240
+ extend-exclude = [".claude/worktrees", "*.ipynb", "build", "generated", "rust"]
241
+
242
+ [tool.ruff.lint]
243
+ # Pinned explicitly: ruff >= 0.16 widened its implicit default rule set, so an
244
+ # unconfigured repo's findings drifted with the tool version.
245
+ select = [
246
+ "E4", "E7", "E9", "F", # pycodestyle errors + pyflakes (real defects)
247
+ "B", # flake8-bugbear
248
+ "ASYNC", # blocking calls inside async def
249
+ "UP", # pyupgrade (minus the annotation rewrites below)
250
+ "I", # import sorting (black-compatible)
251
+ "PIE", # no-op placeholders, duplicate enum values
252
+ "C4", # comprehension misuse
253
+ "LOG", # logging calls outside handlers / root logger
254
+ "DTZ", # naive datetimes (scheduler, caches, tenants)
255
+ ]
256
+ ignore = [
257
+ # python-datamodel 0.11 (datamodel.BaseModel) cannot evaluate PEP 604/585
258
+ # annotations at runtime: `a: int | None` raises "Expected type, got
259
+ # types.UnionType" and `Optional[tuple[int, ...]]` fails to parse. The
260
+ # auto-fixes for these would break models, so typing.Optional/List stay.
261
+ "UP006", "UP007", "UP035", "UP045",
262
+ # `timeout` parameters on async APIs are part of the public surface.
263
+ "ASYNC109",
264
+ # `dict(a=1)` vs `{"a": 1}` is taste, not a defect.
265
+ "C408",
266
+ ]
267
+
268
+ [tool.ruff.lint.isort]
269
+ known-first-party = ["querysource"]
270
+
271
+ [tool.ruff.lint.per-file-ignores]
272
+ "**/__init__.py" = ["F401", "F403", "F405"]
273
+ "tests/**/*.py" = ["F401", "F811", "F841", "B011", "B017", "ASYNC230", "ASYNC240"]
274
+ "**/conftest.py" = ["F401", "F403"]
275
+ "examples/**/*.py" = ["F401", "F841", "E402"]
276
+
214
277
  # ---------------------------------------------------------------------------
215
278
  # Maturin (Rust extension) — configured in rust/pyproject.toml.
216
279
  # Invoke via: maturin develop --release --manifest-path rust/Cargo.toml
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '4.5.16'
22
- __version_tuple__ = version_tuple = (4, 5, 16)
21
+ __version__ = version = '5.0.0'
22
+ __version_tuple__ = version_tuple = (5, 0, 0)
23
23
 
24
- __commit_id__ = commit_id = 'g545b899f2'
24
+ __commit_id__ = commit_id = 'gaebc55c28'