querysource 4.5.0__tar.gz → 4.5.4__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 (623) hide show
  1. {querysource-4.5.0 → querysource-4.5.4}/Makefile +9 -4
  2. {querysource-4.5.0 → querysource-4.5.4}/PKG-INFO +6 -4
  3. {querysource-4.5.0 → querysource-4.5.4}/generated/SharepointSource.json +17 -1
  4. {querysource-4.5.0 → querysource-4.5.4}/policies/defaults.yaml +1 -0
  5. {querysource-4.5.0 → querysource-4.5.4}/pyproject.toml +20 -4
  6. {querysource-4.5.0 → querysource-4.5.4}/querysource/_version.py +3 -3
  7. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/handlers/datasource.py +13 -3
  8. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/sharepoint.py +122 -61
  9. {querysource-4.5.0 → querysource-4.5.4}/querysource/version.py +1 -1
  10. {querysource-4.5.0 → querysource-4.5.4}/querysource.egg-info/PKG-INFO +6 -4
  11. {querysource-4.5.0 → querysource-4.5.4}/querysource.egg-info/SOURCES.txt +3 -0
  12. {querysource-4.5.0 → querysource-4.5.4}/querysource.egg-info/requires.txt +4 -2
  13. querysource-4.5.4/querysource.egg-info/scm_file_list.json +944 -0
  14. querysource-4.5.4/querysource.egg-info/scm_version.json +8 -0
  15. querysource-4.5.4/tests/handlers/test_query_param_exclusion.py +107 -0
  16. {querysource-4.5.0 → querysource-4.5.4}/.agent/rules/async-programming-expert.md +0 -0
  17. {querysource-4.5.0 → querysource-4.5.4}/.agent/rules/code-reviewer.md +0 -0
  18. {querysource-4.5.0 → querysource-4.5.4}/.agent/rules/cython-development.md +0 -0
  19. {querysource-4.5.0 → querysource-4.5.4}/.agent/rules/prompt-expert.md +0 -0
  20. {querysource-4.5.0 → querysource-4.5.4}/.agent/rules/python-development.md +0 -0
  21. {querysource-4.5.0 → querysource-4.5.4}/.agent/rules/rust-development.md +0 -0
  22. {querysource-4.5.0 → querysource-4.5.4}/.agent/workflows/create-parrot-tool.md +0 -0
  23. {querysource-4.5.0 → querysource-4.5.4}/.agent/workflows/create-workflow.md +0 -0
  24. {querysource-4.5.0 → querysource-4.5.4}/.agent/workflows/debug-regressions-with-git-bisect-binary-search.md +0 -0
  25. {querysource-4.5.0 → querysource-4.5.4}/.agent/workflows/generate-tests.md +0 -0
  26. {querysource-4.5.0 → querysource-4.5.4}/.agent/workflows/git-new-feature.md +0 -0
  27. {querysource-4.5.0 → querysource-4.5.4}/.agent/workflows/parrot-mcp-server.md +0 -0
  28. {querysource-4.5.0 → querysource-4.5.4}/.agent/workflows/release_package.md +0 -0
  29. {querysource-4.5.0 → querysource-4.5.4}/.agent/workflows/start-flow.md +0 -0
  30. {querysource-4.5.0 → querysource-4.5.4}/.bumpversion.cfg +0 -0
  31. {querysource-4.5.0 → querysource-4.5.4}/.claude/agents/code-reviewer.md +0 -0
  32. {querysource-4.5.0 → querysource-4.5.4}/.claude/agents/sdd-autopilot.md +0 -0
  33. {querysource-4.5.0 → querysource-4.5.4}/.claude/agents/sdd-qa.md +0 -0
  34. {querysource-4.5.0 → querysource-4.5.4}/.claude/agents/sdd-research.md +0 -0
  35. {querysource-4.5.0 → querysource-4.5.4}/.claude/agents/sdd-worker.md +0 -0
  36. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/pr-review.md +0 -0
  37. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-brainstorm.md +0 -0
  38. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-codereview.md +0 -0
  39. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-done.md +0 -0
  40. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-fromjira.md +0 -0
  41. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-next.md +0 -0
  42. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-proposal.md +0 -0
  43. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-spec.md +0 -0
  44. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-start.md +0 -0
  45. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-status.md +0 -0
  46. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-task.md +0 -0
  47. {querysource-4.5.0 → querysource-4.5.4}/.claude/commands/sdd-tojira.md +0 -0
  48. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/aws-cost-optimization.md +0 -0
  49. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/code-reviewer.md +0 -0
  50. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/cython-development.md +0 -0
  51. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/python-development.md +0 -0
  52. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/rust-development.md +0 -0
  53. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/using-git-worktrees.md +0 -0
  54. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/worktree-pr-and-clean.md +0 -0
  55. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/worktree-start-feature.md +0 -0
  56. {querysource-4.5.0 → querysource-4.5.4}/.claude/rules/worktree-status.md +0 -0
  57. {querysource-4.5.0 → querysource-4.5.4}/.github/dependabot.yml +0 -0
  58. {querysource-4.5.0 → querysource-4.5.4}/.github/workflows/codeql-analysis.yml +0 -0
  59. {querysource-4.5.0 → querysource-4.5.4}/.github/workflows/release.yml +0 -0
  60. {querysource-4.5.0 → querysource-4.5.4}/.isort.cfg +0 -0
  61. {querysource-4.5.0 → querysource-4.5.4}/.jupyter/jupyter_notebook_config.py +0 -0
  62. {querysource-4.5.0 → querysource-4.5.4}/.pre-commit-config.yaml +0 -0
  63. {querysource-4.5.0 → querysource-4.5.4}/.pylintrc +0 -0
  64. {querysource-4.5.0 → querysource-4.5.4}/CHANGES.rst +0 -0
  65. {querysource-4.5.0 → querysource-4.5.4}/CODE_OF_CONDUCT.md +0 -0
  66. {querysource-4.5.0 → querysource-4.5.4}/CONTRIBUTING.md +0 -0
  67. {querysource-4.5.0 → querysource-4.5.4}/INSTALL +0 -0
  68. {querysource-4.5.0 → querysource-4.5.4}/JOIN_CONDITIONS_FEATURE.md +0 -0
  69. {querysource-4.5.0 → querysource-4.5.4}/JOIN_CONDITIONS_SUMMARY.md +0 -0
  70. {querysource-4.5.0 → querysource-4.5.4}/LICENSE +0 -0
  71. {querysource-4.5.0 → querysource-4.5.4}/MANIFEST.in +0 -0
  72. {querysource-4.5.0 → querysource-4.5.4}/README.md +0 -0
  73. {querysource-4.5.0 → querysource-4.5.4}/app.py +0 -0
  74. {querysource-4.5.0 → querysource-4.5.4}/bin/README.md +0 -0
  75. {querysource-4.5.0 → querysource-4.5.4}/conftest.py +0 -0
  76. {querysource-4.5.0 → querysource-4.5.4}/generated/AirtableSource.json +0 -0
  77. {querysource-4.5.0 → querysource-4.5.4}/generated/Concat.json +0 -0
  78. {querysource-4.5.0 → querysource-4.5.4}/generated/DWHDestination.json +0 -0
  79. {querysource-4.5.0 → querysource-4.5.4}/generated/DropCols.json +0 -0
  80. {querysource-4.5.0 → querysource-4.5.4}/generated/FileSource.json +0 -0
  81. {querysource-4.5.0 → querysource-4.5.4}/generated/Filter.json +0 -0
  82. {querysource-4.5.0 → querysource-4.5.4}/generated/FilterCols.json +0 -0
  83. {querysource-4.5.0 → querysource-4.5.4}/generated/Forecast.json +0 -0
  84. {querysource-4.5.0 → querysource-4.5.4}/generated/GoogleMaps.json +0 -0
  85. {querysource-4.5.0 → querysource-4.5.4}/generated/GroupBy.json +0 -0
  86. {querysource-4.5.0 → querysource-4.5.4}/generated/Info.json +0 -0
  87. {querysource-4.5.0 → querysource-4.5.4}/generated/Join.json +0 -0
  88. {querysource-4.5.0 → querysource-4.5.4}/generated/Map.json +0 -0
  89. {querysource-4.5.0 → querysource-4.5.4}/generated/Melt.json +0 -0
  90. {querysource-4.5.0 → querysource-4.5.4}/generated/Merge.json +0 -0
  91. {querysource-4.5.0 → querysource-4.5.4}/generated/NormalizeColumns.json +0 -0
  92. {querysource-4.5.0 → querysource-4.5.4}/generated/PluckCols.json +0 -0
  93. {querysource-4.5.0 → querysource-4.5.4}/generated/Query.json +0 -0
  94. {querysource-4.5.0 → querysource-4.5.4}/generated/S3Source.json +0 -0
  95. {querysource-4.5.0 → querysource-4.5.4}/generated/SmartSheetSource.json +0 -0
  96. {querysource-4.5.0 → querysource-4.5.4}/generated/Table.json +0 -0
  97. {querysource-4.5.0 → querysource-4.5.4}/generated/TableDestination.json +0 -0
  98. {querysource-4.5.0 → querysource-4.5.4}/generated/TableOutput.json +0 -0
  99. {querysource-4.5.0 → querysource-4.5.4}/generated/TableOutputAdapter.json +0 -0
  100. {querysource-4.5.0 → querysource-4.5.4}/generated/TableSource.json +0 -0
  101. {querysource-4.5.0 → querysource-4.5.4}/generated/ToS3.json +0 -0
  102. {querysource-4.5.0 → querysource-4.5.4}/generated/ToSharepoint.json +0 -0
  103. {querysource-4.5.0 → querysource-4.5.4}/generated/correlation.json +0 -0
  104. {querysource-4.5.0 → querysource-4.5.4}/generated/crosstab.json +0 -0
  105. {querysource-4.5.0 → querysource-4.5.4}/generated/pivot.json +0 -0
  106. {querysource-4.5.0 → querysource-4.5.4}/generated/tExplode.json +0 -0
  107. {querysource-4.5.0 → querysource-4.5.4}/generated/tOrder.json +0 -0
  108. {querysource-4.5.0 → querysource-4.5.4}/generated/tPandas.json +0 -0
  109. {querysource-4.5.0 → querysource-4.5.4}/gunicorn_config.py +0 -0
  110. {querysource-4.5.0 → querysource-4.5.4}/mypy.ini +0 -0
  111. {querysource-4.5.0 → querysource-4.5.4}/nav.py +0 -0
  112. {querysource-4.5.0 → querysource-4.5.4}/policies/HARDENING.md +0 -0
  113. {querysource-4.5.0 → querysource-4.5.4}/policies/baseline.yaml +0 -0
  114. {querysource-4.5.0 → querysource-4.5.4}/policies/datasources.yaml +0 -0
  115. {querysource-4.5.0 → querysource-4.5.4}/policies/drivers.yaml +0 -0
  116. {querysource-4.5.0 → querysource-4.5.4}/policies/raw_queries.yaml +0 -0
  117. {querysource-4.5.0 → querysource-4.5.4}/policies/slugs.yaml +0 -0
  118. {querysource-4.5.0 → querysource-4.5.4}/policies/superusers.yaml +0 -0
  119. {querysource-4.5.0 → querysource-4.5.4}/pytest.ini +0 -0
  120. {querysource-4.5.0 → querysource-4.5.4}/querysource/__cli__.py +0 -0
  121. {querysource-4.5.0 → querysource-4.5.4}/querysource/__init__.py +0 -0
  122. {querysource-4.5.0 → querysource-4.5.4}/querysource/auth/__init__.py +0 -0
  123. {querysource-4.5.0 → querysource-4.5.4}/querysource/auth/_resource_types.py +0 -0
  124. {querysource-4.5.0 → querysource-4.5.4}/querysource/auth/credentials.py +0 -0
  125. {querysource-4.5.0 → querysource-4.5.4}/querysource/auth/pbac.py +0 -0
  126. {querysource-4.5.0 → querysource-4.5.4}/querysource/cache/__init__.py +0 -0
  127. {querysource-4.5.0 → querysource-4.5.4}/querysource/cache/backends/__init__.py +0 -0
  128. {querysource-4.5.0 → querysource-4.5.4}/querysource/cache/backends/abstract.py +0 -0
  129. {querysource-4.5.0 → querysource-4.5.4}/querysource/cache/backends/memcache.py +0 -0
  130. {querysource-4.5.0 → querysource-4.5.4}/querysource/cache/backends/redis.py +0 -0
  131. {querysource-4.5.0 → querysource-4.5.4}/querysource/cache/base.py +0 -0
  132. {querysource-4.5.0 → querysource-4.5.4}/querysource/cli/__init__.py +0 -0
  133. {querysource-4.5.0 → querysource-4.5.4}/querysource/cli/generate_docs.py +0 -0
  134. {querysource-4.5.0 → querysource-4.5.4}/querysource/conf.py +0 -0
  135. {querysource-4.5.0 → querysource-4.5.4}/querysource/connections.py +0 -0
  136. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/__init__.py +0 -0
  137. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/__init__.py +0 -0
  138. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/abstract.py +0 -0
  139. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/arangodb.py +0 -0
  140. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/athena.py +0 -0
  141. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/bigquery.py +0 -0
  142. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/cassandra.py +0 -0
  143. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/clickhouse.py +0 -0
  144. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/cockroachdb.py +0 -0
  145. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/couchbase.py +0 -0
  146. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/couchdb.py +0 -0
  147. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/countries.py +0 -0
  148. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/delta.py +0 -0
  149. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/documentdb.py +0 -0
  150. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/dynamodb.py +0 -0
  151. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/elastic.py +0 -0
  152. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/ga.py +0 -0
  153. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/gcalc.py +0 -0
  154. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/hazel.py +0 -0
  155. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/iceberg.py +0 -0
  156. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/influx.py +0 -0
  157. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/jdbc.py +0 -0
  158. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/jira.py +0 -0
  159. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/mariadb.py +0 -0
  160. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/memcached.py +0 -0
  161. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/mongo.py +0 -0
  162. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/mysql.py +0 -0
  163. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/odbc.py +0 -0
  164. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/openweather.py +0 -0
  165. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/oracle.py +0 -0
  166. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/pg.py +0 -0
  167. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/pg_admin.py +0 -0
  168. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/postgres.py +0 -0
  169. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/py.typed +0 -0
  170. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/qs.py +0 -0
  171. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/redis.py +0 -0
  172. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/rest.py +0 -0
  173. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/rethink.py +0 -0
  174. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/sa.py +0 -0
  175. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/salesforce.py +0 -0
  176. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/scylladb.py +0 -0
  177. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/sqlalchemy.py +0 -0
  178. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/sqlite.py +0 -0
  179. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/sqlserver.py +0 -0
  180. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/upc.py +0 -0
  181. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/drivers/zipcodeapi.py +0 -0
  182. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/handlers/__init__.py +0 -0
  183. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/handlers/utils.py +0 -0
  184. {querysource-4.5.0 → querysource-4.5.4}/querysource/datasources/models.py +0 -0
  185. {querysource-4.5.0 → querysource-4.5.4}/querysource/events/__init__.py +0 -0
  186. {querysource-4.5.0 → querysource-4.5.4}/querysource/exceptions.py +0 -0
  187. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/__init__.py +0 -0
  188. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/_pagination.py +0 -0
  189. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/abstract.py +0 -0
  190. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/components.py +0 -0
  191. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/executor.py +0 -0
  192. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/integrations/__init__.py +0 -0
  193. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/integrations/airtable.py +0 -0
  194. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/log.py +0 -0
  195. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/manager.py +0 -0
  196. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/multi.py +0 -0
  197. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/outputs/__init__.py +0 -0
  198. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/outputs/tableOutput/__init__.py +0 -0
  199. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/outputs/tableOutput/postgres.py +0 -0
  200. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/outputs/tableOutput/table.py +0 -0
  201. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/scheduler.py +0 -0
  202. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/service.py +0 -0
  203. {querysource-4.5.0 → querysource-4.5.4}/querysource/handlers/variables.py +0 -0
  204. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/__init__.py +0 -0
  205. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/airtable.py +0 -0
  206. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/connections.py +0 -0
  207. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/credentials.py +0 -0
  208. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/databases/__init__.py +0 -0
  209. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/databases/abstract.py +0 -0
  210. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/databases/bigquery.py +0 -0
  211. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/databases/db.py +0 -0
  212. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/databases/mongo.py +0 -0
  213. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/databases/rethink.py +0 -0
  214. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/http.py +0 -0
  215. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/playwright_service.py +0 -0
  216. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/queries.py +0 -0
  217. {querysource-4.5.0 → querysource-4.5.4}/querysource/interfaces/selenium_service.py +0 -0
  218. {querysource-4.5.0 → querysource-4.5.4}/querysource/libs/__init__.py +0 -0
  219. {querysource-4.5.0 → querysource-4.5.4}/querysource/libs/encoders.py +0 -0
  220. {querysource-4.5.0 → querysource-4.5.4}/querysource/libs/functions/__init__.py +0 -0
  221. {querysource-4.5.0 → querysource-4.5.4}/querysource/libs/py.typed +0 -0
  222. {querysource-4.5.0 → querysource-4.5.4}/querysource/models.py +0 -0
  223. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/__init__.py +0 -0
  224. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/destinations/__init__.py +0 -0
  225. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/destinations/abstract.py +0 -0
  226. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/destinations/dwh.py +0 -0
  227. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/destinations/s3.py +0 -0
  228. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/destinations/sharepoint.py +0 -0
  229. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/destinations/table.py +0 -0
  230. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/__init__.py +0 -0
  231. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/abstract.py +0 -0
  232. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/arrow.py +0 -0
  233. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/dt.py +0 -0
  234. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/factory.py +0 -0
  235. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/iter.py +0 -0
  236. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/modin.py +0 -0
  237. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/pandas.py +0 -0
  238. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/dt/polars.py +0 -0
  239. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/output.py +0 -0
  240. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/__init__.py +0 -0
  241. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/abstract.py +0 -0
  242. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/bigquery.py +0 -0
  243. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/documentdb.py +0 -0
  244. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/mongodb.py +0 -0
  245. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/mysql.py +0 -0
  246. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/postgres.py +0 -0
  247. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/rethink.py +0 -0
  248. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/sa.py +0 -0
  249. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/TableOutput/table.py +0 -0
  250. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/tables/__init__.py +0 -0
  251. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/__init__.py +0 -0
  252. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/abstract.py +0 -0
  253. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/bokeh.py +0 -0
  254. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/clustering.py +0 -0
  255. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/csv.py +0 -0
  256. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/describe.py +0 -0
  257. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/eda.py +0 -0
  258. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/excel.py +0 -0
  259. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/html.py +0 -0
  260. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/json.py +0 -0
  261. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/pdf.py +0 -0
  262. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/pickle.py +0 -0
  263. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/plotly.py +0 -0
  264. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/profiling.py +0 -0
  265. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/report.py +0 -0
  266. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/table.py +0 -0
  267. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/tsv.py +0 -0
  268. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/txt.py +0 -0
  269. {querysource-4.5.0 → querysource-4.5.4}/querysource/outputs/writers/xml.py +0 -0
  270. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/__init__.py +0 -0
  271. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/abstract.c +0 -0
  272. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/abstract.pxd +0 -0
  273. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/abstract.pyx +0 -0
  274. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/arangodb.c +0 -0
  275. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/arangodb.pxd +0 -0
  276. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/arangodb.pyx +0 -0
  277. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/bigquery.c +0 -0
  278. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/bigquery.pxd +0 -0
  279. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/bigquery.pyx +0 -0
  280. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/cql.c +0 -0
  281. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/cql.pxd +0 -0
  282. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/cql.pyx +0 -0
  283. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/deltatbl.c +0 -0
  284. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/deltatbl.pxd +0 -0
  285. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/deltatbl.pyx +0 -0
  286. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/elastic.cpp +0 -0
  287. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/elastic.pxd +0 -0
  288. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/elastic.pyx +0 -0
  289. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/iceberg.c +0 -0
  290. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/iceberg.pxd +0 -0
  291. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/iceberg.pyx +0 -0
  292. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/influx.c +0 -0
  293. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/influx.pxd +0 -0
  294. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/influx.pyx +0 -0
  295. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/mongo.cpp +0 -0
  296. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/mongo.pxd +0 -0
  297. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/mongo.pyx +0 -0
  298. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/parser.c +0 -0
  299. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/parser.pxd +0 -0
  300. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/parser.pyx +0 -0
  301. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/pgsql.c +0 -0
  302. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/pgsql.pxd +0 -0
  303. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/pgsql.pyx +0 -0
  304. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/rethink.c +0 -0
  305. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/rethink.pxd +0 -0
  306. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/rethink.pyx +0 -0
  307. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sosql.c +0 -0
  308. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sosql.pxd +0 -0
  309. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sosql.pyx +0 -0
  310. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sql.c +0 -0
  311. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sql.pxd +0 -0
  312. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sql.pyx +0 -0
  313. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sqlserver.c +0 -0
  314. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sqlserver.pxd +0 -0
  315. {querysource-4.5.0 → querysource-4.5.4}/querysource/parsers/sqlserver.pyx +0 -0
  316. {querysource-4.5.0 → querysource-4.5.4}/querysource/plugins/__init__.py +0 -0
  317. {querysource-4.5.0 → querysource-4.5.4}/querysource/plugins/importer.py +0 -0
  318. {querysource-4.5.0 → querysource-4.5.4}/querysource/plugins/sources/__init__.py +0 -0
  319. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/__init__.py +0 -0
  320. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/abstract.py +0 -0
  321. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/arangodb.py +0 -0
  322. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/bigquery.py +0 -0
  323. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/cassandra.py +0 -0
  324. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/db.py +0 -0
  325. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/default.py +0 -0
  326. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/deltatbl.py +0 -0
  327. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/documentdb.py +0 -0
  328. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/dummy.py +0 -0
  329. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/elastic.py +0 -0
  330. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/external.py +0 -0
  331. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/http.py +0 -0
  332. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/iceberg.py +0 -0
  333. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/influx.py +0 -0
  334. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/mysql.py +0 -0
  335. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/pg.py +0 -0
  336. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/py.typed +0 -0
  337. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/rest.py +0 -0
  338. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/rethink.py +0 -0
  339. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/salesforce.py +0 -0
  340. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/scylladb.py +0 -0
  341. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/__init__.py +0 -0
  342. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/abstract.py +0 -0
  343. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/amazon.py +0 -0
  344. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/countries.py +0 -0
  345. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/ga.py +0 -0
  346. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/geofcc.py +0 -0
  347. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/gmaps.py +0 -0
  348. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/graphcountries.py +0 -0
  349. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/graphql.py +0 -0
  350. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/http.py +0 -0
  351. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/hubspot.py +0 -0
  352. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/openweather.py +0 -0
  353. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/parsers/__init__.py +0 -0
  354. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/parsers/amproduct.py +0 -0
  355. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/parsers/xpath.py +0 -0
  356. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/pokemon.py +0 -0
  357. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/populartimes.py +0 -0
  358. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/py.typed +0 -0
  359. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/rest.py +0 -0
  360. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/retailnext.py +0 -0
  361. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/rssapp.py +0 -0
  362. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/salesforce.py +0 -0
  363. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/scrapper.py +0 -0
  364. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/shoppertrack.py +0 -0
  365. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/swop.py +0 -0
  366. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/uap.py +0 -0
  367. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/upc.py +0 -0
  368. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/wm_stores.py +0 -0
  369. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/zammad.py +0 -0
  370. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sources/zipcodeapi.py +0 -0
  371. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sql.py +0 -0
  372. {querysource-4.5.0 → querysource-4.5.4}/querysource/providers/sqlserver.py +0 -0
  373. {querysource-4.5.0 → querysource-4.5.4}/querysource/py.typed +0 -0
  374. {querysource-4.5.0 → querysource-4.5.4}/querysource/qs_parsers/__init__.py +0 -0
  375. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/__init__.py +0 -0
  376. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/base.py +0 -0
  377. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/executor.py +0 -0
  378. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/models.py +0 -0
  379. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/__init__.py +0 -0
  380. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/_introspect.py +0 -0
  381. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/abstract.py +0 -0
  382. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/components/__init__.py +0 -0
  383. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/components/abstract.py +0 -0
  384. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/destinations/__init__.py +0 -0
  385. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/destinations/dwh.py +0 -0
  386. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/destinations/s3.py +0 -0
  387. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/destinations/sharepoint.py +0 -0
  388. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/destinations/table.py +0 -0
  389. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/Concat.py +0 -0
  390. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/GroupBy.catalog.yaml +0 -0
  391. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/GroupBy.py +0 -0
  392. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/Info.py +0 -0
  393. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/Join.catalog.yaml +0 -0
  394. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/Join.py +0 -0
  395. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/Melt.catalog.yaml +0 -0
  396. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/Melt.py +0 -0
  397. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/Merge.catalog.yaml +0 -0
  398. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/Merge.py +0 -0
  399. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/__init__.py +0 -0
  400. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/abstract.py +0 -0
  401. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/filter/Filter.catalog.yaml +0 -0
  402. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/filter/__init__.py +0 -0
  403. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/operators/filter/flt.py +0 -0
  404. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/registry.py +0 -0
  405. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/__init__.py +0 -0
  406. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/airtable.py +0 -0
  407. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/base.py +0 -0
  408. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/executors.py +0 -0
  409. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/file.py +0 -0
  410. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/query.catalog.yaml +0 -0
  411. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/query.py +0 -0
  412. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/s3.py +0 -0
  413. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/smartsheet.py +0 -0
  414. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/sources/table.py +0 -0
  415. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/DropCols.catalog.yaml +0 -0
  416. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/DropCols.py +0 -0
  417. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/FilterCols.catalog.yaml +0 -0
  418. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/FilterCols.py +0 -0
  419. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/Forecast.catalog.yaml +0 -0
  420. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/Forecast.py +0 -0
  421. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/Map.catalog.yaml +0 -0
  422. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/Map.py +0 -0
  423. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/NormalizeColumns.catalog.yaml +0 -0
  424. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/NormalizeColumns.py +0 -0
  425. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/PluckCols.catalog.yaml +0 -0
  426. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/PluckCols.py +0 -0
  427. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/__init__.py +0 -0
  428. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/abstract.py +0 -0
  429. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/correlation.catalog.yaml +0 -0
  430. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/correlation.py +0 -0
  431. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/crosstab.catalog.yaml +0 -0
  432. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/crosstab.py +0 -0
  433. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/google/GoogleMaps.catalog.yaml +0 -0
  434. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/google/__init__.py +0 -0
  435. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/google/maps.py +0 -0
  436. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/pivot.catalog.yaml +0 -0
  437. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/pivot.py +0 -0
  438. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/tExplode.catalog.yaml +0 -0
  439. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/tExplode.py +0 -0
  440. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/tOrder.catalog.yaml +0 -0
  441. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/tOrder.py +0 -0
  442. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/multi/transformations/tPandas.py +0 -0
  443. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/obj.py +0 -0
  444. {querysource-4.5.0 → querysource-4.5.4}/querysource/queries/qs.py +0 -0
  445. {querysource-4.5.0 → querysource-4.5.4}/querysource/scheduler/__init__.py +0 -0
  446. {querysource-4.5.0 → querysource-4.5.4}/querysource/scheduler/jobs.py +0 -0
  447. {querysource-4.5.0 → querysource-4.5.4}/querysource/scheduler/notifications.py +0 -0
  448. {querysource-4.5.0 → querysource-4.5.4}/querysource/scheduler/scheduler.py +0 -0
  449. {querysource-4.5.0 → querysource-4.5.4}/querysource/services.py +0 -0
  450. {querysource-4.5.0 → querysource-4.5.4}/querysource/template/__init__.py +0 -0
  451. {querysource-4.5.0 → querysource-4.5.4}/querysource/template/parser.py +0 -0
  452. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/__init__.py +0 -0
  453. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/converters.cpp +0 -0
  454. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/converters.pyx +0 -0
  455. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/dt/__init__.py +0 -0
  456. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/dt/filters.py +0 -0
  457. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/dt/transforms.py +0 -0
  458. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/py.typed +0 -0
  459. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/typedefs.c +0 -0
  460. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/typedefs.pyx +0 -0
  461. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/validators.cpp +0 -0
  462. {querysource-4.5.0 → querysource-4.5.4}/querysource/types/validators.pyx +0 -0
  463. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/__init__.py +0 -0
  464. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/cache_serialization.py +0 -0
  465. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/errors.py +0 -0
  466. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/events.py +0 -0
  467. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/fn.py +0 -0
  468. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/functions.cpp +0 -0
  469. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/functions.pyx +0 -0
  470. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/getfunc.py +0 -0
  471. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/handlers.py +0 -0
  472. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/parseqs.cpp +0 -0
  473. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/parseqs.pyx +0 -0
  474. {querysource-4.5.0 → querysource-4.5.4}/querysource/utils/validators.py +0 -0
  475. {querysource-4.5.0 → querysource-4.5.4}/querysource.egg-info/dependency_links.txt +0 -0
  476. {querysource-4.5.0 → querysource-4.5.4}/querysource.egg-info/entry_points.txt +0 -0
  477. {querysource-4.5.0 → querysource-4.5.4}/querysource.egg-info/not-zip-safe +0 -0
  478. {querysource-4.5.0 → querysource-4.5.4}/querysource.egg-info/top_level.txt +0 -0
  479. {querysource-4.5.0 → querysource-4.5.4}/run.py +0 -0
  480. {querysource-4.5.0 → querysource-4.5.4}/rust/Cargo.lock +0 -0
  481. {querysource-4.5.0 → querysource-4.5.4}/rust/Cargo.toml +0 -0
  482. {querysource-4.5.0 → querysource-4.5.4}/rust/pyproject.toml +0 -0
  483. {querysource-4.5.0 → querysource-4.5.4}/rust/src/arangodb_parser.rs +0 -0
  484. {querysource-4.5.0 → querysource-4.5.4}/rust/src/bigquery_parser.rs +0 -0
  485. {querysource-4.5.0 → querysource-4.5.4}/rust/src/cql_parser.rs +0 -0
  486. {querysource-4.5.0 → querysource-4.5.4}/rust/src/elastic_parser.rs +0 -0
  487. {querysource-4.5.0 → querysource-4.5.4}/rust/src/filter_common.rs +0 -0
  488. {querysource-4.5.0 → querysource-4.5.4}/rust/src/flux_parser.rs +0 -0
  489. {querysource-4.5.0 → querysource-4.5.4}/rust/src/lib.rs +0 -0
  490. {querysource-4.5.0 → querysource-4.5.4}/rust/src/mongo_parser.rs +0 -0
  491. {querysource-4.5.0 → querysource-4.5.4}/rust/src/mssql_parser.rs +0 -0
  492. {querysource-4.5.0 → querysource-4.5.4}/rust/src/parseqs.rs +0 -0
  493. {querysource-4.5.0 → querysource-4.5.4}/rust/src/pgsql_parser.rs +0 -0
  494. {querysource-4.5.0 → querysource-4.5.4}/rust/src/rethink_parser.rs +0 -0
  495. {querysource-4.5.0 → querysource-4.5.4}/rust/src/safe_dict.rs +0 -0
  496. {querysource-4.5.0 → querysource-4.5.4}/rust/src/soql_parser.rs +0 -0
  497. {querysource-4.5.0 → querysource-4.5.4}/rust/src/sql_parser.rs +0 -0
  498. {querysource-4.5.0 → querysource-4.5.4}/rust/src/validators.rs +0 -0
  499. {querysource-4.5.0 → querysource-4.5.4}/setup.cfg +0 -0
  500. {querysource-4.5.0 → querysource-4.5.4}/setup.py +0 -0
  501. {querysource-4.5.0 → querysource-4.5.4}/static/notebook/bundle.js +0 -0
  502. {querysource-4.5.0 → querysource-4.5.4}/templates/__init__.py +0 -0
  503. {querysource-4.5.0 → querysource-4.5.4}/templates/base.html +0 -0
  504. {querysource-4.5.0 → querysource-4.5.4}/templates/default.html +0 -0
  505. {querysource-4.5.0 → querysource-4.5.4}/templates/default_table.html +0 -0
  506. {querysource-4.5.0 → querysource-4.5.4}/templates/fontlist-v330.json +0 -0
  507. {querysource-4.5.0 → querysource-4.5.4}/templates/fontlist-v390.json +0 -0
  508. {querysource-4.5.0 → querysource-4.5.4}/templates/table_charts.html +0 -0
  509. {querysource-4.5.0 → querysource-4.5.4}/tests/auth/__init__.py +0 -0
  510. {querysource-4.5.0 → querysource-4.5.4}/tests/auth/test_credentials.py +0 -0
  511. {querysource-4.5.0 → querysource-4.5.4}/tests/auth/test_pbac_bootstrap.py +0 -0
  512. {querysource-4.5.0 → querysource-4.5.4}/tests/check_concurrent_get_slug.py +0 -0
  513. {querysource-4.5.0 → querysource-4.5.4}/tests/conftest.py +0 -0
  514. {querysource-4.5.0 → querysource-4.5.4}/tests/datasources/__init__.py +0 -0
  515. {querysource-4.5.0 → querysource-4.5.4}/tests/datasources/test_datasource_view_pbac.py +0 -0
  516. {querysource-4.5.0 → querysource-4.5.4}/tests/datasources/test_driver_factory_session.py +0 -0
  517. {querysource-4.5.0 → querysource-4.5.4}/tests/datasources/test_pg_admin_registration.py +0 -0
  518. {querysource-4.5.0 → querysource-4.5.4}/tests/datasources/test_pg_params_for.py +0 -0
  519. {querysource-4.5.0 → querysource-4.5.4}/tests/handlers/__init__.py +0 -0
  520. {querysource-4.5.0 → querysource-4.5.4}/tests/handlers/conftest.py +0 -0
  521. {querysource-4.5.0 → querysource-4.5.4}/tests/handlers/test_abstract_pbac_helpers.py +0 -0
  522. {querysource-4.5.0 → querysource-4.5.4}/tests/handlers/test_airtable_oauth.py +0 -0
  523. {querysource-4.5.0 → querysource-4.5.4}/tests/handlers/test_multiquery_pbac_smoke.py +0 -0
  524. {querysource-4.5.0 → querysource-4.5.4}/tests/handlers/test_queryexecutor_pbac_smoke.py +0 -0
  525. {querysource-4.5.0 → querysource-4.5.4}/tests/handlers/test_querymanager_pagination.py +0 -0
  526. {querysource-4.5.0 → querysource-4.5.4}/tests/handlers/test_queryservice_pbac_smoke.py +0 -0
  527. {querysource-4.5.0 → querysource-4.5.4}/tests/integration/__init__.py +0 -0
  528. {querysource-4.5.0 → querysource-4.5.4}/tests/integration/test_datasource_endpoint.py +0 -0
  529. {querysource-4.5.0 → querysource-4.5.4}/tests/integration/test_pbac_credentials.py +0 -0
  530. {querysource-4.5.0 → querysource-4.5.4}/tests/integration/test_pbac_enforcement.py +0 -0
  531. {querysource-4.5.0 → querysource-4.5.4}/tests/integration/test_pbac_listing.py +0 -0
  532. {querysource-4.5.0 → querysource-4.5.4}/tests/integration/test_slug_injection.py +0 -0
  533. {querysource-4.5.0 → querysource-4.5.4}/tests/integration/test_slug_regression.py +0 -0
  534. {querysource-4.5.0 → querysource-4.5.4}/tests/interfaces/__init__.py +0 -0
  535. {querysource-4.5.0 → querysource-4.5.4}/tests/interfaces/test_airtable_interface.py +0 -0
  536. {querysource-4.5.0 → querysource-4.5.4}/tests/multi/__init__.py +0 -0
  537. {querysource-4.5.0 → querysource-4.5.4}/tests/multi/sources/__init__.py +0 -0
  538. {querysource-4.5.0 → querysource-4.5.4}/tests/multi/sources/test_airtable_source.py +0 -0
  539. {querysource-4.5.0 → querysource-4.5.4}/tests/multi/sources/test_registry.py +0 -0
  540. {querysource-4.5.0 → querysource-4.5.4}/tests/perf/__init__.py +0 -0
  541. {querysource-4.5.0 → querysource-4.5.4}/tests/perf/test_pbac_overhead.py +0 -0
  542. {querysource-4.5.0 → querysource-4.5.4}/tests/policies/__init__.py +0 -0
  543. {querysource-4.5.0 → querysource-4.5.4}/tests/policies/test_default_policies_load.py +0 -0
  544. {querysource-4.5.0 → querysource-4.5.4}/tests/scheduler/__init__.py +0 -0
  545. {querysource-4.5.0 → querysource-4.5.4}/tests/scheduler/test_parse_trigger_shorthands.py +0 -0
  546. {querysource-4.5.0 → querysource-4.5.4}/tests/scheduler/test_shorthand_loaders.py +0 -0
  547. {querysource-4.5.0 → querysource-4.5.4}/tests/services/__init__.py +0 -0
  548. {querysource-4.5.0 → querysource-4.5.4}/tests/services/test_querysource_setup_pbac.py +0 -0
  549. {querysource-4.5.0 → querysource-4.5.4}/tests/test_abstract_multi.py +0 -0
  550. {querysource-4.5.0 → querysource-4.5.4}/tests/test_abstract_refactor.py +0 -0
  551. {querysource-4.5.0 → querysource-4.5.4}/tests/test_api.py +0 -0
  552. {querysource-4.5.0 → querysource-4.5.4}/tests/test_arangodb_parser.py +0 -0
  553. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_colcols.py +0 -0
  554. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_correlation.py +0 -0
  555. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_filter.py +0 -0
  556. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_forecast.py +0 -0
  557. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_googlemaps.py +0 -0
  558. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_groupby.py +0 -0
  559. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_map.py +0 -0
  560. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_pivot.py +0 -0
  561. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_remote.py +0 -0
  562. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_texplode.py +0 -0
  563. {querysource-4.5.0 → querysource-4.5.4}/tests/test_catalog_torder.py +0 -0
  564. {querysource-4.5.0 → querysource-4.5.4}/tests/test_cli_generate_docs.py +0 -0
  565. {querysource-4.5.0 → querysource-4.5.4}/tests/test_column_filters.py +0 -0
  566. {querysource-4.5.0 → querysource-4.5.4}/tests/test_component_handler.py +0 -0
  567. {querysource-4.5.0 → querysource-4.5.4}/tests/test_component_registry.py +0 -0
  568. {querysource-4.5.0 → querysource-4.5.4}/tests/test_conf_airtable.py +0 -0
  569. {querysource-4.5.0 → querysource-4.5.4}/tests/test_destination_base.py +0 -0
  570. {querysource-4.5.0 → querysource-4.5.4}/tests/test_destination_dwh.py +0 -0
  571. {querysource-4.5.0 → querysource-4.5.4}/tests/test_destination_integration.py +0 -0
  572. {querysource-4.5.0 → querysource-4.5.4}/tests/test_destination_s3.py +0 -0
  573. {querysource-4.5.0 → querysource-4.5.4}/tests/test_destination_sharepoint.py +0 -0
  574. {querysource-4.5.0 → querysource-4.5.4}/tests/test_destination_table.py +0 -0
  575. {querysource-4.5.0 → querysource-4.5.4}/tests/test_destinations_documentation_endpoint.py +0 -0
  576. {querysource-4.5.0 → querysource-4.5.4}/tests/test_elastic_parser.py +0 -0
  577. {querysource-4.5.0 → querysource-4.5.4}/tests/test_error_formatter.py +0 -0
  578. {querysource-4.5.0 → querysource-4.5.4}/tests/test_eval.py +0 -0
  579. {querysource-4.5.0 → querysource-4.5.4}/tests/test_feat102_error_redaction.py +0 -0
  580. {querysource-4.5.0 → querysource-4.5.4}/tests/test_grouping_sync.py +0 -0
  581. {querysource-4.5.0 → querysource-4.5.4}/tests/test_info_eda.py +0 -0
  582. {querysource-4.5.0 → querysource-4.5.4}/tests/test_info_eda_e2e.py +0 -0
  583. {querysource-4.5.0 → querysource-4.5.4}/tests/test_info_eda_integration.py +0 -0
  584. {querysource-4.5.0 → querysource-4.5.4}/tests/test_join_conditions.py +0 -0
  585. {querysource-4.5.0 → querysource-4.5.4}/tests/test_join_with_column_filter.py +0 -0
  586. {querysource-4.5.0 → querysource-4.5.4}/tests/test_local_executor.py +0 -0
  587. {querysource-4.5.0 → querysource-4.5.4}/tests/test_multi_destinations_subpackage.py +0 -0
  588. {querysource-4.5.0 → querysource-4.5.4}/tests/test_multiqs_column_transforms.py +0 -0
  589. {querysource-4.5.0 → querysource-4.5.4}/tests/test_multiqs_destination_dispatch.py +0 -0
  590. {querysource-4.5.0 → querysource-4.5.4}/tests/test_multiqs_remote_dispatch.py +0 -0
  591. {querysource-4.5.0 → querysource-4.5.4}/tests/test_multiqs_sources_integration.py +0 -0
  592. {querysource-4.5.0 → querysource-4.5.4}/tests/test_queryslug_concurrency.py +0 -0
  593. {querysource-4.5.0 → querysource-4.5.4}/tests/test_querysource_setup_airtable.py +0 -0
  594. {querysource-4.5.0 → querysource-4.5.4}/tests/test_qworker_config.py +0 -0
  595. {querysource-4.5.0 → querysource-4.5.4}/tests/test_remote_executor.py +0 -0
  596. {querysource-4.5.0 → querysource-4.5.4}/tests/test_route_registration.py +0 -0
  597. {querysource-4.5.0 → querysource-4.5.4}/tests/test_rss.py +0 -0
  598. {querysource-4.5.0 → querysource-4.5.4}/tests/test_rust_parsers.py +0 -0
  599. {querysource-4.5.0 → querysource-4.5.4}/tests/test_scheduler_core.py +0 -0
  600. {querysource-4.5.0 → querysource-4.5.4}/tests/test_scheduler_handler_integration.py +0 -0
  601. {querysource-4.5.0 → querysource-4.5.4}/tests/test_scheduler_handler_unit.py +0 -0
  602. {querysource-4.5.0 → querysource-4.5.4}/tests/test_scheduler_integration.py +0 -0
  603. {querysource-4.5.0 → querysource-4.5.4}/tests/test_scheduler_jobs.py +0 -0
  604. {querysource-4.5.0 → querysource-4.5.4}/tests/test_scheduler_multi_routing.py +0 -0
  605. {querysource-4.5.0 → querysource-4.5.4}/tests/test_scheduler_notifications.py +0 -0
  606. {querysource-4.5.0 → querysource-4.5.4}/tests/test_schema_introspectable.py +0 -0
  607. {querysource-4.5.0 → querysource-4.5.4}/tests/test_source_registry.py +0 -0
  608. {querysource-4.5.0 → querysource-4.5.4}/tests/test_source_s3.py +0 -0
  609. {querysource-4.5.0 → querysource-4.5.4}/tests/test_source_sharepoint.py +0 -0
  610. {querysource-4.5.0 → querysource-4.5.4}/tests/test_source_smartsheet.py +0 -0
  611. {querysource-4.5.0 → querysource-4.5.4}/tests/test_source_table.py +0 -0
  612. {querysource-4.5.0 → querysource-4.5.4}/tests/test_sql_parser_combinations.py +0 -0
  613. {querysource-4.5.0 → querysource-4.5.4}/tests/test_texplode.py +0 -0
  614. {querysource-4.5.0 → querysource-4.5.4}/tests/test_thread_file_refactor.py +0 -0
  615. {querysource-4.5.0 → querysource-4.5.4}/tests/test_thread_query_refactor.py +0 -0
  616. {querysource-4.5.0 → querysource-4.5.4}/tests/test_thread_source_base.py +0 -0
  617. {querysource-4.5.0 → querysource-4.5.4}/tests/test_threadquery_executor.py +0 -0
  618. {querysource-4.5.0 → querysource-4.5.4}/tests/test_zammad_search.py +0 -0
  619. {querysource-4.5.0 → querysource-4.5.4}/tests/unit/test_cython_filter_fallback.py +0 -0
  620. {querysource-4.5.0 → querysource-4.5.4}/tests/unit/test_datasource_redaction.py +0 -0
  621. {querysource-4.5.0 → querysource-4.5.4}/tests/unit/test_provider_raw_query_validated.py +0 -0
  622. {querysource-4.5.0 → querysource-4.5.4}/tests/unit/test_qs_parsers_validated.py +0 -0
  623. {querysource-4.5.0 → querysource-4.5.4}/tox.ini +0 -0
@@ -10,6 +10,13 @@ PYTHON_VERSION := 3.11
10
10
  HAS_UV := $(shell command -v uv 2> /dev/null)
11
11
  HAS_PIP := $(shell command -v pip 2> /dev/null)
12
12
 
13
+ # Run maturin via `uv run` so it resolves the project venv (.venv) regardless of
14
+ # whether the venv is activated or on PATH. `--with maturin` ensures the tool is
15
+ # available ephemerally, so no separate `uv pip install maturin` step is needed.
16
+ # (Each Makefile recipe line runs in its own subshell, so installing maturin in
17
+ # one line does not put it on PATH for the next.)
18
+ MATURIN := uv run --with maturin maturin
19
+
13
20
  # Install uv for faster workflows
14
21
  install-uv:
15
22
  curl -LsSf https://astral.sh/uv/install.sh | sh
@@ -45,8 +52,7 @@ develop: build-rust
45
52
  # avoiding the "build-backend not set to maturin" warning emitted when reading the
46
53
  # root pyproject.toml (which uses setuptools for the rest of the project).
47
54
  build-rust:
48
- @command -v maturin >/dev/null 2>&1 || uv pip install maturin
49
- maturin develop --release --manifest-path rust/Cargo.toml
55
+ $(MATURIN) develop --release --manifest-path rust/Cargo.toml
50
56
 
51
57
  # Stage the compiled Rust extension (.so) INTO the source tree so that
52
58
  # `uv build` (setuptools backend) bundles it into the wheel. setuptools only
@@ -56,8 +62,7 @@ build-rust:
56
62
  # tree, so the wheel would otherwise ship without the Rust extension.
57
63
  RUST_WHEEL_OUT := target/wheels
58
64
  stage-rust:
59
- @command -v maturin >/dev/null 2>&1 || uv pip install maturin
60
- maturin build --release -i python --manifest-path rust/Cargo.toml --out $(RUST_WHEEL_OUT)
65
+ $(MATURIN) build --release -i python --manifest-path rust/Cargo.toml --out $(RUST_WHEEL_OUT)
61
66
  @whl=$$(ls -t $(RUST_WHEEL_OUT)/qs_parsers-*.whl | head -1); \
62
67
  test -n "$$whl" || { echo "ERROR: maturin produced no wheel in $(RUST_WHEEL_OUT)"; exit 1; }; \
63
68
  echo "Staging Rust extension from $$whl"; \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: querysource
3
- Version: 4.5.0
3
+ Version: 4.5.4
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
@@ -20,12 +20,13 @@ Classifier: Programming Language :: Python :: 3.9
20
20
  Classifier: Programming Language :: Python :: 3.10
21
21
  Classifier: Programming Language :: Python :: 3.11
22
22
  Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
23
24
  Classifier: License :: OSI Approved :: BSD License
24
25
  Classifier: Framework :: AsyncIO
25
26
  Classifier: Environment :: Web Environment
26
27
  Classifier: Operating System :: OS Independent
27
28
  Classifier: Typing :: Typed
28
- Requires-Python: >=3.10.1
29
+ Requires-Python: <3.14,>=3.10.1
29
30
  Description-Content-Type: text/markdown
30
31
  License-File: LICENSE
31
32
  Requires-Dist: LivePopularTimes==1.3
@@ -55,7 +56,7 @@ Requires-Dist: webdriver-manager>=4.0.2
55
56
  Requires-Dist: playwright==1.52.0
56
57
  Requires-Dist: proxylists>=0.14.0
57
58
  Requires-Dist: async-notify[all]>=1.4.0
58
- Requires-Dist: navconfig[default,uvloop]==2.1.3
59
+ Requires-Dist: navconfig[default,uvloop]>=2.2.0
59
60
  Requires-Dist: navigator-api[locale,uvloop]>=2.12.22
60
61
  Requires-Dist: jsonschema>=4.22.0
61
62
  Requires-Dist: backoff==2.2.1
@@ -78,7 +79,6 @@ Requires-Dist: geopy==2.4.1
78
79
  Requires-Dist: polars==1.27.1
79
80
  Requires-Dist: contextily==1.6.2
80
81
  Requires-Dist: jenkspy==0.4.1
81
- Requires-Dist: timezonefinder==6.5.5
82
82
  Requires-Dist: ipyleaflet==0.19.2
83
83
  Requires-Dist: rapidfuzz==3.11.0
84
84
  Requires-Dist: nltk>=3.9.3
@@ -108,6 +108,8 @@ Requires-Dist: autoviz>=0.1.905; extra == "analytics"
108
108
  Requires-Dist: spacy>=3.8.6; extra == "analytics"
109
109
  Provides-Extra: vectors
110
110
  Requires-Dist: gensim>=4.4.0; extra == "vectors"
111
+ Provides-Extra: geo
112
+ Requires-Dist: timezonefinder; extra == "geo"
111
113
  Provides-Extra: sharepoint
112
114
  Requires-Dist: msgraph-sdk>=1.0; extra == "sharepoint"
113
115
  Requires-Dist: azure-identity>=1.0; extra == "sharepoint"
@@ -4,6 +4,13 @@
4
4
  "description": "Download a single file from a SharePoint document library.",
5
5
  "usage": "Authenticates via Microsoft Graph client credentials (client_id, client_secret, tenant_id) and downloads the specified file from the given SharePoint site and directory path.",
6
6
  "attributes": [
7
+ {
8
+ "name": "url",
9
+ "type": "Any",
10
+ "default": "",
11
+ "required": false,
12
+ "description": ""
13
+ },
7
14
  {
8
15
  "name": "credentials.client_id",
9
16
  "type": "Any",
@@ -73,6 +80,13 @@
73
80
  "default": {},
74
81
  "required": false,
75
82
  "description": ""
83
+ },
84
+ {
85
+ "name": "source.url",
86
+ "type": "Any",
87
+ "default": "",
88
+ "required": false,
89
+ "description": ""
76
90
  }
77
91
  ],
78
92
  "json_schema": {
@@ -80,6 +94,7 @@
80
94
  "type": "object",
81
95
  "title": "SharepointSource",
82
96
  "properties": {
97
+ "url": {},
83
98
  "credentials": {
84
99
  "type": "object",
85
100
  "properties": {
@@ -97,7 +112,8 @@
97
112
  "filename": {},
98
113
  "directory": {},
99
114
  "sheet_name": {},
100
- "pd_args": {}
115
+ "pd_args": {},
116
+ "url": {}
101
117
  }
102
118
  }
103
119
  },
@@ -20,6 +20,7 @@ policies:
20
20
  - "slug:list"
21
21
  - "datasource:use"
22
22
  - "datasource:list"
23
+ - "datasource:read"
23
24
  - "driver:use"
24
25
  - "driver:list"
25
26
  - "raw_query:execute"
@@ -16,7 +16,10 @@ authors = [
16
16
  ]
17
17
  readme = "README.md"
18
18
  license = {text = "BSD-3-Clause"}
19
- requires-python = ">=3.10.1"
19
+ # Upper-bounded at <3.14: Python 3.14 only ships cryptography>=48 (cffi>=2).
20
+ # Without this cap, downstream universal resolvers attempt 3.14 and fail to
21
+ # find a solution.
22
+ requires-python = ">=3.10.1,<3.14"
20
23
  keywords = ["querysource", "database", "query", "aiohttp", "web service"]
21
24
 
22
25
  classifiers = [
@@ -29,6 +32,7 @@ classifiers = [
29
32
  "Programming Language :: Python :: 3.10",
30
33
  "Programming Language :: Python :: 3.11",
31
34
  "Programming Language :: Python :: 3.12",
35
+ "Programming Language :: Python :: 3.13",
32
36
  "License :: OSI Approved :: BSD License",
33
37
  "Framework :: AsyncIO",
34
38
  "Environment :: Web Environment",
@@ -68,7 +72,7 @@ dependencies = [
68
72
  # NAV libraries - using compatible versions
69
73
  "proxylists>=0.14.0",
70
74
  "async-notify[all]>=1.4.0",
71
- "navconfig[default,uvloop]==2.1.3",
75
+ "navconfig[default,uvloop]>=2.2.0",
72
76
  "navigator-api[uvloop,locale]>=2.12.22",
73
77
  "jsonschema>=4.22.0",
74
78
  # Backoff Support
@@ -95,7 +99,9 @@ dependencies = [
95
99
  "polars==1.27.1",
96
100
  "contextily==1.6.2",
97
101
  "jenkspy==0.4.1",
98
- "timezonefinder==6.5.5",
102
+ # timezonefinder lives in the optional [geo] extra: it is only used by the
103
+ # lazily-imported fn_get_timezone helper, so it is opt-in via
104
+ # `pip install querysource[geo]`. See the [geo] extra for its version floor.
99
105
  "ipyleaflet==0.19.2",
100
106
  # Text processing
101
107
  "rapidfuzz==3.11.0",
@@ -133,6 +139,16 @@ vectors = [
133
139
  "gensim>=4.4.0",
134
140
  ]
135
141
 
142
+ geo = [
143
+ # timezonefinder is kept in this optional extra (used only by the
144
+ # lazily-imported fn_get_timezone helper). Left unpinned: navconfig>=2.2.0
145
+ # pulls cryptography>=46.0.7, which requires cffi>=2 on Python>=3.9, so the
146
+ # resolver is transitively forced to timezonefinder>=8.1.0 (the first
147
+ # version that relaxes its hard cffi<2 pin to cffi<3). Older versions pin
148
+ # cffi<2 and would conflict.
149
+ "timezonefinder",
150
+ ]
151
+
136
152
  sharepoint = [
137
153
  "msgraph-sdk>=1.0",
138
154
  "azure-identity>=1.0",
@@ -208,4 +224,4 @@ filterwarnings = [
208
224
  link-mode = "copy"
209
225
 
210
226
  [tool.uv.sources]
211
- # navigator-auth = { path = "../../navigator/navigator-auth", editable = true }
227
+ navigator-auth = { path = "../../navigator/navigator-auth", editable = true }
@@ -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.1.dev0+gfd354d0c9.d20260619'
22
- __version_tuple__ = version_tuple = (4, 5, 1, 'dev0', 'gfd354d0c9.d20260619')
21
+ __version__ = version = '4.5.5.dev0+ge5935df2b.d20260626'
22
+ __version_tuple__ = version_tuple = (4, 5, 5, 'dev0', 'ge5935df2b.d20260626')
23
23
 
24
- __commit_id__ = commit_id = 'gfd354d0c9'
24
+ __commit_id__ = commit_id = 'ge5935df2b'
@@ -14,6 +14,11 @@ from asyncdb.exceptions import (
14
14
  StatementError
15
15
  )
16
16
  from navigator.views import BaseView
17
+ from navigator_session import get_session
18
+ from navigator_auth.decorators import (
19
+ is_authenticated,
20
+ user_session
21
+ )
17
22
  from ...conf import default_dsn
18
23
  from ...utils.functions import anonymize
19
24
  from ...utils.parseqs import ParseDict
@@ -100,11 +105,15 @@ async def _check_datasource_read(request: web.Request, logger=None) -> None:
100
105
  return # PBAC disabled — fast-path no-op
101
106
 
102
107
  # Attempt to extract the user session.
108
+ # Use navigator_session.get_session() — the same proven path as
109
+ # AbstractHandler._get_user_session (handlers/abstract.py:301). The
110
+ # session storage object under ``app['session']`` is NOT the right
111
+ # API here and was silently failing, denying valid sessions.
103
112
  session = None
104
113
  try:
105
- session = await request.app["session"].get_session(request)
106
- except Exception: # pylint: disable=broad-except
107
- pass
114
+ session = await get_session(request, new=False)
115
+ except RuntimeError:
116
+ _log.error("QS: User Session system is not installed.")
108
117
 
109
118
  if session is None:
110
119
  _log.info(
@@ -173,6 +182,7 @@ def _item_get(item, key, default=None):
173
182
  return getattr(item, key, default)
174
183
 
175
184
 
185
+ @user_session()
176
186
  class DatasourceView(BaseView):
177
187
  """API View for managing datasources.
178
188
  """
@@ -43,6 +43,25 @@ class SharepointSource(ThreadSource):
43
43
  "directory": "Shared Documents/General/Schedule"
44
44
  }
45
45
  }
46
+
47
+ Alternatively, pass the full file ``url`` (copied straight from the
48
+ browser/Share dialog — sharing links and subsites included) and the file is
49
+ resolved directly via the Microsoft Graph ``/shares`` endpoint. Only the
50
+ auth credentials are required; ``tenant_name``/``site``/``directory`` are
51
+ not needed::
52
+
53
+ {
54
+ "credentials": {
55
+ "client_id": "SHAREPOINT_APP_ID",
56
+ "client_secret": "SHAREPOINT_APP_SECRET",
57
+ "tenant_id": "SHAREPOINT_TENANT_ID"
58
+ },
59
+ "source": {
60
+ "url": "https://<tenant>.sharepoint.com/:x:/r/sites/<site>/<subsite>/<path>/<file>.xlsx?..."
61
+ }
62
+ }
63
+
64
+ ``sheet_name`` and ``pd_args`` still apply when reading the downloaded file.
46
65
  """
47
66
 
48
67
  def __init__(
@@ -82,6 +101,27 @@ class SharepointSource(ThreadSource):
82
101
  self._sheet_name = source.get('sheet_name', 0)
83
102
  # pd_args: extra kwargs forwarded to pd.read_excel / pd.read_csv (e.g. skiprows, header, usecols).
84
103
  self._pd_args: dict = source.get('pd_args', {})
104
+ # url: full SharePoint file URL, including sharing links such as
105
+ # ".../:x:/r/sites/<site>/<subsite>/<path>/<file>.xlsx?d=...&web=1".
106
+ # When set, the file is resolved directly via the Microsoft Graph
107
+ # /shares endpoint (server-side), so tenant_name/site/directory do NOT
108
+ # need to be configured and subsites work transparently.
109
+ self._url: str = source.get('url', '') or options.get('url', '') or ''
110
+
111
+ @staticmethod
112
+ def _encode_share_url(url: str) -> str:
113
+ """Encode a SharePoint URL into a Graph ``shares`` id.
114
+
115
+ Per https://learn.microsoft.com/graph/api/shares-get the share id is
116
+ ``"u!"`` followed by the unpadded base64url encoding of the UTF-8 URL.
117
+ Works for canonical and sharing URLs alike — Graph resolves the share
118
+ itself, so no client-side path parsing (and no subsite ambiguity) is
119
+ involved.
120
+ """
121
+ import base64 # noqa: PLC0415
122
+
123
+ b64 = base64.urlsafe_b64encode(url.strip().encode('utf-8')).decode('ascii')
124
+ return 'u!' + b64.rstrip('=')
85
125
 
86
126
  def _parse_file_content(self, content: bytes) -> pd.DataFrame:
87
127
  """Parse raw bytes as Excel or CSV depending on the filename extension."""
@@ -115,6 +155,11 @@ class SharepointSource(ThreadSource):
115
155
  **self._pd_args,
116
156
  )
117
157
  df = df.infer_objects()
158
+ # A spreadsheet can yield non-string column names (date/number header
159
+ # cells, or blank/merged headers -> NaN). Those break JSON output
160
+ # ("Dict key must be str") and DB writes, so coerce any non-str header.
161
+ if isinstance(df, pd.DataFrame):
162
+ df.columns = [c if isinstance(c, str) else str(c) for c in df.columns]
118
163
  return df
119
164
 
120
165
  async def fetch(self) -> pd.DataFrame:
@@ -141,12 +186,6 @@ class SharepointSource(ThreadSource):
141
186
  "pip install httpx"
142
187
  ) from exc
143
188
 
144
- if not self._tenant_name or self._tenant_name == 'SHAREPOINT_TENANT_NAME':
145
- raise ValueError(
146
- "SharePoint tenant_name must be configured (via credentials or "
147
- "navconfig SHAREPOINT_TENANT_NAME)."
148
- )
149
-
150
189
  # The msgraph/kiota SDK uses platform.version() to build the User-Agent
151
190
  # header. On Linux the string has a trailing space which httpx rejects
152
191
  # as an illegal header value. Patch it before the client is constructed.
@@ -163,71 +202,93 @@ class SharepointSource(ThreadSource):
163
202
  scopes = ["https://graph.microsoft.com/.default"]
164
203
  client = GraphServiceClient(credentials=credential, scopes=scopes)
165
204
 
166
- # Resolve the site ID
167
- site_host = f"{self._tenant_name}.sharepoint.com" if self._tenant_name else None
168
- if site_host and self._site:
169
- site = await client.sites.by_site_id(
170
- f"{site_host}:/sites/{self._site}:"
171
- ).get()
172
- else:
173
- raise RuntimeError(
174
- "SharePoint tenant_name and site must be specified to locate the site."
205
+ if self._url:
206
+ # Resolve the file directly from its (sharing) URL via /shares.
207
+ # Graph handles subsites, document libraries, folders and
208
+ # sharing-link tokens server-side — nothing is parsed here.
209
+ shares_id = self._encode_share_url(self._url)
210
+ item = await (
211
+ client.shares.by_shared_drive_item_id(shares_id)
212
+ .drive_item.get()
175
213
  )
214
+ if item is None or not getattr(item, 'id', None):
215
+ raise RuntimeError(
216
+ f"Could not resolve SharePoint file from url: {self._url}"
217
+ )
218
+ # Use the resolved item name so extension detection works.
219
+ if not self._filename:
220
+ self._filename = getattr(item, 'name', '') or 'download'
221
+ else:
222
+ if not self._tenant_name or self._tenant_name == 'SHAREPOINT_TENANT_NAME':
223
+ raise ValueError(
224
+ "SharePoint tenant_name must be configured (via credentials "
225
+ "or navconfig SHAREPOINT_TENANT_NAME), or pass a full 'url'."
226
+ )
227
+ # Resolve the site ID
228
+ site_host = f"{self._tenant_name}.sharepoint.com" if self._tenant_name else None
229
+ if site_host and self._site:
230
+ site = await client.sites.by_site_id(
231
+ f"{site_host}:/sites/{self._site}:"
232
+ ).get()
233
+ else:
234
+ raise RuntimeError(
235
+ "SharePoint tenant_name and site must be specified to locate the site."
236
+ )
176
237
 
177
- site_id = site.id
238
+ site_id = site.id
178
239
 
179
- # Get drives (document libraries) for the site
180
- drives_response = await client.sites.by_site_id(site_id).drives.get()
181
- drives = drives_response.value if drives_response else []
240
+ # Get drives (document libraries) for the site
241
+ drives_response = await client.sites.by_site_id(site_id).drives.get()
242
+ drives = drives_response.value if drives_response else []
182
243
 
183
- # Parse directory into (library_name, subfolder).
184
- # Single segment (e.g. "Tests") → Documents library + subfolder "Tests".
185
- # Multi-segment (e.g. "Documents/Tests") → first segment is library,
186
- # rest is subfolder. "Shared Documents" normalised to "Documents".
187
- _dir = (self._directory or '').replace('\\', '/').strip().strip('/')
188
- if not _dir:
189
- library_name, subfolder = 'Documents', ''
190
- else:
191
- _parts = _dir.split('/')
192
- if len(_parts) == 1:
193
- library_name, subfolder = 'Documents', _parts[0]
244
+ # Parse directory into (library_name, subfolder).
245
+ # Single segment (e.g. "Tests") → Documents library + subfolder "Tests".
246
+ # Multi-segment (e.g. "Documents/Tests") → first segment is library,
247
+ # rest is subfolder. "Shared Documents" normalised to "Documents".
248
+ _dir = (self._directory or '').replace('\\', '/').strip().strip('/')
249
+ if not _dir:
250
+ library_name, subfolder = 'Documents', ''
194
251
  else:
195
- library_name = _parts[0]
196
- subfolder = '/'.join(_parts[1:])
197
- if library_name.lower() == 'shared documents':
198
- library_name = 'Documents'
199
-
200
- # Find the matching drive (case-insensitive)
201
- drive = None
202
- for d in drives:
203
- if d.name and d.name.lower() == library_name.lower():
204
- drive = d
205
- break
206
- if drive is None and drives:
207
- drive = drives[0] # fallback to first drive
208
-
209
- if drive is None:
210
- raise RuntimeError(
211
- f"No document library found for site '{self._site}' "
212
- f"matching '{library_name}'."
213
- )
252
+ _parts = _dir.split('/')
253
+ if len(_parts) == 1:
254
+ library_name, subfolder = 'Documents', _parts[0]
255
+ else:
256
+ library_name = _parts[0]
257
+ subfolder = '/'.join(_parts[1:])
258
+ if library_name.lower() == 'shared documents':
259
+ library_name = 'Documents'
214
260
 
215
- drive_id = drive.id
261
+ # Find the matching drive (case-insensitive)
262
+ drive = None
263
+ for d in drives:
264
+ if d.name and d.name.lower() == library_name.lower():
265
+ drive = d
266
+ break
267
+ if drive is None and drives:
268
+ drive = drives[0] # fallback to first drive
216
269
 
217
- # Navigate to the subfolder and find the file
218
- file_path = f"{subfolder.rstrip('/')}/{self._filename}" if subfolder else self._filename
219
- item = await (
220
- client.drives.by_drive_id(drive_id)
221
- .items.by_drive_item_id(f"root:/{file_path}:")
222
- .get()
223
- )
270
+ if drive is None:
271
+ raise RuntimeError(
272
+ f"No document library found for site '{self._site}' "
273
+ f"matching '{library_name}'."
274
+ )
224
275
 
225
- if item is None or not hasattr(item, 'id'):
226
- raise RuntimeError(
227
- f"File '{self._filename}' not found in SharePoint directory "
228
- f"'{self._directory}'."
276
+ drive_id = drive.id
277
+
278
+ # Navigate to the subfolder and find the file
279
+ file_path = f"{subfolder.rstrip('/')}/{self._filename}" if subfolder else self._filename
280
+ item = await (
281
+ client.drives.by_drive_id(drive_id)
282
+ .items.by_drive_item_id(f"root:/{file_path}:")
283
+ .get()
229
284
  )
230
285
 
286
+ if item is None or not hasattr(item, 'id'):
287
+ raise RuntimeError(
288
+ f"File '{self._filename}' not found in SharePoint directory "
289
+ f"'{self._directory}'."
290
+ )
291
+
231
292
  # Get the download URL from the item's additional data
232
293
  download_url = (
233
294
  item.additional_data.get('@microsoft.graph.downloadUrl')
@@ -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.0'
9
+ __version__ = '4.5.4'
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.0
3
+ Version: 4.5.4
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
@@ -20,12 +20,13 @@ Classifier: Programming Language :: Python :: 3.9
20
20
  Classifier: Programming Language :: Python :: 3.10
21
21
  Classifier: Programming Language :: Python :: 3.11
22
22
  Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
23
24
  Classifier: License :: OSI Approved :: BSD License
24
25
  Classifier: Framework :: AsyncIO
25
26
  Classifier: Environment :: Web Environment
26
27
  Classifier: Operating System :: OS Independent
27
28
  Classifier: Typing :: Typed
28
- Requires-Python: >=3.10.1
29
+ Requires-Python: <3.14,>=3.10.1
29
30
  Description-Content-Type: text/markdown
30
31
  License-File: LICENSE
31
32
  Requires-Dist: LivePopularTimes==1.3
@@ -55,7 +56,7 @@ Requires-Dist: webdriver-manager>=4.0.2
55
56
  Requires-Dist: playwright==1.52.0
56
57
  Requires-Dist: proxylists>=0.14.0
57
58
  Requires-Dist: async-notify[all]>=1.4.0
58
- Requires-Dist: navconfig[default,uvloop]==2.1.3
59
+ Requires-Dist: navconfig[default,uvloop]>=2.2.0
59
60
  Requires-Dist: navigator-api[locale,uvloop]>=2.12.22
60
61
  Requires-Dist: jsonschema>=4.22.0
61
62
  Requires-Dist: backoff==2.2.1
@@ -78,7 +79,6 @@ Requires-Dist: geopy==2.4.1
78
79
  Requires-Dist: polars==1.27.1
79
80
  Requires-Dist: contextily==1.6.2
80
81
  Requires-Dist: jenkspy==0.4.1
81
- Requires-Dist: timezonefinder==6.5.5
82
82
  Requires-Dist: ipyleaflet==0.19.2
83
83
  Requires-Dist: rapidfuzz==3.11.0
84
84
  Requires-Dist: nltk>=3.9.3
@@ -108,6 +108,8 @@ Requires-Dist: autoviz>=0.1.905; extra == "analytics"
108
108
  Requires-Dist: spacy>=3.8.6; extra == "analytics"
109
109
  Provides-Extra: vectors
110
110
  Requires-Dist: gensim>=4.4.0; extra == "vectors"
111
+ Provides-Extra: geo
112
+ Requires-Dist: timezonefinder; extra == "geo"
111
113
  Provides-Extra: sharepoint
112
114
  Requires-Dist: msgraph-sdk>=1.0; extra == "sharepoint"
113
115
  Requires-Dist: azure-identity>=1.0; extra == "sharepoint"
@@ -125,6 +125,8 @@ querysource.egg-info/dependency_links.txt
125
125
  querysource.egg-info/entry_points.txt
126
126
  querysource.egg-info/not-zip-safe
127
127
  querysource.egg-info/requires.txt
128
+ querysource.egg-info/scm_file_list.json
129
+ querysource.egg-info/scm_version.json
128
130
  querysource.egg-info/top_level.txt
129
131
  querysource/auth/__init__.py
130
132
  querysource/auth/_resource_types.py
@@ -587,6 +589,7 @@ tests/handlers/conftest.py
587
589
  tests/handlers/test_abstract_pbac_helpers.py
588
590
  tests/handlers/test_airtable_oauth.py
589
591
  tests/handlers/test_multiquery_pbac_smoke.py
592
+ tests/handlers/test_query_param_exclusion.py
590
593
  tests/handlers/test_queryexecutor_pbac_smoke.py
591
594
  tests/handlers/test_querymanager_pagination.py
592
595
  tests/handlers/test_queryservice_pbac_smoke.py
@@ -25,7 +25,7 @@ webdriver-manager>=4.0.2
25
25
  playwright==1.52.0
26
26
  proxylists>=0.14.0
27
27
  async-notify[all]>=1.4.0
28
- navconfig[default,uvloop]==2.1.3
28
+ navconfig[default,uvloop]>=2.2.0
29
29
  navigator-api[locale,uvloop]>=2.12.22
30
30
  jsonschema>=4.22.0
31
31
  backoff==2.2.1
@@ -48,7 +48,6 @@ geopy==2.4.1
48
48
  polars==1.27.1
49
49
  contextily==1.6.2
50
50
  jenkspy==0.4.1
51
- timezonefinder==6.5.5
52
51
  ipyleaflet==0.19.2
53
52
  rapidfuzz==3.11.0
54
53
  nltk>=3.9.3
@@ -86,6 +85,9 @@ pytest-xdist==3.3.1
86
85
  pytest-assume==2.4.3
87
86
  ruff>=0.6.0
88
87
 
88
+ [geo]
89
+ timezonefinder
90
+
89
91
  [s3]
90
92
  aioboto3>=12.0
91
93