querysource 4.5.7__tar.gz → 4.5.9__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 (629) hide show
  1. {querysource-4.5.7 → querysource-4.5.9}/PKG-INFO +1 -1
  2. {querysource-4.5.7 → querysource-4.5.9}/querysource/_version.py +3 -3
  3. {querysource-4.5.7 → querysource-4.5.9}/querysource/connections.py +3 -21
  4. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/memcached.py +2 -2
  5. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/executor.py +6 -1
  6. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/abstract.py +15 -0
  7. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/cassandra.py +7 -1
  8. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/default.py +7 -1
  9. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/documentdb.py +8 -1
  10. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/mysql.py +7 -1
  11. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sql.py +14 -2
  12. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sqlserver.py +7 -1
  13. {querysource-4.5.7 → querysource-4.5.9}/querysource/version.py +1 -1
  14. {querysource-4.5.7 → querysource-4.5.9}/querysource.egg-info/PKG-INFO +1 -1
  15. {querysource-4.5.7 → querysource-4.5.9}/querysource.egg-info/SOURCES.txt +2 -1
  16. {querysource-4.5.7 → querysource-4.5.9}/querysource.egg-info/scm_file_list.json +1 -0
  17. querysource-4.5.9/querysource.egg-info/scm_version.json +8 -0
  18. querysource-4.5.9/rust/Cargo.toml +34 -0
  19. {querysource-4.5.7 → querysource-4.5.9}/rust/src/safe_dict.rs +69 -0
  20. {querysource-4.5.7 → querysource-4.5.9}/rust/src/validators.rs +23 -3
  21. querysource-4.5.9/tests/unit/test_raw_query_cond_definition_wiring.py +182 -0
  22. querysource-4.5.7/querysource.egg-info/scm_version.json +0 -8
  23. querysource-4.5.7/rust/Cargo.toml +0 -23
  24. {querysource-4.5.7 → querysource-4.5.9}/.agent/rules/async-programming-expert.md +0 -0
  25. {querysource-4.5.7 → querysource-4.5.9}/.agent/rules/code-reviewer.md +0 -0
  26. {querysource-4.5.7 → querysource-4.5.9}/.agent/rules/cython-development.md +0 -0
  27. {querysource-4.5.7 → querysource-4.5.9}/.agent/rules/prompt-expert.md +0 -0
  28. {querysource-4.5.7 → querysource-4.5.9}/.agent/rules/python-development.md +0 -0
  29. {querysource-4.5.7 → querysource-4.5.9}/.agent/rules/rust-development.md +0 -0
  30. {querysource-4.5.7 → querysource-4.5.9}/.agent/workflows/create-parrot-tool.md +0 -0
  31. {querysource-4.5.7 → querysource-4.5.9}/.agent/workflows/create-workflow.md +0 -0
  32. {querysource-4.5.7 → querysource-4.5.9}/.agent/workflows/debug-regressions-with-git-bisect-binary-search.md +0 -0
  33. {querysource-4.5.7 → querysource-4.5.9}/.agent/workflows/generate-tests.md +0 -0
  34. {querysource-4.5.7 → querysource-4.5.9}/.agent/workflows/git-new-feature.md +0 -0
  35. {querysource-4.5.7 → querysource-4.5.9}/.agent/workflows/parrot-mcp-server.md +0 -0
  36. {querysource-4.5.7 → querysource-4.5.9}/.agent/workflows/release_package.md +0 -0
  37. {querysource-4.5.7 → querysource-4.5.9}/.agent/workflows/start-flow.md +0 -0
  38. {querysource-4.5.7 → querysource-4.5.9}/.bumpversion.cfg +0 -0
  39. {querysource-4.5.7 → querysource-4.5.9}/.claude/agents/code-reviewer.md +0 -0
  40. {querysource-4.5.7 → querysource-4.5.9}/.claude/agents/sdd-autopilot.md +0 -0
  41. {querysource-4.5.7 → querysource-4.5.9}/.claude/agents/sdd-qa.md +0 -0
  42. {querysource-4.5.7 → querysource-4.5.9}/.claude/agents/sdd-research.md +0 -0
  43. {querysource-4.5.7 → querysource-4.5.9}/.claude/agents/sdd-worker.md +0 -0
  44. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/pr-review.md +0 -0
  45. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-brainstorm.md +0 -0
  46. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-codereview.md +0 -0
  47. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-done.md +0 -0
  48. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-fromjira.md +0 -0
  49. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-next.md +0 -0
  50. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-proposal.md +0 -0
  51. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-spec.md +0 -0
  52. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-start.md +0 -0
  53. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-status.md +0 -0
  54. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-task.md +0 -0
  55. {querysource-4.5.7 → querysource-4.5.9}/.claude/commands/sdd-tojira.md +0 -0
  56. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/aws-cost-optimization.md +0 -0
  57. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/code-reviewer.md +0 -0
  58. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/cython-development.md +0 -0
  59. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/python-development.md +0 -0
  60. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/rust-development.md +0 -0
  61. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/using-git-worktrees.md +0 -0
  62. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/worktree-pr-and-clean.md +0 -0
  63. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/worktree-start-feature.md +0 -0
  64. {querysource-4.5.7 → querysource-4.5.9}/.claude/rules/worktree-status.md +0 -0
  65. {querysource-4.5.7 → querysource-4.5.9}/.github/dependabot.yml +0 -0
  66. {querysource-4.5.7 → querysource-4.5.9}/.github/workflows/codeql-analysis.yml +0 -0
  67. {querysource-4.5.7 → querysource-4.5.9}/.github/workflows/release.yml +0 -0
  68. {querysource-4.5.7 → querysource-4.5.9}/.isort.cfg +0 -0
  69. {querysource-4.5.7 → querysource-4.5.9}/.jupyter/jupyter_notebook_config.py +0 -0
  70. {querysource-4.5.7 → querysource-4.5.9}/.pre-commit-config.yaml +0 -0
  71. {querysource-4.5.7 → querysource-4.5.9}/.pylintrc +0 -0
  72. {querysource-4.5.7 → querysource-4.5.9}/CHANGES.rst +0 -0
  73. {querysource-4.5.7 → querysource-4.5.9}/CODE_OF_CONDUCT.md +0 -0
  74. {querysource-4.5.7 → querysource-4.5.9}/CONTRIBUTING.md +0 -0
  75. {querysource-4.5.7 → querysource-4.5.9}/INSTALL +0 -0
  76. {querysource-4.5.7 → querysource-4.5.9}/JOIN_CONDITIONS_FEATURE.md +0 -0
  77. {querysource-4.5.7 → querysource-4.5.9}/JOIN_CONDITIONS_SUMMARY.md +0 -0
  78. {querysource-4.5.7 → querysource-4.5.9}/LICENSE +0 -0
  79. {querysource-4.5.7 → querysource-4.5.9}/MANIFEST.in +0 -0
  80. {querysource-4.5.7 → querysource-4.5.9}/Makefile +0 -0
  81. {querysource-4.5.7 → querysource-4.5.9}/README.md +0 -0
  82. {querysource-4.5.7 → querysource-4.5.9}/app.py +0 -0
  83. {querysource-4.5.7 → querysource-4.5.9}/bin/README.md +0 -0
  84. {querysource-4.5.7 → querysource-4.5.9}/conftest.py +0 -0
  85. {querysource-4.5.7 → querysource-4.5.9}/generated/AirtableSource.json +0 -0
  86. {querysource-4.5.7 → querysource-4.5.9}/generated/Concat.json +0 -0
  87. {querysource-4.5.7 → querysource-4.5.9}/generated/DWHDestination.json +0 -0
  88. {querysource-4.5.7 → querysource-4.5.9}/generated/DropCols.json +0 -0
  89. {querysource-4.5.7 → querysource-4.5.9}/generated/FileSource.json +0 -0
  90. {querysource-4.5.7 → querysource-4.5.9}/generated/Filter.json +0 -0
  91. {querysource-4.5.7 → querysource-4.5.9}/generated/FilterCols.json +0 -0
  92. {querysource-4.5.7 → querysource-4.5.9}/generated/Forecast.json +0 -0
  93. {querysource-4.5.7 → querysource-4.5.9}/generated/GoogleMaps.json +0 -0
  94. {querysource-4.5.7 → querysource-4.5.9}/generated/GroupBy.json +0 -0
  95. {querysource-4.5.7 → querysource-4.5.9}/generated/Info.json +0 -0
  96. {querysource-4.5.7 → querysource-4.5.9}/generated/Join.json +0 -0
  97. {querysource-4.5.7 → querysource-4.5.9}/generated/Map.json +0 -0
  98. {querysource-4.5.7 → querysource-4.5.9}/generated/Melt.json +0 -0
  99. {querysource-4.5.7 → querysource-4.5.9}/generated/Merge.json +0 -0
  100. {querysource-4.5.7 → querysource-4.5.9}/generated/NormalizeColumns.json +0 -0
  101. {querysource-4.5.7 → querysource-4.5.9}/generated/PluckCols.json +0 -0
  102. {querysource-4.5.7 → querysource-4.5.9}/generated/Query.json +0 -0
  103. {querysource-4.5.7 → querysource-4.5.9}/generated/S3Source.json +0 -0
  104. {querysource-4.5.7 → querysource-4.5.9}/generated/SharepointSource.json +0 -0
  105. {querysource-4.5.7 → querysource-4.5.9}/generated/SmartSheetSource.json +0 -0
  106. {querysource-4.5.7 → querysource-4.5.9}/generated/Table.json +0 -0
  107. {querysource-4.5.7 → querysource-4.5.9}/generated/TableDestination.json +0 -0
  108. {querysource-4.5.7 → querysource-4.5.9}/generated/TableOutput.json +0 -0
  109. {querysource-4.5.7 → querysource-4.5.9}/generated/TableOutputAdapter.json +0 -0
  110. {querysource-4.5.7 → querysource-4.5.9}/generated/TableSource.json +0 -0
  111. {querysource-4.5.7 → querysource-4.5.9}/generated/ToS3.json +0 -0
  112. {querysource-4.5.7 → querysource-4.5.9}/generated/ToSharepoint.json +0 -0
  113. {querysource-4.5.7 → querysource-4.5.9}/generated/correlation.json +0 -0
  114. {querysource-4.5.7 → querysource-4.5.9}/generated/crosstab.json +0 -0
  115. {querysource-4.5.7 → querysource-4.5.9}/generated/pivot.json +0 -0
  116. {querysource-4.5.7 → querysource-4.5.9}/generated/tExplode.json +0 -0
  117. {querysource-4.5.7 → querysource-4.5.9}/generated/tOrder.json +0 -0
  118. {querysource-4.5.7 → querysource-4.5.9}/generated/tPandas.json +0 -0
  119. {querysource-4.5.7 → querysource-4.5.9}/gunicorn_config.py +0 -0
  120. {querysource-4.5.7 → querysource-4.5.9}/mypy.ini +0 -0
  121. {querysource-4.5.7 → querysource-4.5.9}/nav.py +0 -0
  122. {querysource-4.5.7 → querysource-4.5.9}/policies/HARDENING.md +0 -0
  123. {querysource-4.5.7 → querysource-4.5.9}/policies/authorized.yaml +0 -0
  124. {querysource-4.5.7 → querysource-4.5.9}/policies/baseline.yaml +0 -0
  125. {querysource-4.5.7 → querysource-4.5.9}/policies/datasources.yaml +0 -0
  126. {querysource-4.5.7 → querysource-4.5.9}/policies/defaults.yaml +0 -0
  127. {querysource-4.5.7 → querysource-4.5.9}/policies/drivers.yaml +0 -0
  128. {querysource-4.5.7 → querysource-4.5.9}/policies/raw_queries.yaml +0 -0
  129. {querysource-4.5.7 → querysource-4.5.9}/policies/slugs.yaml +0 -0
  130. {querysource-4.5.7 → querysource-4.5.9}/policies/superusers.yaml +0 -0
  131. {querysource-4.5.7 → querysource-4.5.9}/pyproject.toml +0 -0
  132. {querysource-4.5.7 → querysource-4.5.9}/pytest.ini +0 -0
  133. {querysource-4.5.7 → querysource-4.5.9}/querysource/__cli__.py +0 -0
  134. {querysource-4.5.7 → querysource-4.5.9}/querysource/__init__.py +0 -0
  135. {querysource-4.5.7 → querysource-4.5.9}/querysource/auth/__init__.py +0 -0
  136. {querysource-4.5.7 → querysource-4.5.9}/querysource/auth/_resource_types.py +0 -0
  137. {querysource-4.5.7 → querysource-4.5.9}/querysource/auth/credentials.py +0 -0
  138. {querysource-4.5.7 → querysource-4.5.9}/querysource/auth/pbac.py +0 -0
  139. {querysource-4.5.7 → querysource-4.5.9}/querysource/cache/__init__.py +0 -0
  140. {querysource-4.5.7 → querysource-4.5.9}/querysource/cache/backends/__init__.py +0 -0
  141. {querysource-4.5.7 → querysource-4.5.9}/querysource/cache/backends/abstract.py +0 -0
  142. {querysource-4.5.7 → querysource-4.5.9}/querysource/cache/backends/memcache.py +0 -0
  143. {querysource-4.5.7 → querysource-4.5.9}/querysource/cache/backends/redis.py +0 -0
  144. {querysource-4.5.7 → querysource-4.5.9}/querysource/cache/base.py +0 -0
  145. {querysource-4.5.7 → querysource-4.5.9}/querysource/cli/__init__.py +0 -0
  146. {querysource-4.5.7 → querysource-4.5.9}/querysource/cli/generate_docs.py +0 -0
  147. {querysource-4.5.7 → querysource-4.5.9}/querysource/conf.py +0 -0
  148. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/__init__.py +0 -0
  149. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/__init__.py +0 -0
  150. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/abstract.py +0 -0
  151. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/arangodb.py +0 -0
  152. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/athena.py +0 -0
  153. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/bigquery.py +0 -0
  154. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/cassandra.py +0 -0
  155. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/clickhouse.py +0 -0
  156. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/cockroachdb.py +0 -0
  157. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/couchbase.py +0 -0
  158. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/couchdb.py +0 -0
  159. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/countries.py +0 -0
  160. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/delta.py +0 -0
  161. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/documentdb.py +0 -0
  162. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/dynamodb.py +0 -0
  163. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/elastic.py +0 -0
  164. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/ga.py +0 -0
  165. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/gcalc.py +0 -0
  166. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/hazel.py +0 -0
  167. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/iceberg.py +0 -0
  168. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/influx.py +0 -0
  169. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/jdbc.py +0 -0
  170. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/jira.py +0 -0
  171. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/mariadb.py +0 -0
  172. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/mongo.py +0 -0
  173. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/mysql.py +0 -0
  174. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/odbc.py +0 -0
  175. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/openweather.py +0 -0
  176. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/oracle.py +0 -0
  177. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/pg.py +0 -0
  178. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/pg_admin.py +0 -0
  179. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/postgres.py +0 -0
  180. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/py.typed +0 -0
  181. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/qs.py +0 -0
  182. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/redis.py +0 -0
  183. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/rest.py +0 -0
  184. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/rethink.py +0 -0
  185. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/sa.py +0 -0
  186. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/salesforce.py +0 -0
  187. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/scylladb.py +0 -0
  188. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/sqlalchemy.py +0 -0
  189. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/sqlite.py +0 -0
  190. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/sqlserver.py +0 -0
  191. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/upc.py +0 -0
  192. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/drivers/zipcodeapi.py +0 -0
  193. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/handlers/__init__.py +0 -0
  194. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/handlers/datasource.py +0 -0
  195. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/handlers/utils.py +0 -0
  196. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/introspection.py +0 -0
  197. {querysource-4.5.7 → querysource-4.5.9}/querysource/datasources/models.py +0 -0
  198. {querysource-4.5.7 → querysource-4.5.9}/querysource/events/__init__.py +0 -0
  199. {querysource-4.5.7 → querysource-4.5.9}/querysource/exceptions.py +0 -0
  200. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/__init__.py +0 -0
  201. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/_pagination.py +0 -0
  202. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/abstract.py +0 -0
  203. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/components.py +0 -0
  204. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/integrations/__init__.py +0 -0
  205. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/integrations/airtable.py +0 -0
  206. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/log.py +0 -0
  207. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/manager.py +0 -0
  208. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/multi.py +0 -0
  209. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/outputs/__init__.py +0 -0
  210. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/outputs/tableOutput/__init__.py +0 -0
  211. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/outputs/tableOutput/postgres.py +0 -0
  212. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/outputs/tableOutput/table.py +0 -0
  213. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/scheduler.py +0 -0
  214. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/service.py +0 -0
  215. {querysource-4.5.7 → querysource-4.5.9}/querysource/handlers/variables.py +0 -0
  216. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/__init__.py +0 -0
  217. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/airtable.py +0 -0
  218. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/connections.py +0 -0
  219. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/credentials.py +0 -0
  220. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/databases/__init__.py +0 -0
  221. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/databases/abstract.py +0 -0
  222. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/databases/bigquery.py +0 -0
  223. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/databases/db.py +0 -0
  224. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/databases/mongo.py +0 -0
  225. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/databases/rethink.py +0 -0
  226. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/http.py +0 -0
  227. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/playwright_service.py +0 -0
  228. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/queries.py +0 -0
  229. {querysource-4.5.7 → querysource-4.5.9}/querysource/interfaces/selenium_service.py +0 -0
  230. {querysource-4.5.7 → querysource-4.5.9}/querysource/libs/__init__.py +0 -0
  231. {querysource-4.5.7 → querysource-4.5.9}/querysource/libs/encoders.py +0 -0
  232. {querysource-4.5.7 → querysource-4.5.9}/querysource/libs/functions/__init__.py +0 -0
  233. {querysource-4.5.7 → querysource-4.5.9}/querysource/libs/py.typed +0 -0
  234. {querysource-4.5.7 → querysource-4.5.9}/querysource/models.py +0 -0
  235. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/__init__.py +0 -0
  236. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/destinations/__init__.py +0 -0
  237. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/destinations/abstract.py +0 -0
  238. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/destinations/dwh.py +0 -0
  239. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/destinations/s3.py +0 -0
  240. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/destinations/sharepoint.py +0 -0
  241. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/destinations/table.py +0 -0
  242. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/__init__.py +0 -0
  243. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/abstract.py +0 -0
  244. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/arrow.py +0 -0
  245. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/dt.py +0 -0
  246. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/factory.py +0 -0
  247. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/iter.py +0 -0
  248. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/modin.py +0 -0
  249. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/pandas.py +0 -0
  250. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/dt/polars.py +0 -0
  251. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/output.py +0 -0
  252. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/__init__.py +0 -0
  253. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/abstract.py +0 -0
  254. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/bigquery.py +0 -0
  255. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/documentdb.py +0 -0
  256. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/mongodb.py +0 -0
  257. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/mysql.py +0 -0
  258. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/postgres.py +0 -0
  259. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/rethink.py +0 -0
  260. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/sa.py +0 -0
  261. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/TableOutput/table.py +0 -0
  262. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/tables/__init__.py +0 -0
  263. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/__init__.py +0 -0
  264. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/abstract.py +0 -0
  265. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/bokeh.py +0 -0
  266. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/clustering.py +0 -0
  267. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/csv.py +0 -0
  268. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/describe.py +0 -0
  269. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/eda.py +0 -0
  270. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/excel.py +0 -0
  271. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/html.py +0 -0
  272. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/json.py +0 -0
  273. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/pdf.py +0 -0
  274. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/pickle.py +0 -0
  275. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/plotly.py +0 -0
  276. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/profiling.py +0 -0
  277. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/report.py +0 -0
  278. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/table.py +0 -0
  279. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/tsv.py +0 -0
  280. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/txt.py +0 -0
  281. {querysource-4.5.7 → querysource-4.5.9}/querysource/outputs/writers/xml.py +0 -0
  282. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/__init__.py +0 -0
  283. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/abstract.c +0 -0
  284. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/abstract.pxd +0 -0
  285. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/abstract.pyx +0 -0
  286. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/arangodb.c +0 -0
  287. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/arangodb.pxd +0 -0
  288. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/arangodb.pyx +0 -0
  289. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/bigquery.c +0 -0
  290. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/bigquery.pxd +0 -0
  291. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/bigquery.pyx +0 -0
  292. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/cql.c +0 -0
  293. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/cql.pxd +0 -0
  294. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/cql.pyx +0 -0
  295. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/deltatbl.c +0 -0
  296. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/deltatbl.pxd +0 -0
  297. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/deltatbl.pyx +0 -0
  298. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/elastic.cpp +0 -0
  299. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/elastic.pxd +0 -0
  300. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/elastic.pyx +0 -0
  301. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/iceberg.c +0 -0
  302. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/iceberg.pxd +0 -0
  303. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/iceberg.pyx +0 -0
  304. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/influx.c +0 -0
  305. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/influx.pxd +0 -0
  306. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/influx.pyx +0 -0
  307. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/mongo.cpp +0 -0
  308. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/mongo.pxd +0 -0
  309. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/mongo.pyx +0 -0
  310. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/parser.c +0 -0
  311. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/parser.pxd +0 -0
  312. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/parser.pyx +0 -0
  313. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/pgsql.c +0 -0
  314. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/pgsql.pxd +0 -0
  315. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/pgsql.pyx +0 -0
  316. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/rethink.c +0 -0
  317. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/rethink.pxd +0 -0
  318. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/rethink.pyx +0 -0
  319. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sosql.c +0 -0
  320. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sosql.pxd +0 -0
  321. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sosql.pyx +0 -0
  322. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sql.c +0 -0
  323. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sql.pxd +0 -0
  324. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sql.pyx +0 -0
  325. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sqlserver.c +0 -0
  326. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sqlserver.pxd +0 -0
  327. {querysource-4.5.7 → querysource-4.5.9}/querysource/parsers/sqlserver.pyx +0 -0
  328. {querysource-4.5.7 → querysource-4.5.9}/querysource/plugins/__init__.py +0 -0
  329. {querysource-4.5.7 → querysource-4.5.9}/querysource/plugins/importer.py +0 -0
  330. {querysource-4.5.7 → querysource-4.5.9}/querysource/plugins/sources/__init__.py +0 -0
  331. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/__init__.py +0 -0
  332. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/arangodb.py +0 -0
  333. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/bigquery.py +0 -0
  334. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/db.py +0 -0
  335. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/deltatbl.py +0 -0
  336. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/dummy.py +0 -0
  337. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/elastic.py +0 -0
  338. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/external.py +0 -0
  339. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/http.py +0 -0
  340. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/iceberg.py +0 -0
  341. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/influx.py +0 -0
  342. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/pg.py +0 -0
  343. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/py.typed +0 -0
  344. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/rest.py +0 -0
  345. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/rethink.py +0 -0
  346. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/salesforce.py +0 -0
  347. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/scylladb.py +0 -0
  348. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/__init__.py +0 -0
  349. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/abstract.py +0 -0
  350. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/amazon.py +0 -0
  351. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/countries.py +0 -0
  352. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/ga.py +0 -0
  353. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/geofcc.py +0 -0
  354. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/gmaps.py +0 -0
  355. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/graphcountries.py +0 -0
  356. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/graphql.py +0 -0
  357. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/http.py +0 -0
  358. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/hubspot.py +0 -0
  359. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/openweather.py +0 -0
  360. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/parsers/__init__.py +0 -0
  361. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/parsers/amproduct.py +0 -0
  362. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/parsers/xpath.py +0 -0
  363. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/pokemon.py +0 -0
  364. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/populartimes.py +0 -0
  365. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/py.typed +0 -0
  366. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/rest.py +0 -0
  367. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/retailnext.py +0 -0
  368. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/rssapp.py +0 -0
  369. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/salesforce.py +0 -0
  370. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/scrapper.py +0 -0
  371. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/shoppertrack.py +0 -0
  372. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/swop.py +0 -0
  373. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/uap.py +0 -0
  374. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/upc.py +0 -0
  375. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/wm_stores.py +0 -0
  376. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/zammad.py +0 -0
  377. {querysource-4.5.7 → querysource-4.5.9}/querysource/providers/sources/zipcodeapi.py +0 -0
  378. {querysource-4.5.7 → querysource-4.5.9}/querysource/py.typed +0 -0
  379. {querysource-4.5.7 → querysource-4.5.9}/querysource/qs_parsers/__init__.py +0 -0
  380. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/__init__.py +0 -0
  381. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/base.py +0 -0
  382. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/executor.py +0 -0
  383. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/models.py +0 -0
  384. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/__init__.py +0 -0
  385. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/_introspect.py +0 -0
  386. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/abstract.py +0 -0
  387. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/components/__init__.py +0 -0
  388. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/components/abstract.py +0 -0
  389. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/destinations/__init__.py +0 -0
  390. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/destinations/dwh.py +0 -0
  391. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/destinations/s3.py +0 -0
  392. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/destinations/sharepoint.py +0 -0
  393. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/destinations/table.py +0 -0
  394. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/Concat.py +0 -0
  395. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/GroupBy.catalog.yaml +0 -0
  396. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/GroupBy.py +0 -0
  397. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/Info.py +0 -0
  398. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/Join.catalog.yaml +0 -0
  399. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/Join.py +0 -0
  400. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/Melt.catalog.yaml +0 -0
  401. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/Melt.py +0 -0
  402. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/Merge.catalog.yaml +0 -0
  403. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/Merge.py +0 -0
  404. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/__init__.py +0 -0
  405. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/abstract.py +0 -0
  406. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/filter/Filter.catalog.yaml +0 -0
  407. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/filter/__init__.py +0 -0
  408. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/operators/filter/flt.py +0 -0
  409. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/registry.py +0 -0
  410. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/__init__.py +0 -0
  411. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/airtable.py +0 -0
  412. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/base.py +0 -0
  413. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/executors.py +0 -0
  414. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/file.py +0 -0
  415. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/query.catalog.yaml +0 -0
  416. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/query.py +0 -0
  417. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/s3.py +0 -0
  418. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/sharepoint.py +0 -0
  419. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/smartsheet.py +0 -0
  420. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/sources/table.py +0 -0
  421. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/DropCols.catalog.yaml +0 -0
  422. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/DropCols.py +0 -0
  423. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/FilterCols.catalog.yaml +0 -0
  424. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/FilterCols.py +0 -0
  425. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/Forecast.catalog.yaml +0 -0
  426. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/Forecast.py +0 -0
  427. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/Map.catalog.yaml +0 -0
  428. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/Map.py +0 -0
  429. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/NormalizeColumns.catalog.yaml +0 -0
  430. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/NormalizeColumns.py +0 -0
  431. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/PluckCols.catalog.yaml +0 -0
  432. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/PluckCols.py +0 -0
  433. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/__init__.py +0 -0
  434. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/abstract.py +0 -0
  435. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/correlation.catalog.yaml +0 -0
  436. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/correlation.py +0 -0
  437. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/crosstab.catalog.yaml +0 -0
  438. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/crosstab.py +0 -0
  439. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/google/GoogleMaps.catalog.yaml +0 -0
  440. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/google/__init__.py +0 -0
  441. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/google/maps.py +0 -0
  442. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/pivot.catalog.yaml +0 -0
  443. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/pivot.py +0 -0
  444. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/tExplode.catalog.yaml +0 -0
  445. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/tExplode.py +0 -0
  446. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/tOrder.catalog.yaml +0 -0
  447. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/tOrder.py +0 -0
  448. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/multi/transformations/tPandas.py +0 -0
  449. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/obj.py +0 -0
  450. {querysource-4.5.7 → querysource-4.5.9}/querysource/queries/qs.py +0 -0
  451. {querysource-4.5.7 → querysource-4.5.9}/querysource/scheduler/__init__.py +0 -0
  452. {querysource-4.5.7 → querysource-4.5.9}/querysource/scheduler/jobs.py +0 -0
  453. {querysource-4.5.7 → querysource-4.5.9}/querysource/scheduler/notifications.py +0 -0
  454. {querysource-4.5.7 → querysource-4.5.9}/querysource/scheduler/scheduler.py +0 -0
  455. {querysource-4.5.7 → querysource-4.5.9}/querysource/services.py +0 -0
  456. {querysource-4.5.7 → querysource-4.5.9}/querysource/template/__init__.py +0 -0
  457. {querysource-4.5.7 → querysource-4.5.9}/querysource/template/parser.py +0 -0
  458. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/__init__.py +0 -0
  459. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/converters.cpp +0 -0
  460. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/converters.pyx +0 -0
  461. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/dt/__init__.py +0 -0
  462. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/dt/filters.py +0 -0
  463. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/dt/transforms.py +0 -0
  464. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/py.typed +0 -0
  465. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/typedefs.c +0 -0
  466. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/typedefs.pyx +0 -0
  467. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/validators.cpp +0 -0
  468. {querysource-4.5.7 → querysource-4.5.9}/querysource/types/validators.pyx +0 -0
  469. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/__init__.py +0 -0
  470. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/cache_serialization.py +0 -0
  471. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/errors.py +0 -0
  472. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/events.py +0 -0
  473. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/fn.py +0 -0
  474. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/functions.cpp +0 -0
  475. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/functions.pyx +0 -0
  476. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/getfunc.py +0 -0
  477. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/handlers.py +0 -0
  478. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/parseqs.cpp +0 -0
  479. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/parseqs.pyx +0 -0
  480. {querysource-4.5.7 → querysource-4.5.9}/querysource/utils/validators.py +0 -0
  481. {querysource-4.5.7 → querysource-4.5.9}/querysource.egg-info/dependency_links.txt +0 -0
  482. {querysource-4.5.7 → querysource-4.5.9}/querysource.egg-info/entry_points.txt +0 -0
  483. {querysource-4.5.7 → querysource-4.5.9}/querysource.egg-info/not-zip-safe +0 -0
  484. {querysource-4.5.7 → querysource-4.5.9}/querysource.egg-info/requires.txt +0 -0
  485. {querysource-4.5.7 → querysource-4.5.9}/querysource.egg-info/top_level.txt +0 -0
  486. {querysource-4.5.7 → querysource-4.5.9}/run.py +0 -0
  487. {querysource-4.5.7 → querysource-4.5.9}/rust/Cargo.lock +0 -0
  488. {querysource-4.5.7 → querysource-4.5.9}/rust/pyproject.toml +0 -0
  489. {querysource-4.5.7 → querysource-4.5.9}/rust/src/arangodb_parser.rs +0 -0
  490. {querysource-4.5.7 → querysource-4.5.9}/rust/src/bigquery_parser.rs +0 -0
  491. {querysource-4.5.7 → querysource-4.5.9}/rust/src/cql_parser.rs +0 -0
  492. {querysource-4.5.7 → querysource-4.5.9}/rust/src/elastic_parser.rs +0 -0
  493. {querysource-4.5.7 → querysource-4.5.9}/rust/src/filter_common.rs +0 -0
  494. {querysource-4.5.7 → querysource-4.5.9}/rust/src/flux_parser.rs +0 -0
  495. {querysource-4.5.7 → querysource-4.5.9}/rust/src/lib.rs +0 -0
  496. {querysource-4.5.7 → querysource-4.5.9}/rust/src/mongo_parser.rs +0 -0
  497. {querysource-4.5.7 → querysource-4.5.9}/rust/src/mssql_parser.rs +0 -0
  498. {querysource-4.5.7 → querysource-4.5.9}/rust/src/parseqs.rs +0 -0
  499. {querysource-4.5.7 → querysource-4.5.9}/rust/src/pgsql_parser.rs +0 -0
  500. {querysource-4.5.7 → querysource-4.5.9}/rust/src/rethink_parser.rs +0 -0
  501. {querysource-4.5.7 → querysource-4.5.9}/rust/src/soql_parser.rs +0 -0
  502. {querysource-4.5.7 → querysource-4.5.9}/rust/src/sql_parser.rs +0 -0
  503. {querysource-4.5.7 → querysource-4.5.9}/setup.cfg +0 -0
  504. {querysource-4.5.7 → querysource-4.5.9}/setup.py +0 -0
  505. {querysource-4.5.7 → querysource-4.5.9}/static/notebook/bundle.js +0 -0
  506. {querysource-4.5.7 → querysource-4.5.9}/templates/__init__.py +0 -0
  507. {querysource-4.5.7 → querysource-4.5.9}/templates/base.html +0 -0
  508. {querysource-4.5.7 → querysource-4.5.9}/templates/default.html +0 -0
  509. {querysource-4.5.7 → querysource-4.5.9}/templates/default_table.html +0 -0
  510. {querysource-4.5.7 → querysource-4.5.9}/templates/fontlist-v330.json +0 -0
  511. {querysource-4.5.7 → querysource-4.5.9}/templates/fontlist-v390.json +0 -0
  512. {querysource-4.5.7 → querysource-4.5.9}/templates/table_charts.html +0 -0
  513. {querysource-4.5.7 → querysource-4.5.9}/tests/auth/__init__.py +0 -0
  514. {querysource-4.5.7 → querysource-4.5.9}/tests/auth/test_credentials.py +0 -0
  515. {querysource-4.5.7 → querysource-4.5.9}/tests/auth/test_pbac_bootstrap.py +0 -0
  516. {querysource-4.5.7 → querysource-4.5.9}/tests/check_concurrent_get_slug.py +0 -0
  517. {querysource-4.5.7 → querysource-4.5.9}/tests/conftest.py +0 -0
  518. {querysource-4.5.7 → querysource-4.5.9}/tests/datasources/__init__.py +0 -0
  519. {querysource-4.5.7 → querysource-4.5.9}/tests/datasources/test_datasource_view_pbac.py +0 -0
  520. {querysource-4.5.7 → querysource-4.5.9}/tests/datasources/test_driver_factory_session.py +0 -0
  521. {querysource-4.5.7 → querysource-4.5.9}/tests/datasources/test_pg_admin_registration.py +0 -0
  522. {querysource-4.5.7 → querysource-4.5.9}/tests/datasources/test_pg_params_for.py +0 -0
  523. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/__init__.py +0 -0
  524. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/conftest.py +0 -0
  525. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/test_abstract_pbac_helpers.py +0 -0
  526. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/test_airtable_oauth.py +0 -0
  527. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/test_multiquery_pbac_smoke.py +0 -0
  528. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/test_query_param_exclusion.py +0 -0
  529. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/test_queryexecutor_pbac_smoke.py +0 -0
  530. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/test_querymanager_pagination.py +0 -0
  531. {querysource-4.5.7 → querysource-4.5.9}/tests/handlers/test_queryservice_pbac_smoke.py +0 -0
  532. {querysource-4.5.7 → querysource-4.5.9}/tests/integration/__init__.py +0 -0
  533. {querysource-4.5.7 → querysource-4.5.9}/tests/integration/test_datasource_endpoint.py +0 -0
  534. {querysource-4.5.7 → querysource-4.5.9}/tests/integration/test_pbac_credentials.py +0 -0
  535. {querysource-4.5.7 → querysource-4.5.9}/tests/integration/test_pbac_enforcement.py +0 -0
  536. {querysource-4.5.7 → querysource-4.5.9}/tests/integration/test_pbac_listing.py +0 -0
  537. {querysource-4.5.7 → querysource-4.5.9}/tests/integration/test_slug_injection.py +0 -0
  538. {querysource-4.5.7 → querysource-4.5.9}/tests/integration/test_slug_regression.py +0 -0
  539. {querysource-4.5.7 → querysource-4.5.9}/tests/interfaces/__init__.py +0 -0
  540. {querysource-4.5.7 → querysource-4.5.9}/tests/interfaces/test_airtable_interface.py +0 -0
  541. {querysource-4.5.7 → querysource-4.5.9}/tests/multi/__init__.py +0 -0
  542. {querysource-4.5.7 → querysource-4.5.9}/tests/multi/sources/__init__.py +0 -0
  543. {querysource-4.5.7 → querysource-4.5.9}/tests/multi/sources/test_airtable_source.py +0 -0
  544. {querysource-4.5.7 → querysource-4.5.9}/tests/multi/sources/test_registry.py +0 -0
  545. {querysource-4.5.7 → querysource-4.5.9}/tests/perf/__init__.py +0 -0
  546. {querysource-4.5.7 → querysource-4.5.9}/tests/perf/test_pbac_overhead.py +0 -0
  547. {querysource-4.5.7 → querysource-4.5.9}/tests/policies/__init__.py +0 -0
  548. {querysource-4.5.7 → querysource-4.5.9}/tests/policies/test_authorized_policy.py +0 -0
  549. {querysource-4.5.7 → querysource-4.5.9}/tests/policies/test_default_policies_load.py +0 -0
  550. {querysource-4.5.7 → querysource-4.5.9}/tests/scheduler/__init__.py +0 -0
  551. {querysource-4.5.7 → querysource-4.5.9}/tests/scheduler/test_parse_trigger_shorthands.py +0 -0
  552. {querysource-4.5.7 → querysource-4.5.9}/tests/scheduler/test_shorthand_loaders.py +0 -0
  553. {querysource-4.5.7 → querysource-4.5.9}/tests/services/__init__.py +0 -0
  554. {querysource-4.5.7 → querysource-4.5.9}/tests/services/test_querysource_setup_pbac.py +0 -0
  555. {querysource-4.5.7 → querysource-4.5.9}/tests/test_abstract_multi.py +0 -0
  556. {querysource-4.5.7 → querysource-4.5.9}/tests/test_abstract_refactor.py +0 -0
  557. {querysource-4.5.7 → querysource-4.5.9}/tests/test_api.py +0 -0
  558. {querysource-4.5.7 → querysource-4.5.9}/tests/test_arangodb_parser.py +0 -0
  559. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_colcols.py +0 -0
  560. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_correlation.py +0 -0
  561. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_filter.py +0 -0
  562. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_forecast.py +0 -0
  563. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_googlemaps.py +0 -0
  564. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_groupby.py +0 -0
  565. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_map.py +0 -0
  566. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_pivot.py +0 -0
  567. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_remote.py +0 -0
  568. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_texplode.py +0 -0
  569. {querysource-4.5.7 → querysource-4.5.9}/tests/test_catalog_torder.py +0 -0
  570. {querysource-4.5.7 → querysource-4.5.9}/tests/test_cli_generate_docs.py +0 -0
  571. {querysource-4.5.7 → querysource-4.5.9}/tests/test_column_filters.py +0 -0
  572. {querysource-4.5.7 → querysource-4.5.9}/tests/test_component_handler.py +0 -0
  573. {querysource-4.5.7 → querysource-4.5.9}/tests/test_component_registry.py +0 -0
  574. {querysource-4.5.7 → querysource-4.5.9}/tests/test_conf_airtable.py +0 -0
  575. {querysource-4.5.7 → querysource-4.5.9}/tests/test_destination_base.py +0 -0
  576. {querysource-4.5.7 → querysource-4.5.9}/tests/test_destination_dwh.py +0 -0
  577. {querysource-4.5.7 → querysource-4.5.9}/tests/test_destination_integration.py +0 -0
  578. {querysource-4.5.7 → querysource-4.5.9}/tests/test_destination_s3.py +0 -0
  579. {querysource-4.5.7 → querysource-4.5.9}/tests/test_destination_sharepoint.py +0 -0
  580. {querysource-4.5.7 → querysource-4.5.9}/tests/test_destination_table.py +0 -0
  581. {querysource-4.5.7 → querysource-4.5.9}/tests/test_destinations_documentation_endpoint.py +0 -0
  582. {querysource-4.5.7 → querysource-4.5.9}/tests/test_elastic_parser.py +0 -0
  583. {querysource-4.5.7 → querysource-4.5.9}/tests/test_error_formatter.py +0 -0
  584. {querysource-4.5.7 → querysource-4.5.9}/tests/test_eval.py +0 -0
  585. {querysource-4.5.7 → querysource-4.5.9}/tests/test_feat102_error_redaction.py +0 -0
  586. {querysource-4.5.7 → querysource-4.5.9}/tests/test_grouping_sync.py +0 -0
  587. {querysource-4.5.7 → querysource-4.5.9}/tests/test_info_eda.py +0 -0
  588. {querysource-4.5.7 → querysource-4.5.9}/tests/test_info_eda_e2e.py +0 -0
  589. {querysource-4.5.7 → querysource-4.5.9}/tests/test_info_eda_integration.py +0 -0
  590. {querysource-4.5.7 → querysource-4.5.9}/tests/test_join_conditions.py +0 -0
  591. {querysource-4.5.7 → querysource-4.5.9}/tests/test_join_with_column_filter.py +0 -0
  592. {querysource-4.5.7 → querysource-4.5.9}/tests/test_local_executor.py +0 -0
  593. {querysource-4.5.7 → querysource-4.5.9}/tests/test_multi_destinations_subpackage.py +0 -0
  594. {querysource-4.5.7 → querysource-4.5.9}/tests/test_multiqs_column_transforms.py +0 -0
  595. {querysource-4.5.7 → querysource-4.5.9}/tests/test_multiqs_destination_dispatch.py +0 -0
  596. {querysource-4.5.7 → querysource-4.5.9}/tests/test_multiqs_remote_dispatch.py +0 -0
  597. {querysource-4.5.7 → querysource-4.5.9}/tests/test_multiqs_sources_integration.py +0 -0
  598. {querysource-4.5.7 → querysource-4.5.9}/tests/test_queryslug_concurrency.py +0 -0
  599. {querysource-4.5.7 → querysource-4.5.9}/tests/test_querysource_setup_airtable.py +0 -0
  600. {querysource-4.5.7 → querysource-4.5.9}/tests/test_qworker_config.py +0 -0
  601. {querysource-4.5.7 → querysource-4.5.9}/tests/test_remote_executor.py +0 -0
  602. {querysource-4.5.7 → querysource-4.5.9}/tests/test_route_registration.py +0 -0
  603. {querysource-4.5.7 → querysource-4.5.9}/tests/test_rss.py +0 -0
  604. {querysource-4.5.7 → querysource-4.5.9}/tests/test_rust_parsers.py +0 -0
  605. {querysource-4.5.7 → querysource-4.5.9}/tests/test_scheduler_core.py +0 -0
  606. {querysource-4.5.7 → querysource-4.5.9}/tests/test_scheduler_handler_integration.py +0 -0
  607. {querysource-4.5.7 → querysource-4.5.9}/tests/test_scheduler_handler_unit.py +0 -0
  608. {querysource-4.5.7 → querysource-4.5.9}/tests/test_scheduler_integration.py +0 -0
  609. {querysource-4.5.7 → querysource-4.5.9}/tests/test_scheduler_jobs.py +0 -0
  610. {querysource-4.5.7 → querysource-4.5.9}/tests/test_scheduler_multi_routing.py +0 -0
  611. {querysource-4.5.7 → querysource-4.5.9}/tests/test_scheduler_notifications.py +0 -0
  612. {querysource-4.5.7 → querysource-4.5.9}/tests/test_schema_introspectable.py +0 -0
  613. {querysource-4.5.7 → querysource-4.5.9}/tests/test_source_registry.py +0 -0
  614. {querysource-4.5.7 → querysource-4.5.9}/tests/test_source_s3.py +0 -0
  615. {querysource-4.5.7 → querysource-4.5.9}/tests/test_source_sharepoint.py +0 -0
  616. {querysource-4.5.7 → querysource-4.5.9}/tests/test_source_smartsheet.py +0 -0
  617. {querysource-4.5.7 → querysource-4.5.9}/tests/test_source_table.py +0 -0
  618. {querysource-4.5.7 → querysource-4.5.9}/tests/test_sql_parser_combinations.py +0 -0
  619. {querysource-4.5.7 → querysource-4.5.9}/tests/test_texplode.py +0 -0
  620. {querysource-4.5.7 → querysource-4.5.9}/tests/test_thread_file_refactor.py +0 -0
  621. {querysource-4.5.7 → querysource-4.5.9}/tests/test_thread_query_refactor.py +0 -0
  622. {querysource-4.5.7 → querysource-4.5.9}/tests/test_thread_source_base.py +0 -0
  623. {querysource-4.5.7 → querysource-4.5.9}/tests/test_threadquery_executor.py +0 -0
  624. {querysource-4.5.7 → querysource-4.5.9}/tests/test_zammad_search.py +0 -0
  625. {querysource-4.5.7 → querysource-4.5.9}/tests/unit/test_cython_filter_fallback.py +0 -0
  626. {querysource-4.5.7 → querysource-4.5.9}/tests/unit/test_datasource_redaction.py +0 -0
  627. {querysource-4.5.7 → querysource-4.5.9}/tests/unit/test_provider_raw_query_validated.py +0 -0
  628. {querysource-4.5.7 → querysource-4.5.9}/tests/unit/test_qs_parsers_validated.py +0 -0
  629. {querysource-4.5.7 → querysource-4.5.9}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: querysource
3
- Version: 4.5.7
3
+ Version: 4.5.9
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
@@ -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.8.dev0+g201ef3bdd.d20260702'
22
- __version_tuple__ = version_tuple = (4, 5, 8, 'dev0', 'g201ef3bdd.d20260702')
21
+ __version__ = version = '4.5.10.dev0+g1b0c3b8d3.d20260710'
22
+ __version_tuple__ = version_tuple = (4, 5, 10, 'dev0', 'g1b0c3b8d3.d20260710')
23
23
 
24
- __commit_id__ = commit_id = 'g201ef3bdd'
24
+ __commit_id__ = commit_id = 'g1b0c3b8d3'
@@ -25,10 +25,8 @@ from .conf import (
25
25
  asyncpg_url,
26
26
  default_dsn,
27
27
  QUERYSET_REDIS,
28
- MEMCACHE_SERVICE
29
28
  )
30
29
  from .types import Singleton
31
- import jsonpickle
32
30
  from .exceptions import (
33
31
  ConfigError
34
32
  )
@@ -65,10 +63,9 @@ class QueryConnection(Connection, metaclass=Singleton):
65
63
  self._connected: bool = False
66
64
  self.lazy: bool = kwargs.get('lazy', False)
67
65
  self._redis: Callable = None
68
- self._memcached: Callable = None
69
- # Cache (redis/memcached) AsyncDB instances are constructed eagerly
70
- # but without an explicit loop — they bind to the running loop on
71
- # first connect, which is aiohttp's loop.
66
+ # Cache (redis) AsyncDB instances are constructed eagerly but without
67
+ # an explicit loop — they bind to the running loop on first connect,
68
+ # which is aiohttp's loop.
72
69
  self.start_cache(QUERYSET_REDIS)
73
70
  self._json = JSONContent()
74
71
  async def __aenter__(self) -> "QueryConnection":
@@ -83,16 +80,10 @@ class QueryConnection(Connection, metaclass=Singleton):
83
80
 
84
81
 
85
82
  def start_cache(self, dsn):
86
- ### redis connection:
87
83
  self._redis = AsyncDB(
88
84
  'redis',
89
85
  dsn=dsn,
90
86
  )
91
- # memcached connection:
92
- self._memcached = AsyncDB(
93
- 'memcache',
94
- params=MEMCACHE_SERVICE,
95
- )
96
87
 
97
88
  def pool(self):
98
89
  return self._postgres
@@ -271,15 +262,6 @@ class QueryConnection(Connection, metaclass=Singleton):
271
262
  )
272
263
  )
273
264
  continue
274
- # SAVING DATASOURCES IN MEMORY (memcached)
275
- try:
276
- async with await self._memcached.connection() as conn:
277
- ds = jsonpickle.encode(DATASOURCES[name])
278
- await conn.set(name, ds)
279
- except (ProviderError, DriverError, TypeError, ValueError) as ex:
280
- self.logger.warning(
281
- str(ex)
282
- )
283
265
  self._connected = True
284
266
 
285
267
  async def query_table_exists(self, connection: Callable, program: str) -> bool:
@@ -19,9 +19,9 @@ class memcacheDriver(NoSQLDriver):
19
19
 
20
20
 
21
21
  try:
22
- redis_default = memcacheDriver(
22
+ memcache_default = memcacheDriver(
23
23
  host=MEMCACHE_HOST,
24
24
  port=MEMCACHE_PORT
25
25
  )
26
26
  except ValueError:
27
- redis_default = None
27
+ memcache_default = None
@@ -120,6 +120,12 @@ class QueryExecutor(AbstractHandler):
120
120
  response='QS: Missing driver or datasource for introspection.',
121
121
  status=410 # bad request
122
122
  )
123
+ # `table` is an introspection-only field (lazy column loading). Pull it
124
+ # out BEFORE building the Query model: the model is strict and rejects
125
+ # unknown kwargs, so leaving `table` in the payload makes get_executor
126
+ # fail on the columns request while the tables request (no `table`)
127
+ # succeeds.
128
+ table = payload.pop('table', None) if isinstance(payload, dict) else None
123
129
  try:
124
130
  query = self.get_executor(payload, request)
125
131
  except QueryError as ex:
@@ -129,7 +135,6 @@ class QueryExecutor(AbstractHandler):
129
135
  return self.critical(reason={"message": str(ex)}, status=500)
130
136
  # PBAC: enforce the same datasource/driver checks as a query run.
131
137
  await self._enforce_payload(request, payload, query)
132
- table = payload.get('table') if isinstance(payload, dict) else None
133
138
  try:
134
139
  result = await query.introspect(table=table)
135
140
  return self.json_response(
@@ -130,6 +130,21 @@ class BaseProvider(ABC):
130
130
  """
131
131
  return self._definition
132
132
 
133
+ def _get_cond_definition(self) -> dict:
134
+ """Return the per-placeholder type hints (`cond_definition`) declared on
135
+ the Query definition, used by the Rust validating substitution
136
+ (`safe_format_map_validated`) to type-check raw-query conditions.
137
+
138
+ Supports both `QueryModel` objects (attribute access) and plain dicts,
139
+ and normalizes a missing/None definition to an empty dict.
140
+ """
141
+ definition = self._definition
142
+ if isinstance(definition, dict):
143
+ cond_definition = definition.get('cond_definition')
144
+ else:
145
+ cond_definition = getattr(definition, 'cond_definition', None)
146
+ return cond_definition or {}
147
+
133
148
  def NotFound(self, message: str):
134
149
  """Raised when Data not Found.
135
150
  """
@@ -73,13 +73,19 @@ class cassandraProvider(BaseProvider):
73
73
  sql = _rs.safe_format_map(query, self.replacement)
74
74
  if self._conditions:
75
75
  try:
76
- sql = _rs.safe_format_map_validated(sql, self._conditions, {})
76
+ sql = _rs.safe_format_map_validated(sql, self._conditions, self._get_cond_definition())
77
77
  except ValueError as err:
78
78
  self._logger.warning(
79
79
  "get_raw_query: validating substitution rejected conditions: %s", err
80
80
  )
81
81
  raise ParserError("Invalid query conditions") from err
82
82
  return sql
83
+ # DIVERGENCE (FEAT-103): pure-Python fallback (HAS_RUST=False) has no
84
+ # injection validation and ignores cond_definition entirely — type
85
+ # hints (e.g. "array") only take effect via the Rust path. Accepted
86
+ # because the Rust extension is required in all supported
87
+ # deployments; replicating context-aware validation in pure Python
88
+ # would duplicate the security-critical logic in two places.
83
89
  conditions = {**self.replacement, **(self._conditions or {})}
84
90
  return query.format_map(
85
91
  defaultdict(str, SafeDict(**conditions))
@@ -72,13 +72,19 @@ class defaultProvider(BaseProvider):
72
72
  sql = _rs.safe_format_map(query, self.replacement)
73
73
  if self._conditions:
74
74
  try:
75
- sql = _rs.safe_format_map_validated(sql, self._conditions, {})
75
+ sql = _rs.safe_format_map_validated(sql, self._conditions, self._get_cond_definition())
76
76
  except ValueError as err:
77
77
  self._logger.warning(
78
78
  "raw_query: validating substitution rejected conditions: %s", err
79
79
  )
80
80
  raise ParserError("Invalid query conditions") from err
81
81
  return sql
82
+ # DIVERGENCE (FEAT-103): pure-Python fallback (HAS_RUST=False) has no
83
+ # injection validation and ignores cond_definition entirely — type
84
+ # hints (e.g. "array") only take effect via the Rust path. Accepted
85
+ # because the Rust extension is required in all supported
86
+ # deployments; replicating context-aware validation in pure Python
87
+ # would duplicate the security-critical logic in two places.
82
88
  conditions = {**self.replacement, **(self._conditions or {})}
83
89
  return query.format_map(
84
90
  defaultdict(str, SafeDict(**conditions))
@@ -97,7 +97,7 @@ class documentdbProvider(BaseProvider):
97
97
  if HAS_RUST:
98
98
  try:
99
99
  sql = _rs.safe_format_map(query, self.replacement)
100
- substituted = _rs.safe_format_map_validated(sql, self._conditions, {})
100
+ substituted = _rs.safe_format_map_validated(sql, self._conditions, self._get_cond_definition())
101
101
  try:
102
102
  return json_decoder(substituted)
103
103
  except Exception:
@@ -108,6 +108,13 @@ class documentdbProvider(BaseProvider):
108
108
  )
109
109
  raise ParserError("Invalid query conditions") from err
110
110
  # Fallback when Rust is unavailable
111
+ # DIVERGENCE (FEAT-103): pure-Python fallback has no injection
112
+ # validation and ignores cond_definition entirely — type hints
113
+ # (e.g. "array") only take effect via the Rust path. Accepted
114
+ # because the Rust extension is required in all supported
115
+ # deployments; replicating context-aware validation in pure
116
+ # Python would duplicate the security-critical logic in two
117
+ # places.
111
118
  try:
112
119
  return query.format_map(
113
120
  defaultdict(str, SafeDict(**self._conditions))
@@ -107,13 +107,19 @@ class mysqlProvider(BaseProvider):
107
107
  sql = _rs.safe_format_map(query, self.replacement)
108
108
  if self._conditions:
109
109
  try:
110
- sql = _rs.safe_format_map_validated(sql, self._conditions, {})
110
+ sql = _rs.safe_format_map_validated(sql, self._conditions, self._get_cond_definition())
111
111
  except ValueError as err:
112
112
  self._logger.warning(
113
113
  "raw_query: validating substitution rejected conditions: %s", err
114
114
  )
115
115
  raise ParserError("Invalid query conditions") from err
116
116
  return sql
117
+ # DIVERGENCE (FEAT-103): pure-Python fallback (HAS_RUST=False) has no
118
+ # injection validation and ignores cond_definition entirely — type
119
+ # hints (e.g. "array") only take effect via the Rust path. Accepted
120
+ # because the Rust extension is required in all supported
121
+ # deployments; replicating context-aware validation in pure Python
122
+ # would duplicate the security-critical logic in two places.
117
123
  conditions = {**self.replacement, **(self._conditions or {})}
118
124
  return query.format_map(
119
125
  defaultdict(str, SafeDict(**conditions))
@@ -172,7 +172,7 @@ class sqlProvider(BaseProvider):
172
172
  # Phase 2: untrusted user-supplied conditions (if any)
173
173
  if self._conditions:
174
174
  try:
175
- sql = _rs.safe_format_map_validated(sql, self._conditions, {})
175
+ sql = _rs.safe_format_map_validated(sql, self._conditions, self._get_cond_definition())
176
176
  except ValueError as err:
177
177
  self._logger.warning(
178
178
  "raw_query: validating substitution rejected conditions: %s", err
@@ -180,6 +180,12 @@ class sqlProvider(BaseProvider):
180
180
  raise ParserError("Invalid query conditions") from err
181
181
  return sql
182
182
  # Fallback when Rust is unavailable (should not happen in production)
183
+ # DIVERGENCE (FEAT-103): pure-Python fallback has no injection
184
+ # validation and ignores cond_definition entirely — type hints
185
+ # (e.g. "array") only take effect via the Rust path. Accepted
186
+ # because the Rust extension is required in all supported
187
+ # deployments; replicating context-aware validation in pure Python
188
+ # would duplicate the security-critical logic in two places.
183
189
  conditions = {**self.replacement, **(self._conditions or {})}
184
190
  return query.format_map(
185
191
  defaultdict(str, SafeDict(**conditions))
@@ -191,13 +197,19 @@ class sqlProvider(BaseProvider):
191
197
  sql = _rs.safe_format_map(query, self.replacement)
192
198
  if self._conditions:
193
199
  try:
194
- sql = _rs.safe_format_map_validated(sql, self._conditions, {})
200
+ sql = _rs.safe_format_map_validated(sql, self._conditions, self._get_cond_definition())
195
201
  except ValueError as err:
196
202
  self._logger.warning(
197
203
  "get_raw_query: validating substitution rejected conditions: %s", err
198
204
  )
199
205
  raise ParserError("Invalid query conditions") from err
200
206
  return sql
207
+ # DIVERGENCE (FEAT-103): pure-Python fallback has no injection
208
+ # validation and ignores cond_definition entirely — type hints
209
+ # (e.g. "array") only take effect via the Rust path. Accepted
210
+ # because the Rust extension is required in all supported
211
+ # deployments; replicating context-aware validation in pure Python
212
+ # would duplicate the security-critical logic in two places.
201
213
  conditions = {**self.replacement, **(self._conditions or {})}
202
214
  return query.format_map(
203
215
  defaultdict(str, SafeDict(**conditions))
@@ -86,13 +86,19 @@ class sqlserverProvider(BaseProvider):
86
86
  sql = _rs.safe_format_map(query, self.replacement)
87
87
  if self._conditions:
88
88
  try:
89
- sql = _rs.safe_format_map_validated(sql, self._conditions, {})
89
+ sql = _rs.safe_format_map_validated(sql, self._conditions, self._get_cond_definition())
90
90
  except ValueError as err:
91
91
  self._logger.warning(
92
92
  "get_raw_query: validating substitution rejected conditions: %s", err
93
93
  )
94
94
  raise ParserError("Invalid query conditions") from err
95
95
  return sql
96
+ # DIVERGENCE (FEAT-103): pure-Python fallback (HAS_RUST=False) has no
97
+ # injection validation and ignores cond_definition entirely — type
98
+ # hints (e.g. "array") only take effect via the Rust path. Accepted
99
+ # because the Rust extension is required in all supported
100
+ # deployments; replicating context-aware validation in pure Python
101
+ # would duplicate the security-critical logic in two places.
96
102
  conditions = {**self.replacement, **(self._conditions or {})}
97
103
  return query.format_map(
98
104
  defaultdict(str, SafeDict(**conditions))
@@ -6,7 +6,7 @@ __description__ = (
6
6
  'QuerySource Query parser and generator.'
7
7
  'Supports SQL, NoSQL, MongoDB, Cassandra, Elasticsearch, etc.'
8
8
  )
9
- __version__ = '4.5.7'
9
+ __version__ = '4.5.9'
10
10
  __url__ = 'https://github.com/phenobarbital/querysource'
11
11
  __copyright__ = 'Copyright (c) 2018-2025 Jesus Lara'
12
12
  __author__ = 'Jesus Lara'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: querysource
3
- Version: 4.5.7
3
+ Version: 4.5.9
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
@@ -621,4 +621,5 @@ tests/services/test_querysource_setup_pbac.py
621
621
  tests/unit/test_cython_filter_fallback.py
622
622
  tests/unit/test_datasource_redaction.py
623
623
  tests/unit/test_provider_raw_query_validated.py
624
- tests/unit/test_qs_parsers_validated.py
624
+ tests/unit/test_qs_parsers_validated.py
625
+ tests/unit/test_raw_query_cond_definition_wiring.py
@@ -595,6 +595,7 @@
595
595
  "tests/unit/test_datasource_redaction.py",
596
596
  "tests/unit/test_qs_parsers_validated.py",
597
597
  "tests/unit/test_provider_raw_query_validated.py",
598
+ "tests/unit/test_raw_query_cond_definition_wiring.py",
598
599
  "tests/interfaces/__init__.py",
599
600
  "tests/interfaces/test_airtable_interface.py",
600
601
  "sdd/WORKFLOW-parrot.md",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "4.5.9",
3
+ "distance": 0,
4
+ "node": "g1b0c3b8d379c66c9df8b5f464709ddedcadadbe5",
5
+ "dirty": true,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-07-10"
8
+ }
@@ -0,0 +1,34 @@
1
+ [package]
2
+ name = "qs_parsers"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ description = "Rust-based string processing for QuerySource parsers"
6
+
7
+ [lib]
8
+ name = "_qs_parsers"
9
+ crate-type = ["cdylib"]
10
+
11
+ [dependencies]
12
+ pyo3 = { version = "0.24" }
13
+ rayon = "1.10"
14
+ regex = "1.11"
15
+ once_cell = "1.20"
16
+
17
+ [dev-dependencies]
18
+ proptest = "1.4"
19
+
20
+ # `extension-module` tells PyO3 the symbols it needs (Py_InitializeEx, etc.)
21
+ # will be provided at dlopen time by an embedding Python process, so it must
22
+ # NOT link libpython itself. That's correct for the cdylib maturin builds,
23
+ # but it breaks `cargo test`, which links a normal executable and therefore
24
+ # needs those symbols resolved directly against libpython.
25
+ # Gate it behind a feature (on by default, so `cargo build`/`maturin build`
26
+ # are unaffected) and run tests with `cargo test --no-default-features`.
27
+ [features]
28
+ default = ["extension-module"]
29
+ extension-module = ["pyo3/extension-module"]
30
+
31
+ [profile.release]
32
+ opt-level = 3
33
+ lto = true
34
+ codegen-units = 1
@@ -487,4 +487,73 @@ mod tests {
487
487
  // "xUNIONy" — UNION is NOT a standalone word → allow
488
488
  assert!(check_injection("xUNIONy").is_ok());
489
489
  }
490
+
491
+ // --- FEAT-103 cond_definition wiring tests ---
492
+
493
+ /// `array` hint in Bare context emits a pre-rendered list verbatim
494
+ /// (e.g. `IN ({ids})` with conditions={"ids": "'a','b','c'"}).
495
+ #[test]
496
+ fn cond_definition_array_hint_bare_context_passthrough() {
497
+ let r = safe_format_map_validated_rust(
498
+ "SELECT * FROM t WHERE id IN ({ids})",
499
+ &map(&[("ids", "'a','b','c'")]),
500
+ &map(&[("ids", "array")]),
501
+ )
502
+ .unwrap();
503
+ assert_eq!(r, "SELECT * FROM t WHERE id IN ('a','b','c')");
504
+ }
505
+
506
+ /// `array` hint does NOT bypass injection checks: check_injection runs
507
+ /// before the type-hint dispatch, so a `;`/comment/keyword payload is
508
+ /// still rejected even though the hint would otherwise pass the value
509
+ /// through unquoted.
510
+ #[test]
511
+ fn cond_definition_array_hint_rejects_injection_payload() {
512
+ let r = safe_format_map_validated_rust(
513
+ "SELECT * FROM t WHERE id IN ({ids})",
514
+ &map(&[("ids", "'a'); DROP TABLE t;--")]),
515
+ &map(&[("ids", "array")]),
516
+ );
517
+ assert!(r.is_err(), "Expected rejection of injection payload under array hint");
518
+
519
+ let r2 = safe_format_map_validated_rust(
520
+ "SELECT * FROM t WHERE id IN ({ids})",
521
+ &map(&[("ids", "1 UNION SELECT password FROM users")]),
522
+ &map(&[("ids", "array")]),
523
+ );
524
+ assert!(r2.is_err(), "Expected rejection of UNION payload under array hint");
525
+ }
526
+
527
+ /// cond_definition hints in upper case (as persisted by the Navigator
528
+ /// frontend) match the same as lower case.
529
+ #[test]
530
+ fn cond_definition_uppercase_hint_matches_lowercase() {
531
+ let upper = safe_format_map_validated_rust(
532
+ "WHERE id IN ({ids})",
533
+ &map(&[("ids", "'a','b'")]),
534
+ &map(&[("ids", "ARRAY")]),
535
+ )
536
+ .unwrap();
537
+ let lower = safe_format_map_validated_rust(
538
+ "WHERE id IN ({ids})",
539
+ &map(&[("ids", "'a','b'")]),
540
+ &map(&[("ids", "array")]),
541
+ )
542
+ .unwrap();
543
+ assert_eq!(upper, lower);
544
+ assert_eq!(upper, "WHERE id IN ('a','b')");
545
+ }
546
+
547
+ /// Regression: with an empty cond_definition (pre-fix behavior), a bare
548
+ /// placeholder still falls through to the generic quoting logic.
549
+ #[test]
550
+ fn cond_definition_empty_preserves_generic_quoting() {
551
+ let r = safe_format_map_validated_rust(
552
+ "WHERE tag = {tag}",
553
+ &map(&[("tag", "hello")]),
554
+ &map(&[]),
555
+ )
556
+ .unwrap();
557
+ assert_eq!(r, "WHERE tag = 'hello'");
558
+ }
490
559
  }
@@ -250,7 +250,8 @@ pub fn to_unquoted(value: &str) -> String {
250
250
  /// Mirrors `is_valid()` from validators.pyx.
251
251
  /// Returns the properly formatted value for SQL inclusion.
252
252
  ///
253
- /// Type dispatch:
253
+ /// Type dispatch (case-insensitive — callers such as the Navigator frontend
254
+ /// persist `cond_definition` hints in upper case, e.g. `"STRING"`):
254
255
  /// - `literal` → escape_string
255
256
  /// - `integer`/`int`/`float`/`numeric`/`decimal` → unquoted
256
257
  /// - `string`/`varchar`/`field` → quote_string(escape_string(v))
@@ -271,9 +272,10 @@ pub fn is_valid(
271
272
  type_hint: Option<&str>,
272
273
  noquote: bool,
273
274
  ) -> String {
274
- // Type hint dispatch
275
+ // Type hint dispatch (case-insensitive)
275
276
  if let Some(t) = type_hint {
276
- match t {
277
+ let lowered = t.to_lowercase();
278
+ match lowered.as_str() {
277
279
  "literal" => return escape_string(value),
278
280
  "int" | "integer" | "float" | "numeric" | "decimal" | "epoch" => {
279
281
  return to_unquoted(value);
@@ -416,6 +418,24 @@ mod tests {
416
418
  assert_eq!(is_valid("x", "hello", Some("string"), false), "'hello'");
417
419
  }
418
420
 
421
+ /// FEAT-103: cond_definition hints arrive upper-cased from the Navigator
422
+ /// frontend (`"STRING"`, `"INTEGER"`, `"BOOLEAN"`, `"ARRAY"`) — dispatch
423
+ /// must be case-insensitive.
424
+ #[test]
425
+ fn test_is_valid_uppercase_hint_matches_lowercase() {
426
+ assert_eq!(is_valid("x", "42", Some("INTEGER"), false), "42");
427
+ assert_eq!(is_valid("x", "hello", Some("STRING"), false), "'hello'");
428
+ assert_eq!(is_valid("x", "true", Some("BOOLEAN"), false), "TRUE");
429
+ assert_eq!(
430
+ is_valid("x", "'a','b','c'", Some("ARRAY"), false),
431
+ "'a','b','c'"
432
+ );
433
+ assert_eq!(
434
+ is_valid("x", "'a','b','c'", Some("array"), false),
435
+ is_valid("x", "'a','b','c'", Some("ARRAY"), false)
436
+ );
437
+ }
438
+
419
439
  #[test]
420
440
  fn test_is_valid_null() {
421
441
  assert_eq!(is_valid("x", "null", None, false), "null");