truthound 1.1.1__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 (1291) hide show
  1. truthound-1.1.1/.github/INTEGRATION_TEST_SETUP.md +162 -0
  2. truthound-1.1.1/.github/workflows/integration-tests.yml +448 -0
  3. truthound-1.1.1/.gitignore +98 -0
  4. truthound-1.1.1/LICENSE +190 -0
  5. truthound-1.1.1/PKG-INFO +453 -0
  6. truthound-1.1.1/README.md +359 -0
  7. truthound-1.1.1/docs/ADVANCED.md +772 -0
  8. truthound-1.1.1/docs/API_REFERENCE.md +938 -0
  9. truthound-1.1.1/docs/ARCHITECTURE.md +834 -0
  10. truthound-1.1.1/docs/CHECKPOINT.md +1306 -0
  11. truthound-1.1.1/docs/DATADOCS.md +988 -0
  12. truthound-1.1.1/docs/DATASOURCES.md +773 -0
  13. truthound-1.1.1/docs/DATASOURCES_ARCHITECTURE.md +663 -0
  14. truthound-1.1.1/docs/EXAMPLES.md +1223 -0
  15. truthound-1.1.1/docs/GETTING_STARTED.md +592 -0
  16. truthound-1.1.1/docs/PERFORMANCE.md +756 -0
  17. truthound-1.1.1/docs/PLUGINS.md +565 -0
  18. truthound-1.1.1/docs/PROFILER.md +1087 -0
  19. truthound-1.1.1/docs/REPORTERS.md +656 -0
  20. truthound-1.1.1/docs/STATISTICAL_METHODS.md +660 -0
  21. truthound-1.1.1/docs/STORES.md +1100 -0
  22. truthound-1.1.1/docs/TEST_COVERAGE.md +390 -0
  23. truthound-1.1.1/docs/VALIDATORS.md +2367 -0
  24. truthound-1.1.1/docs/api-reference/index.md +136 -0
  25. truthound-1.1.1/docs/assets/truthound_banner.png +0 -0
  26. truthound-1.1.1/docs/assets/truthound_icon.png +0 -0
  27. truthound-1.1.1/docs/getting-started/first-validation.md +258 -0
  28. truthound-1.1.1/docs/getting-started/index.md +60 -0
  29. truthound-1.1.1/docs/getting-started/installation.md +124 -0
  30. truthound-1.1.1/docs/getting-started/quickstart.md +182 -0
  31. truthound-1.1.1/docs/index.md +139 -0
  32. truthound-1.1.1/docs/orchestration/.gitkeep +2 -0
  33. truthound-1.1.1/docs/scripts/gen_cli_docs.py +193 -0
  34. truthound-1.1.1/docs/scripts/gen_ref_pages.py +167 -0
  35. truthound-1.1.1/docs/stylesheets/extra.css +14 -0
  36. truthound-1.1.1/docs/tutorials/custom-validator.md +339 -0
  37. truthound-1.1.1/docs/tutorials/index.md +41 -0
  38. truthound-1.1.1/docs/user-guide/cli-reference.md +684 -0
  39. truthound-1.1.1/docs/user-guide/index.md +90 -0
  40. truthound-1.1.1/mkdocs.yml +229 -0
  41. truthound-1.1.1/netlify.toml +21 -0
  42. truthound-1.1.1/pyproject.toml +218 -0
  43. truthound-1.1.1/schema.yaml +10 -0
  44. truthound-1.1.1/scripts/fetch-external-docs.sh +115 -0
  45. truthound-1.1.1/src/truthound/__init__.py +238 -0
  46. truthound-1.1.1/src/truthound/_lazy.py +239 -0
  47. truthound-1.1.1/src/truthound/adapters.py +100 -0
  48. truthound-1.1.1/src/truthound/api.py +511 -0
  49. truthound-1.1.1/src/truthound/audit/__init__.py +248 -0
  50. truthound-1.1.1/src/truthound/audit/core.py +967 -0
  51. truthound-1.1.1/src/truthound/audit/filters.py +620 -0
  52. truthound-1.1.1/src/truthound/audit/formatters.py +707 -0
  53. truthound-1.1.1/src/truthound/audit/logger.py +902 -0
  54. truthound-1.1.1/src/truthound/audit/middleware.py +571 -0
  55. truthound-1.1.1/src/truthound/audit/storage.py +1083 -0
  56. truthound-1.1.1/src/truthound/benchmark/__init__.py +123 -0
  57. truthound-1.1.1/src/truthound/benchmark/base.py +757 -0
  58. truthound-1.1.1/src/truthound/benchmark/comparison.py +635 -0
  59. truthound-1.1.1/src/truthound/benchmark/generators.py +706 -0
  60. truthound-1.1.1/src/truthound/benchmark/reporters.py +718 -0
  61. truthound-1.1.1/src/truthound/benchmark/runner.py +635 -0
  62. truthound-1.1.1/src/truthound/benchmark/scenarios.py +712 -0
  63. truthound-1.1.1/src/truthound/cache.py +285 -0
  64. truthound-1.1.1/src/truthound/checkpoint/__init__.py +232 -0
  65. truthound-1.1.1/src/truthound/checkpoint/actions/__init__.py +164 -0
  66. truthound-1.1.1/src/truthound/checkpoint/actions/base.py +324 -0
  67. truthound-1.1.1/src/truthound/checkpoint/actions/custom.py +234 -0
  68. truthound-1.1.1/src/truthound/checkpoint/actions/discord_notify.py +290 -0
  69. truthound-1.1.1/src/truthound/checkpoint/actions/email_notify.py +405 -0
  70. truthound-1.1.1/src/truthound/checkpoint/actions/github_action.py +406 -0
  71. truthound-1.1.1/src/truthound/checkpoint/actions/opsgenie.py +1499 -0
  72. truthound-1.1.1/src/truthound/checkpoint/actions/pagerduty.py +226 -0
  73. truthound-1.1.1/src/truthound/checkpoint/actions/slack_notify.py +233 -0
  74. truthound-1.1.1/src/truthound/checkpoint/actions/store_result.py +249 -0
  75. truthound-1.1.1/src/truthound/checkpoint/actions/teams_notify.py +1570 -0
  76. truthound-1.1.1/src/truthound/checkpoint/actions/telegram_notify.py +419 -0
  77. truthound-1.1.1/src/truthound/checkpoint/actions/update_docs.py +552 -0
  78. truthound-1.1.1/src/truthound/checkpoint/actions/webhook.py +293 -0
  79. truthound-1.1.1/src/truthound/checkpoint/analytics/__init__.py +147 -0
  80. truthound-1.1.1/src/truthound/checkpoint/analytics/aggregations/__init__.py +23 -0
  81. truthound-1.1.1/src/truthound/checkpoint/analytics/aggregations/rollup.py +481 -0
  82. truthound-1.1.1/src/truthound/checkpoint/analytics/aggregations/time_bucket.py +306 -0
  83. truthound-1.1.1/src/truthound/checkpoint/analytics/analyzers/__init__.py +17 -0
  84. truthound-1.1.1/src/truthound/checkpoint/analytics/analyzers/anomaly.py +386 -0
  85. truthound-1.1.1/src/truthound/checkpoint/analytics/analyzers/base.py +270 -0
  86. truthound-1.1.1/src/truthound/checkpoint/analytics/analyzers/forecast.py +421 -0
  87. truthound-1.1.1/src/truthound/checkpoint/analytics/analyzers/trend.py +314 -0
  88. truthound-1.1.1/src/truthound/checkpoint/analytics/models.py +292 -0
  89. truthound-1.1.1/src/truthound/checkpoint/analytics/protocols.py +549 -0
  90. truthound-1.1.1/src/truthound/checkpoint/analytics/service.py +718 -0
  91. truthound-1.1.1/src/truthound/checkpoint/analytics/stores/__init__.py +16 -0
  92. truthound-1.1.1/src/truthound/checkpoint/analytics/stores/base.py +306 -0
  93. truthound-1.1.1/src/truthound/checkpoint/analytics/stores/memory_store.py +353 -0
  94. truthound-1.1.1/src/truthound/checkpoint/analytics/stores/sqlite_store.py +557 -0
  95. truthound-1.1.1/src/truthound/checkpoint/analytics/stores/timescale_store.py +501 -0
  96. truthound-1.1.1/src/truthound/checkpoint/async_actions.py +794 -0
  97. truthound-1.1.1/src/truthound/checkpoint/async_base.py +708 -0
  98. truthound-1.1.1/src/truthound/checkpoint/async_checkpoint.py +617 -0
  99. truthound-1.1.1/src/truthound/checkpoint/async_runner.py +639 -0
  100. truthound-1.1.1/src/truthound/checkpoint/checkpoint.py +678 -0
  101. truthound-1.1.1/src/truthound/checkpoint/ci/__init__.py +61 -0
  102. truthound-1.1.1/src/truthound/checkpoint/ci/detector.py +355 -0
  103. truthound-1.1.1/src/truthound/checkpoint/ci/reporter.py +436 -0
  104. truthound-1.1.1/src/truthound/checkpoint/ci/templates.py +454 -0
  105. truthound-1.1.1/src/truthound/checkpoint/circuitbreaker/__init__.py +133 -0
  106. truthound-1.1.1/src/truthound/checkpoint/circuitbreaker/breaker.py +542 -0
  107. truthound-1.1.1/src/truthound/checkpoint/circuitbreaker/core.py +252 -0
  108. truthound-1.1.1/src/truthound/checkpoint/circuitbreaker/detection.py +459 -0
  109. truthound-1.1.1/src/truthound/checkpoint/circuitbreaker/middleware.py +389 -0
  110. truthound-1.1.1/src/truthound/checkpoint/circuitbreaker/registry.py +357 -0
  111. truthound-1.1.1/src/truthound/checkpoint/deduplication/__init__.py +92 -0
  112. truthound-1.1.1/src/truthound/checkpoint/deduplication/middleware.py +529 -0
  113. truthound-1.1.1/src/truthound/checkpoint/deduplication/processor.py +500 -0
  114. truthound-1.1.1/src/truthound/checkpoint/deduplication/protocols.py +575 -0
  115. truthound-1.1.1/src/truthound/checkpoint/deduplication/service.py +629 -0
  116. truthound-1.1.1/src/truthound/checkpoint/deduplication/stores.py +618 -0
  117. truthound-1.1.1/src/truthound/checkpoint/distributed/__init__.py +139 -0
  118. truthound-1.1.1/src/truthound/checkpoint/distributed/backends/__init__.py +35 -0
  119. truthound-1.1.1/src/truthound/checkpoint/distributed/backends/celery_backend.py +503 -0
  120. truthound-1.1.1/src/truthound/checkpoint/distributed/backends/kubernetes_backend.py +696 -0
  121. truthound-1.1.1/src/truthound/checkpoint/distributed/backends/local_backend.py +397 -0
  122. truthound-1.1.1/src/truthound/checkpoint/distributed/backends/ray_backend.py +625 -0
  123. truthound-1.1.1/src/truthound/checkpoint/distributed/base.py +774 -0
  124. truthound-1.1.1/src/truthound/checkpoint/distributed/orchestrator.py +765 -0
  125. truthound-1.1.1/src/truthound/checkpoint/distributed/protocols.py +842 -0
  126. truthound-1.1.1/src/truthound/checkpoint/distributed/registry.py +449 -0
  127. truthound-1.1.1/src/truthound/checkpoint/escalation/__init__.py +129 -0
  128. truthound-1.1.1/src/truthound/checkpoint/escalation/engine.py +1050 -0
  129. truthound-1.1.1/src/truthound/checkpoint/escalation/integration.py +618 -0
  130. truthound-1.1.1/src/truthound/checkpoint/escalation/protocols.py +864 -0
  131. truthound-1.1.1/src/truthound/checkpoint/escalation/scheduler.py +752 -0
  132. truthound-1.1.1/src/truthound/checkpoint/escalation/states.py +738 -0
  133. truthound-1.1.1/src/truthound/checkpoint/escalation/stores.py +711 -0
  134. truthound-1.1.1/src/truthound/checkpoint/idempotency/__init__.py +120 -0
  135. truthound-1.1.1/src/truthound/checkpoint/idempotency/core.py +295 -0
  136. truthound-1.1.1/src/truthound/checkpoint/idempotency/fingerprint.py +454 -0
  137. truthound-1.1.1/src/truthound/checkpoint/idempotency/locking.py +604 -0
  138. truthound-1.1.1/src/truthound/checkpoint/idempotency/service.py +592 -0
  139. truthound-1.1.1/src/truthound/checkpoint/idempotency/stores.py +653 -0
  140. truthound-1.1.1/src/truthound/checkpoint/monitoring/__init__.py +134 -0
  141. truthound-1.1.1/src/truthound/checkpoint/monitoring/aggregators/__init__.py +15 -0
  142. truthound-1.1.1/src/truthound/checkpoint/monitoring/aggregators/base.py +372 -0
  143. truthound-1.1.1/src/truthound/checkpoint/monitoring/aggregators/realtime.py +300 -0
  144. truthound-1.1.1/src/truthound/checkpoint/monitoring/aggregators/window.py +493 -0
  145. truthound-1.1.1/src/truthound/checkpoint/monitoring/collectors/__init__.py +17 -0
  146. truthound-1.1.1/src/truthound/checkpoint/monitoring/collectors/base.py +257 -0
  147. truthound-1.1.1/src/truthound/checkpoint/monitoring/collectors/memory_collector.py +617 -0
  148. truthound-1.1.1/src/truthound/checkpoint/monitoring/collectors/prometheus_collector.py +451 -0
  149. truthound-1.1.1/src/truthound/checkpoint/monitoring/collectors/redis_collector.py +518 -0
  150. truthound-1.1.1/src/truthound/checkpoint/monitoring/events.py +410 -0
  151. truthound-1.1.1/src/truthound/checkpoint/monitoring/protocols.py +636 -0
  152. truthound-1.1.1/src/truthound/checkpoint/monitoring/service.py +578 -0
  153. truthound-1.1.1/src/truthound/checkpoint/monitoring/views/__init__.py +17 -0
  154. truthound-1.1.1/src/truthound/checkpoint/monitoring/views/base.py +172 -0
  155. truthound-1.1.1/src/truthound/checkpoint/monitoring/views/queue_view.py +220 -0
  156. truthound-1.1.1/src/truthound/checkpoint/monitoring/views/task_view.py +240 -0
  157. truthound-1.1.1/src/truthound/checkpoint/monitoring/views/worker_view.py +263 -0
  158. truthound-1.1.1/src/truthound/checkpoint/registry.py +337 -0
  159. truthound-1.1.1/src/truthound/checkpoint/routing/__init__.py +96 -0
  160. truthound-1.1.1/src/truthound/checkpoint/routing/base.py +536 -0
  161. truthound-1.1.1/src/truthound/checkpoint/routing/combinators.py +496 -0
  162. truthound-1.1.1/src/truthound/checkpoint/routing/config.py +802 -0
  163. truthound-1.1.1/src/truthound/checkpoint/routing/engine.py +663 -0
  164. truthound-1.1.1/src/truthound/checkpoint/routing/rules.py +798 -0
  165. truthound-1.1.1/src/truthound/checkpoint/runner.py +356 -0
  166. truthound-1.1.1/src/truthound/checkpoint/throttling/__init__.py +106 -0
  167. truthound-1.1.1/src/truthound/checkpoint/throttling/middleware.py +485 -0
  168. truthound-1.1.1/src/truthound/checkpoint/throttling/protocols.py +632 -0
  169. truthound-1.1.1/src/truthound/checkpoint/throttling/service.py +744 -0
  170. truthound-1.1.1/src/truthound/checkpoint/throttling/stores.py +438 -0
  171. truthound-1.1.1/src/truthound/checkpoint/throttling/throttlers.py +733 -0
  172. truthound-1.1.1/src/truthound/checkpoint/transaction/__init__.py +133 -0
  173. truthound-1.1.1/src/truthound/checkpoint/transaction/base.py +389 -0
  174. truthound-1.1.1/src/truthound/checkpoint/transaction/compensatable.py +537 -0
  175. truthound-1.1.1/src/truthound/checkpoint/transaction/coordinator.py +576 -0
  176. truthound-1.1.1/src/truthound/checkpoint/transaction/executor.py +622 -0
  177. truthound-1.1.1/src/truthound/checkpoint/transaction/idempotency.py +534 -0
  178. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/__init__.py +143 -0
  179. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/builder.py +584 -0
  180. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/definition.py +515 -0
  181. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/event_store.py +542 -0
  182. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/patterns.py +833 -0
  183. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/runner.py +718 -0
  184. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/state_machine.py +793 -0
  185. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/strategies.py +780 -0
  186. truthound-1.1.1/src/truthound/checkpoint/transaction/saga/testing.py +886 -0
  187. truthound-1.1.1/src/truthound/checkpoint/triggers/__init__.py +58 -0
  188. truthound-1.1.1/src/truthound/checkpoint/triggers/base.py +237 -0
  189. truthound-1.1.1/src/truthound/checkpoint/triggers/event.py +385 -0
  190. truthound-1.1.1/src/truthound/checkpoint/triggers/schedule.py +355 -0
  191. truthound-1.1.1/src/truthound/cli.py +2391 -0
  192. truthound-1.1.1/src/truthound/cli_modules/__init__.py +124 -0
  193. truthound-1.1.1/src/truthound/cli_modules/advanced/__init__.py +45 -0
  194. truthound-1.1.1/src/truthound/cli_modules/advanced/benchmark.py +341 -0
  195. truthound-1.1.1/src/truthound/cli_modules/advanced/docs.py +225 -0
  196. truthound-1.1.1/src/truthound/cli_modules/advanced/lineage.py +209 -0
  197. truthound-1.1.1/src/truthound/cli_modules/advanced/ml.py +320 -0
  198. truthound-1.1.1/src/truthound/cli_modules/advanced/realtime.py +348 -0
  199. truthound-1.1.1/src/truthound/cli_modules/checkpoint/__init__.py +46 -0
  200. truthound-1.1.1/src/truthound/cli_modules/checkpoint/init.py +141 -0
  201. truthound-1.1.1/src/truthound/cli_modules/checkpoint/list.py +71 -0
  202. truthound-1.1.1/src/truthound/cli_modules/checkpoint/run.py +163 -0
  203. truthound-1.1.1/src/truthound/cli_modules/checkpoint/validate.py +253 -0
  204. truthound-1.1.1/src/truthound/cli_modules/common/__init__.py +71 -0
  205. truthound-1.1.1/src/truthound/cli_modules/common/errors.py +414 -0
  206. truthound-1.1.1/src/truthound/cli_modules/common/options.py +419 -0
  207. truthound-1.1.1/src/truthound/cli_modules/common/output.py +507 -0
  208. truthound-1.1.1/src/truthound/cli_modules/common/protocol.py +550 -0
  209. truthound-1.1.1/src/truthound/cli_modules/core/__init__.py +48 -0
  210. truthound-1.1.1/src/truthound/cli_modules/core/check.py +130 -0
  211. truthound-1.1.1/src/truthound/cli_modules/core/compare.py +104 -0
  212. truthound-1.1.1/src/truthound/cli_modules/core/learn.py +57 -0
  213. truthound-1.1.1/src/truthound/cli_modules/core/mask.py +96 -0
  214. truthound-1.1.1/src/truthound/cli_modules/core/profile.py +77 -0
  215. truthound-1.1.1/src/truthound/cli_modules/core/scan.py +90 -0
  216. truthound-1.1.1/src/truthound/cli_modules/profiler/__init__.py +51 -0
  217. truthound-1.1.1/src/truthound/cli_modules/profiler/auto_profile.py +175 -0
  218. truthound-1.1.1/src/truthound/cli_modules/profiler/metadata.py +107 -0
  219. truthound-1.1.1/src/truthound/cli_modules/profiler/suite.py +283 -0
  220. truthound-1.1.1/src/truthound/cli_modules/registry.py +431 -0
  221. truthound-1.1.1/src/truthound/cli_modules/scaffolding/__init__.py +89 -0
  222. truthound-1.1.1/src/truthound/cli_modules/scaffolding/base.py +631 -0
  223. truthound-1.1.1/src/truthound/cli_modules/scaffolding/commands.py +545 -0
  224. truthound-1.1.1/src/truthound/cli_modules/scaffolding/plugins.py +1072 -0
  225. truthound-1.1.1/src/truthound/cli_modules/scaffolding/reporters.py +594 -0
  226. truthound-1.1.1/src/truthound/cli_modules/scaffolding/validators.py +1127 -0
  227. truthound-1.1.1/src/truthound/common/__init__.py +18 -0
  228. truthound-1.1.1/src/truthound/common/resilience/__init__.py +130 -0
  229. truthound-1.1.1/src/truthound/common/resilience/bulkhead.py +266 -0
  230. truthound-1.1.1/src/truthound/common/resilience/circuit_breaker.py +516 -0
  231. truthound-1.1.1/src/truthound/common/resilience/composite.py +332 -0
  232. truthound-1.1.1/src/truthound/common/resilience/config.py +292 -0
  233. truthound-1.1.1/src/truthound/common/resilience/protocols.py +217 -0
  234. truthound-1.1.1/src/truthound/common/resilience/rate_limiter.py +404 -0
  235. truthound-1.1.1/src/truthound/common/resilience/retry.py +341 -0
  236. truthound-1.1.1/src/truthound/datadocs/__init__.py +260 -0
  237. truthound-1.1.1/src/truthound/datadocs/base.py +571 -0
  238. truthound-1.1.1/src/truthound/datadocs/builder.py +761 -0
  239. truthound-1.1.1/src/truthound/datadocs/charts.py +764 -0
  240. truthound-1.1.1/src/truthound/datadocs/dashboard/__init__.py +63 -0
  241. truthound-1.1.1/src/truthound/datadocs/dashboard/app.py +576 -0
  242. truthound-1.1.1/src/truthound/datadocs/dashboard/components.py +584 -0
  243. truthound-1.1.1/src/truthound/datadocs/dashboard/state.py +240 -0
  244. truthound-1.1.1/src/truthound/datadocs/engine/__init__.py +46 -0
  245. truthound-1.1.1/src/truthound/datadocs/engine/context.py +376 -0
  246. truthound-1.1.1/src/truthound/datadocs/engine/pipeline.py +618 -0
  247. truthound-1.1.1/src/truthound/datadocs/engine/registry.py +469 -0
  248. truthound-1.1.1/src/truthound/datadocs/exporters/__init__.py +49 -0
  249. truthound-1.1.1/src/truthound/datadocs/exporters/base.py +198 -0
  250. truthound-1.1.1/src/truthound/datadocs/exporters/html.py +178 -0
  251. truthound-1.1.1/src/truthound/datadocs/exporters/json_exporter.py +253 -0
  252. truthound-1.1.1/src/truthound/datadocs/exporters/markdown.py +284 -0
  253. truthound-1.1.1/src/truthound/datadocs/exporters/pdf.py +392 -0
  254. truthound-1.1.1/src/truthound/datadocs/i18n/__init__.py +87 -0
  255. truthound-1.1.1/src/truthound/datadocs/i18n/catalog.py +960 -0
  256. truthound-1.1.1/src/truthound/datadocs/i18n/formatting.py +505 -0
  257. truthound-1.1.1/src/truthound/datadocs/i18n/loader.py +256 -0
  258. truthound-1.1.1/src/truthound/datadocs/i18n/plurals.py +378 -0
  259. truthound-1.1.1/src/truthound/datadocs/renderers/__init__.py +42 -0
  260. truthound-1.1.1/src/truthound/datadocs/renderers/base.py +401 -0
  261. truthound-1.1.1/src/truthound/datadocs/renderers/custom.py +342 -0
  262. truthound-1.1.1/src/truthound/datadocs/renderers/jinja.py +697 -0
  263. truthound-1.1.1/src/truthound/datadocs/sections.py +736 -0
  264. truthound-1.1.1/src/truthound/datadocs/styles.py +931 -0
  265. truthound-1.1.1/src/truthound/datadocs/themes/__init__.py +101 -0
  266. truthound-1.1.1/src/truthound/datadocs/themes/base.py +336 -0
  267. truthound-1.1.1/src/truthound/datadocs/themes/default.py +417 -0
  268. truthound-1.1.1/src/truthound/datadocs/themes/enterprise.py +419 -0
  269. truthound-1.1.1/src/truthound/datadocs/themes/loader.py +336 -0
  270. truthound-1.1.1/src/truthound/datadocs/themes.py +301 -0
  271. truthound-1.1.1/src/truthound/datadocs/transformers/__init__.py +57 -0
  272. truthound-1.1.1/src/truthound/datadocs/transformers/base.py +268 -0
  273. truthound-1.1.1/src/truthound/datadocs/transformers/enrichers.py +544 -0
  274. truthound-1.1.1/src/truthound/datadocs/transformers/filters.py +447 -0
  275. truthound-1.1.1/src/truthound/datadocs/transformers/i18n.py +468 -0
  276. truthound-1.1.1/src/truthound/datadocs/versioning/__init__.py +62 -0
  277. truthound-1.1.1/src/truthound/datadocs/versioning/diff.py +639 -0
  278. truthound-1.1.1/src/truthound/datadocs/versioning/storage.py +497 -0
  279. truthound-1.1.1/src/truthound/datadocs/versioning/version.py +358 -0
  280. truthound-1.1.1/src/truthound/datasources/__init__.py +223 -0
  281. truthound-1.1.1/src/truthound/datasources/_async_protocols.py +222 -0
  282. truthound-1.1.1/src/truthound/datasources/_protocols.py +159 -0
  283. truthound-1.1.1/src/truthound/datasources/adapters.py +428 -0
  284. truthound-1.1.1/src/truthound/datasources/async_base.py +599 -0
  285. truthound-1.1.1/src/truthound/datasources/async_factory.py +511 -0
  286. truthound-1.1.1/src/truthound/datasources/base.py +516 -0
  287. truthound-1.1.1/src/truthound/datasources/factory.py +433 -0
  288. truthound-1.1.1/src/truthound/datasources/nosql/__init__.py +47 -0
  289. truthound-1.1.1/src/truthound/datasources/nosql/base.py +487 -0
  290. truthound-1.1.1/src/truthound/datasources/nosql/elasticsearch.py +801 -0
  291. truthound-1.1.1/src/truthound/datasources/nosql/mongodb.py +636 -0
  292. truthound-1.1.1/src/truthound/datasources/pandas_optimized.py +582 -0
  293. truthound-1.1.1/src/truthound/datasources/pandas_source.py +216 -0
  294. truthound-1.1.1/src/truthound/datasources/polars_source.py +395 -0
  295. truthound-1.1.1/src/truthound/datasources/spark_source.py +479 -0
  296. truthound-1.1.1/src/truthound/datasources/sql/__init__.py +154 -0
  297. truthound-1.1.1/src/truthound/datasources/sql/base.py +710 -0
  298. truthound-1.1.1/src/truthound/datasources/sql/bigquery.py +410 -0
  299. truthound-1.1.1/src/truthound/datasources/sql/cloud_base.py +199 -0
  300. truthound-1.1.1/src/truthound/datasources/sql/databricks.py +471 -0
  301. truthound-1.1.1/src/truthound/datasources/sql/mysql.py +316 -0
  302. truthound-1.1.1/src/truthound/datasources/sql/oracle.py +427 -0
  303. truthound-1.1.1/src/truthound/datasources/sql/postgresql.py +321 -0
  304. truthound-1.1.1/src/truthound/datasources/sql/redshift.py +479 -0
  305. truthound-1.1.1/src/truthound/datasources/sql/snowflake.py +439 -0
  306. truthound-1.1.1/src/truthound/datasources/sql/sqlite.py +286 -0
  307. truthound-1.1.1/src/truthound/datasources/sql/sqlserver.py +437 -0
  308. truthound-1.1.1/src/truthound/datasources/streaming/__init__.py +47 -0
  309. truthound-1.1.1/src/truthound/datasources/streaming/base.py +350 -0
  310. truthound-1.1.1/src/truthound/datasources/streaming/kafka.py +670 -0
  311. truthound-1.1.1/src/truthound/decorators.py +98 -0
  312. truthound-1.1.1/src/truthound/docs/__init__.py +69 -0
  313. truthound-1.1.1/src/truthound/docs/extractor.py +971 -0
  314. truthound-1.1.1/src/truthound/docs/generator.py +601 -0
  315. truthound-1.1.1/src/truthound/docs/parser.py +1037 -0
  316. truthound-1.1.1/src/truthound/docs/renderer.py +999 -0
  317. truthound-1.1.1/src/truthound/drift/__init__.py +22 -0
  318. truthound-1.1.1/src/truthound/drift/compare.py +189 -0
  319. truthound-1.1.1/src/truthound/drift/detectors.py +464 -0
  320. truthound-1.1.1/src/truthound/drift/report.py +160 -0
  321. truthound-1.1.1/src/truthound/execution/__init__.py +65 -0
  322. truthound-1.1.1/src/truthound/execution/_protocols.py +324 -0
  323. truthound-1.1.1/src/truthound/execution/base.py +576 -0
  324. truthound-1.1.1/src/truthound/execution/distributed/__init__.py +179 -0
  325. truthound-1.1.1/src/truthound/execution/distributed/aggregations.py +731 -0
  326. truthound-1.1.1/src/truthound/execution/distributed/arrow_bridge.py +817 -0
  327. truthound-1.1.1/src/truthound/execution/distributed/base.py +550 -0
  328. truthound-1.1.1/src/truthound/execution/distributed/dask_engine.py +976 -0
  329. truthound-1.1.1/src/truthound/execution/distributed/mixins.py +766 -0
  330. truthound-1.1.1/src/truthound/execution/distributed/protocols.py +756 -0
  331. truthound-1.1.1/src/truthound/execution/distributed/ray_engine.py +1127 -0
  332. truthound-1.1.1/src/truthound/execution/distributed/registry.py +446 -0
  333. truthound-1.1.1/src/truthound/execution/distributed/spark_engine.py +1011 -0
  334. truthound-1.1.1/src/truthound/execution/distributed/validator_adapter.py +682 -0
  335. truthound-1.1.1/src/truthound/execution/pandas_engine.py +401 -0
  336. truthound-1.1.1/src/truthound/execution/polars_engine.py +497 -0
  337. truthound-1.1.1/src/truthound/execution/pushdown/__init__.py +230 -0
  338. truthound-1.1.1/src/truthound/execution/pushdown/ast.py +1550 -0
  339. truthound-1.1.1/src/truthound/execution/pushdown/builder.py +1550 -0
  340. truthound-1.1.1/src/truthound/execution/pushdown/dialects.py +1072 -0
  341. truthound-1.1.1/src/truthound/execution/pushdown/executor.py +829 -0
  342. truthound-1.1.1/src/truthound/execution/pushdown/optimizer.py +1041 -0
  343. truthound-1.1.1/src/truthound/execution/sql_engine.py +518 -0
  344. truthound-1.1.1/src/truthound/html_report.py +543 -0
  345. truthound-1.1.1/src/truthound/infrastructure/__init__.py +189 -0
  346. truthound-1.1.1/src/truthound/infrastructure/audit.py +1515 -0
  347. truthound-1.1.1/src/truthound/infrastructure/config.py +1133 -0
  348. truthound-1.1.1/src/truthound/infrastructure/encryption.py +1132 -0
  349. truthound-1.1.1/src/truthound/infrastructure/logging.py +1503 -0
  350. truthound-1.1.1/src/truthound/infrastructure/metrics.py +1220 -0
  351. truthound-1.1.1/src/truthound/lineage/__init__.py +89 -0
  352. truthound-1.1.1/src/truthound/lineage/base.py +786 -0
  353. truthound-1.1.1/src/truthound/lineage/impact_analysis.py +474 -0
  354. truthound-1.1.1/src/truthound/lineage/integrations/__init__.py +22 -0
  355. truthound-1.1.1/src/truthound/lineage/integrations/openlineage.py +548 -0
  356. truthound-1.1.1/src/truthound/lineage/tracker.py +512 -0
  357. truthound-1.1.1/src/truthound/lineage/visualization/__init__.py +33 -0
  358. truthound-1.1.1/src/truthound/lineage/visualization/protocols.py +145 -0
  359. truthound-1.1.1/src/truthound/lineage/visualization/renderers/__init__.py +20 -0
  360. truthound-1.1.1/src/truthound/lineage/visualization/renderers/cytoscape.py +329 -0
  361. truthound-1.1.1/src/truthound/lineage/visualization/renderers/d3.py +331 -0
  362. truthound-1.1.1/src/truthound/lineage/visualization/renderers/graphviz.py +276 -0
  363. truthound-1.1.1/src/truthound/lineage/visualization/renderers/mermaid.py +308 -0
  364. truthound-1.1.1/src/truthound/maskers.py +240 -0
  365. truthound-1.1.1/src/truthound/ml/__init__.py +124 -0
  366. truthound-1.1.1/src/truthound/ml/anomaly_models/__init__.py +31 -0
  367. truthound-1.1.1/src/truthound/ml/anomaly_models/ensemble.py +416 -0
  368. truthound-1.1.1/src/truthound/ml/anomaly_models/isolation_forest.py +475 -0
  369. truthound-1.1.1/src/truthound/ml/anomaly_models/statistical.py +392 -0
  370. truthound-1.1.1/src/truthound/ml/base.py +1182 -0
  371. truthound-1.1.1/src/truthound/ml/drift_detection/__init__.py +26 -0
  372. truthound-1.1.1/src/truthound/ml/drift_detection/concept.py +385 -0
  373. truthound-1.1.1/src/truthound/ml/drift_detection/distribution.py +361 -0
  374. truthound-1.1.1/src/truthound/ml/drift_detection/feature.py +442 -0
  375. truthound-1.1.1/src/truthound/ml/drift_detection/multivariate.py +495 -0
  376. truthound-1.1.1/src/truthound/ml/monitoring/__init__.py +88 -0
  377. truthound-1.1.1/src/truthound/ml/monitoring/alerting/__init__.py +33 -0
  378. truthound-1.1.1/src/truthound/ml/monitoring/alerting/handlers.py +427 -0
  379. truthound-1.1.1/src/truthound/ml/monitoring/alerting/rules.py +508 -0
  380. truthound-1.1.1/src/truthound/ml/monitoring/collectors/__init__.py +19 -0
  381. truthound-1.1.1/src/truthound/ml/monitoring/collectors/composite.py +105 -0
  382. truthound-1.1.1/src/truthound/ml/monitoring/collectors/drift.py +324 -0
  383. truthound-1.1.1/src/truthound/ml/monitoring/collectors/performance.py +179 -0
  384. truthound-1.1.1/src/truthound/ml/monitoring/collectors/quality.py +369 -0
  385. truthound-1.1.1/src/truthound/ml/monitoring/monitor.py +536 -0
  386. truthound-1.1.1/src/truthound/ml/monitoring/protocols.py +451 -0
  387. truthound-1.1.1/src/truthound/ml/monitoring/stores/__init__.py +15 -0
  388. truthound-1.1.1/src/truthound/ml/monitoring/stores/memory.py +201 -0
  389. truthound-1.1.1/src/truthound/ml/monitoring/stores/prometheus.py +296 -0
  390. truthound-1.1.1/src/truthound/ml/rule_learning/__init__.py +25 -0
  391. truthound-1.1.1/src/truthound/ml/rule_learning/constraint_miner.py +443 -0
  392. truthound-1.1.1/src/truthound/ml/rule_learning/pattern_learner.py +499 -0
  393. truthound-1.1.1/src/truthound/ml/rule_learning/profile_learner.py +462 -0
  394. truthound-1.1.1/src/truthound/multitenancy/__init__.py +326 -0
  395. truthound-1.1.1/src/truthound/multitenancy/core.py +852 -0
  396. truthound-1.1.1/src/truthound/multitenancy/integration.py +597 -0
  397. truthound-1.1.1/src/truthound/multitenancy/isolation.py +630 -0
  398. truthound-1.1.1/src/truthound/multitenancy/manager.py +770 -0
  399. truthound-1.1.1/src/truthound/multitenancy/middleware.py +765 -0
  400. truthound-1.1.1/src/truthound/multitenancy/quota.py +537 -0
  401. truthound-1.1.1/src/truthound/multitenancy/resolvers.py +603 -0
  402. truthound-1.1.1/src/truthound/multitenancy/storage.py +703 -0
  403. truthound-1.1.1/src/truthound/observability/__init__.py +307 -0
  404. truthound-1.1.1/src/truthound/observability/context.py +531 -0
  405. truthound-1.1.1/src/truthound/observability/instrumentation.py +611 -0
  406. truthound-1.1.1/src/truthound/observability/logging.py +887 -0
  407. truthound-1.1.1/src/truthound/observability/metrics.py +1157 -0
  408. truthound-1.1.1/src/truthound/observability/tracing/__init__.py +178 -0
  409. truthound-1.1.1/src/truthound/observability/tracing/baggage.py +310 -0
  410. truthound-1.1.1/src/truthound/observability/tracing/config.py +426 -0
  411. truthound-1.1.1/src/truthound/observability/tracing/exporter.py +787 -0
  412. truthound-1.1.1/src/truthound/observability/tracing/integration.py +1018 -0
  413. truthound-1.1.1/src/truthound/observability/tracing/otel/__init__.py +146 -0
  414. truthound-1.1.1/src/truthound/observability/tracing/otel/adapter.py +982 -0
  415. truthound-1.1.1/src/truthound/observability/tracing/otel/bridge.py +1177 -0
  416. truthound-1.1.1/src/truthound/observability/tracing/otel/compat.py +681 -0
  417. truthound-1.1.1/src/truthound/observability/tracing/otel/config.py +691 -0
  418. truthound-1.1.1/src/truthound/observability/tracing/otel/detection.py +327 -0
  419. truthound-1.1.1/src/truthound/observability/tracing/otel/protocols.py +426 -0
  420. truthound-1.1.1/src/truthound/observability/tracing/processor.py +561 -0
  421. truthound-1.1.1/src/truthound/observability/tracing/propagator.py +757 -0
  422. truthound-1.1.1/src/truthound/observability/tracing/provider.py +569 -0
  423. truthound-1.1.1/src/truthound/observability/tracing/resource.py +515 -0
  424. truthound-1.1.1/src/truthound/observability/tracing/sampler.py +487 -0
  425. truthound-1.1.1/src/truthound/observability/tracing/span.py +676 -0
  426. truthound-1.1.1/src/truthound/plugins/__init__.py +198 -0
  427. truthound-1.1.1/src/truthound/plugins/base.py +612 -0
  428. truthound-1.1.1/src/truthound/plugins/cli.py +680 -0
  429. truthound-1.1.1/src/truthound/plugins/dependencies/__init__.py +42 -0
  430. truthound-1.1.1/src/truthound/plugins/dependencies/graph.py +422 -0
  431. truthound-1.1.1/src/truthound/plugins/dependencies/resolver.py +417 -0
  432. truthound-1.1.1/src/truthound/plugins/discovery.py +379 -0
  433. truthound-1.1.1/src/truthound/plugins/docs/__init__.py +46 -0
  434. truthound-1.1.1/src/truthound/plugins/docs/extractor.py +444 -0
  435. truthound-1.1.1/src/truthound/plugins/docs/renderer.py +499 -0
  436. truthound-1.1.1/src/truthound/plugins/enterprise_manager.py +877 -0
  437. truthound-1.1.1/src/truthound/plugins/examples/__init__.py +19 -0
  438. truthound-1.1.1/src/truthound/plugins/examples/custom_validators.py +317 -0
  439. truthound-1.1.1/src/truthound/plugins/examples/slack_notifier.py +312 -0
  440. truthound-1.1.1/src/truthound/plugins/examples/xml_reporter.py +254 -0
  441. truthound-1.1.1/src/truthound/plugins/hooks.py +558 -0
  442. truthound-1.1.1/src/truthound/plugins/lifecycle/__init__.py +43 -0
  443. truthound-1.1.1/src/truthound/plugins/lifecycle/hot_reload.py +402 -0
  444. truthound-1.1.1/src/truthound/plugins/lifecycle/manager.py +371 -0
  445. truthound-1.1.1/src/truthound/plugins/manager.py +736 -0
  446. truthound-1.1.1/src/truthound/plugins/registry.py +338 -0
  447. truthound-1.1.1/src/truthound/plugins/security/__init__.py +93 -0
  448. truthound-1.1.1/src/truthound/plugins/security/exceptions.py +332 -0
  449. truthound-1.1.1/src/truthound/plugins/security/policies.py +348 -0
  450. truthound-1.1.1/src/truthound/plugins/security/protocols.py +643 -0
  451. truthound-1.1.1/src/truthound/plugins/security/sandbox/__init__.py +45 -0
  452. truthound-1.1.1/src/truthound/plugins/security/sandbox/context.py +158 -0
  453. truthound-1.1.1/src/truthound/plugins/security/sandbox/engines/__init__.py +19 -0
  454. truthound-1.1.1/src/truthound/plugins/security/sandbox/engines/container.py +379 -0
  455. truthound-1.1.1/src/truthound/plugins/security/sandbox/engines/noop.py +144 -0
  456. truthound-1.1.1/src/truthound/plugins/security/sandbox/engines/process.py +336 -0
  457. truthound-1.1.1/src/truthound/plugins/security/sandbox/factory.py +211 -0
  458. truthound-1.1.1/src/truthound/plugins/security/signing/__init__.py +57 -0
  459. truthound-1.1.1/src/truthound/plugins/security/signing/service.py +330 -0
  460. truthound-1.1.1/src/truthound/plugins/security/signing/trust_store.py +368 -0
  461. truthound-1.1.1/src/truthound/plugins/security/signing/verifier.py +459 -0
  462. truthound-1.1.1/src/truthound/plugins/versioning/__init__.py +41 -0
  463. truthound-1.1.1/src/truthound/plugins/versioning/constraints.py +297 -0
  464. truthound-1.1.1/src/truthound/plugins/versioning/resolver.py +329 -0
  465. truthound-1.1.1/src/truthound/profiler/__init__.py +1729 -0
  466. truthound-1.1.1/src/truthound/profiler/_lazy.py +452 -0
  467. truthound-1.1.1/src/truthound/profiler/ab_testing/__init__.py +80 -0
  468. truthound-1.1.1/src/truthound/profiler/ab_testing/analysis.py +449 -0
  469. truthound-1.1.1/src/truthound/profiler/ab_testing/base.py +257 -0
  470. truthound-1.1.1/src/truthound/profiler/ab_testing/experiment.py +395 -0
  471. truthound-1.1.1/src/truthound/profiler/ab_testing/tracking.py +368 -0
  472. truthound-1.1.1/src/truthound/profiler/auto_threshold.py +1170 -0
  473. truthound-1.1.1/src/truthound/profiler/base.py +579 -0
  474. truthound-1.1.1/src/truthound/profiler/cache_patterns.py +911 -0
  475. truthound-1.1.1/src/truthound/profiler/caching.py +1303 -0
  476. truthound-1.1.1/src/truthound/profiler/column_profiler.py +712 -0
  477. truthound-1.1.1/src/truthound/profiler/comparison.py +1007 -0
  478. truthound-1.1.1/src/truthound/profiler/custom_patterns.py +1170 -0
  479. truthound-1.1.1/src/truthound/profiler/dashboard/__init__.py +50 -0
  480. truthound-1.1.1/src/truthound/profiler/dashboard/app.py +476 -0
  481. truthound-1.1.1/src/truthound/profiler/dashboard/components.py +457 -0
  482. truthound-1.1.1/src/truthound/profiler/dashboard/config.py +72 -0
  483. truthound-1.1.1/src/truthound/profiler/distributed/__init__.py +83 -0
  484. truthound-1.1.1/src/truthound/profiler/distributed/base.py +281 -0
  485. truthound-1.1.1/src/truthound/profiler/distributed/dask_backend.py +498 -0
  486. truthound-1.1.1/src/truthound/profiler/distributed/local_backend.py +293 -0
  487. truthound-1.1.1/src/truthound/profiler/distributed/profiler.py +304 -0
  488. truthound-1.1.1/src/truthound/profiler/distributed/ray_backend.py +374 -0
  489. truthound-1.1.1/src/truthound/profiler/distributed/spark_backend.py +375 -0
  490. truthound-1.1.1/src/truthound/profiler/distributed.py +1366 -0
  491. truthound-1.1.1/src/truthound/profiler/enterprise_sampling.py +1065 -0
  492. truthound-1.1.1/src/truthound/profiler/errors.py +488 -0
  493. truthound-1.1.1/src/truthound/profiler/evolution/__init__.py +91 -0
  494. truthound-1.1.1/src/truthound/profiler/evolution/alerts.py +426 -0
  495. truthound-1.1.1/src/truthound/profiler/evolution/changes.py +206 -0
  496. truthound-1.1.1/src/truthound/profiler/evolution/compatibility.py +365 -0
  497. truthound-1.1.1/src/truthound/profiler/evolution/detector.py +372 -0
  498. truthound-1.1.1/src/truthound/profiler/evolution/protocols.py +121 -0
  499. truthound-1.1.1/src/truthound/profiler/generators/__init__.py +48 -0
  500. truthound-1.1.1/src/truthound/profiler/generators/base.py +384 -0
  501. truthound-1.1.1/src/truthound/profiler/generators/ml_rules.py +375 -0
  502. truthound-1.1.1/src/truthound/profiler/generators/pattern_rules.py +388 -0
  503. truthound-1.1.1/src/truthound/profiler/generators/schema_rules.py +267 -0
  504. truthound-1.1.1/src/truthound/profiler/generators/stats_rules.py +324 -0
  505. truthound-1.1.1/src/truthound/profiler/generators/suite_generator.py +857 -0
  506. truthound-1.1.1/src/truthound/profiler/i18n.py +1542 -0
  507. truthound-1.1.1/src/truthound/profiler/incremental.py +554 -0
  508. truthound-1.1.1/src/truthound/profiler/incremental_validation.py +1710 -0
  509. truthound-1.1.1/src/truthound/profiler/integration/__init__.py +73 -0
  510. truthound-1.1.1/src/truthound/profiler/integration/adapters.py +458 -0
  511. truthound-1.1.1/src/truthound/profiler/integration/context.py +371 -0
  512. truthound-1.1.1/src/truthound/profiler/integration/executor.py +553 -0
  513. truthound-1.1.1/src/truthound/profiler/integration/naming.py +90 -0
  514. truthound-1.1.1/src/truthound/profiler/integration/protocols.py +243 -0
  515. truthound-1.1.1/src/truthound/profiler/memory.py +1185 -0
  516. truthound-1.1.1/src/truthound/profiler/migration/__init__.py +60 -0
  517. truthound-1.1.1/src/truthound/profiler/migration/base.py +345 -0
  518. truthound-1.1.1/src/truthound/profiler/migration/manager.py +444 -0
  519. truthound-1.1.1/src/truthound/profiler/migration/v1_0_to_v1_1.py +484 -0
  520. truthound-1.1.1/src/truthound/profiler/ml/__init__.py +73 -0
  521. truthound-1.1.1/src/truthound/profiler/ml/base.py +244 -0
  522. truthound-1.1.1/src/truthound/profiler/ml/classifier.py +507 -0
  523. truthound-1.1.1/src/truthound/profiler/ml/feature_extraction.py +604 -0
  524. truthound-1.1.1/src/truthound/profiler/ml/pretrained.py +448 -0
  525. truthound-1.1.1/src/truthound/profiler/ml_inference.py +1276 -0
  526. truthound-1.1.1/src/truthound/profiler/native_patterns.py +815 -0
  527. truthound-1.1.1/src/truthound/profiler/observability.py +1184 -0
  528. truthound-1.1.1/src/truthound/profiler/process_timeout.py +1566 -0
  529. truthound-1.1.1/src/truthound/profiler/progress.py +568 -0
  530. truthound-1.1.1/src/truthound/profiler/progress_callbacks.py +1734 -0
  531. truthound-1.1.1/src/truthound/profiler/quality.py +1345 -0
  532. truthound-1.1.1/src/truthound/profiler/resilience.py +1180 -0
  533. truthound-1.1.1/src/truthound/profiler/sampled_matcher.py +794 -0
  534. truthound-1.1.1/src/truthound/profiler/sampling.py +1288 -0
  535. truthound-1.1.1/src/truthound/profiler/scheduling/__init__.py +82 -0
  536. truthound-1.1.1/src/truthound/profiler/scheduling/protocols.py +214 -0
  537. truthound-1.1.1/src/truthound/profiler/scheduling/scheduler.py +474 -0
  538. truthound-1.1.1/src/truthound/profiler/scheduling/storage.py +457 -0
  539. truthound-1.1.1/src/truthound/profiler/scheduling/triggers.py +449 -0
  540. truthound-1.1.1/src/truthound/profiler/schema.py +603 -0
  541. truthound-1.1.1/src/truthound/profiler/streaming.py +685 -0
  542. truthound-1.1.1/src/truthound/profiler/streaming_patterns.py +1354 -0
  543. truthound-1.1.1/src/truthound/profiler/suite_cli.py +625 -0
  544. truthound-1.1.1/src/truthound/profiler/suite_config.py +789 -0
  545. truthound-1.1.1/src/truthound/profiler/suite_export.py +1268 -0
  546. truthound-1.1.1/src/truthound/profiler/table_profiler.py +651 -0
  547. truthound-1.1.1/src/truthound/profiler/timeout.py +565 -0
  548. truthound-1.1.1/src/truthound/profiler/validation.py +1532 -0
  549. truthound-1.1.1/src/truthound/profiler/visualization/__init__.py +118 -0
  550. truthound-1.1.1/src/truthound/profiler/visualization/base.py +346 -0
  551. truthound-1.1.1/src/truthound/profiler/visualization/generator.py +1259 -0
  552. truthound-1.1.1/src/truthound/profiler/visualization/plotly_renderer.py +811 -0
  553. truthound-1.1.1/src/truthound/profiler/visualization/renderers.py +669 -0
  554. truthound-1.1.1/src/truthound/profiler/visualization/sections.py +540 -0
  555. truthound-1.1.1/src/truthound/profiler/visualization.py +2122 -0
  556. truthound-1.1.1/src/truthound/profiler/yaml_validation.py +1151 -0
  557. truthound-1.1.1/src/truthound/py.typed +0 -0
  558. truthound-1.1.1/src/truthound/ratelimit/__init__.py +248 -0
  559. truthound-1.1.1/src/truthound/ratelimit/algorithms.py +1108 -0
  560. truthound-1.1.1/src/truthound/ratelimit/core.py +573 -0
  561. truthound-1.1.1/src/truthound/ratelimit/integration.py +532 -0
  562. truthound-1.1.1/src/truthound/ratelimit/limiter.py +663 -0
  563. truthound-1.1.1/src/truthound/ratelimit/middleware.py +700 -0
  564. truthound-1.1.1/src/truthound/ratelimit/policy.py +792 -0
  565. truthound-1.1.1/src/truthound/ratelimit/storage.py +763 -0
  566. truthound-1.1.1/src/truthound/rbac/__init__.py +340 -0
  567. truthound-1.1.1/src/truthound/rbac/core.py +976 -0
  568. truthound-1.1.1/src/truthound/rbac/integration.py +760 -0
  569. truthound-1.1.1/src/truthound/rbac/manager.py +1052 -0
  570. truthound-1.1.1/src/truthound/rbac/middleware.py +842 -0
  571. truthound-1.1.1/src/truthound/rbac/policy.py +954 -0
  572. truthound-1.1.1/src/truthound/rbac/storage.py +878 -0
  573. truthound-1.1.1/src/truthound/realtime/__init__.py +141 -0
  574. truthound-1.1.1/src/truthound/realtime/adapters/__init__.py +43 -0
  575. truthound-1.1.1/src/truthound/realtime/adapters/base.py +533 -0
  576. truthound-1.1.1/src/truthound/realtime/adapters/kafka.py +487 -0
  577. truthound-1.1.1/src/truthound/realtime/adapters/kinesis.py +479 -0
  578. truthound-1.1.1/src/truthound/realtime/adapters/mock.py +243 -0
  579. truthound-1.1.1/src/truthound/realtime/base.py +553 -0
  580. truthound-1.1.1/src/truthound/realtime/factory.py +382 -0
  581. truthound-1.1.1/src/truthound/realtime/incremental.py +660 -0
  582. truthound-1.1.1/src/truthound/realtime/processing/__init__.py +67 -0
  583. truthound-1.1.1/src/truthound/realtime/processing/exactly_once.py +575 -0
  584. truthound-1.1.1/src/truthound/realtime/processing/state.py +547 -0
  585. truthound-1.1.1/src/truthound/realtime/processing/windows.py +647 -0
  586. truthound-1.1.1/src/truthound/realtime/protocols.py +569 -0
  587. truthound-1.1.1/src/truthound/realtime/streaming.py +605 -0
  588. truthound-1.1.1/src/truthound/realtime/testing/__init__.py +32 -0
  589. truthound-1.1.1/src/truthound/realtime/testing/containers.py +615 -0
  590. truthound-1.1.1/src/truthound/realtime/testing/fixtures.py +484 -0
  591. truthound-1.1.1/src/truthound/report.py +408 -0
  592. truthound-1.1.1/src/truthound/reporters/__init__.py +46 -0
  593. truthound-1.1.1/src/truthound/reporters/_protocols.py +30 -0
  594. truthound-1.1.1/src/truthound/reporters/base.py +324 -0
  595. truthound-1.1.1/src/truthound/reporters/ci/__init__.py +66 -0
  596. truthound-1.1.1/src/truthound/reporters/ci/azure.py +436 -0
  597. truthound-1.1.1/src/truthound/reporters/ci/base.py +509 -0
  598. truthound-1.1.1/src/truthound/reporters/ci/bitbucket.py +567 -0
  599. truthound-1.1.1/src/truthound/reporters/ci/circleci.py +547 -0
  600. truthound-1.1.1/src/truthound/reporters/ci/detection.py +364 -0
  601. truthound-1.1.1/src/truthound/reporters/ci/factory.py +182 -0
  602. truthound-1.1.1/src/truthound/reporters/ci/github.py +388 -0
  603. truthound-1.1.1/src/truthound/reporters/ci/gitlab.py +471 -0
  604. truthound-1.1.1/src/truthound/reporters/ci/jenkins.py +525 -0
  605. truthound-1.1.1/src/truthound/reporters/console_reporter.py +299 -0
  606. truthound-1.1.1/src/truthound/reporters/factory.py +211 -0
  607. truthound-1.1.1/src/truthound/reporters/html_reporter.py +524 -0
  608. truthound-1.1.1/src/truthound/reporters/json_reporter.py +256 -0
  609. truthound-1.1.1/src/truthound/reporters/markdown_reporter.py +280 -0
  610. truthound-1.1.1/src/truthound/reporters/sdk/__init__.py +174 -0
  611. truthound-1.1.1/src/truthound/reporters/sdk/builder.py +558 -0
  612. truthound-1.1.1/src/truthound/reporters/sdk/mixins.py +1150 -0
  613. truthound-1.1.1/src/truthound/reporters/sdk/schema.py +1493 -0
  614. truthound-1.1.1/src/truthound/reporters/sdk/templates.py +666 -0
  615. truthound-1.1.1/src/truthound/reporters/sdk/testing.py +968 -0
  616. truthound-1.1.1/src/truthound/scanners.py +170 -0
  617. truthound-1.1.1/src/truthound/scheduling/__init__.py +122 -0
  618. truthound-1.1.1/src/truthound/scheduling/cron.py +1136 -0
  619. truthound-1.1.1/src/truthound/scheduling/presets.py +212 -0
  620. truthound-1.1.1/src/truthound/schema.py +341 -0
  621. truthound-1.1.1/src/truthound/secrets/__init__.py +173 -0
  622. truthound-1.1.1/src/truthound/secrets/base.py +618 -0
  623. truthound-1.1.1/src/truthound/secrets/cloud.py +682 -0
  624. truthound-1.1.1/src/truthound/secrets/integration.py +507 -0
  625. truthound-1.1.1/src/truthound/secrets/manager.py +633 -0
  626. truthound-1.1.1/src/truthound/secrets/oidc/__init__.py +172 -0
  627. truthound-1.1.1/src/truthound/secrets/oidc/base.py +902 -0
  628. truthound-1.1.1/src/truthound/secrets/oidc/credential_provider.py +623 -0
  629. truthound-1.1.1/src/truthound/secrets/oidc/exchangers.py +1001 -0
  630. truthound-1.1.1/src/truthound/secrets/oidc/github/__init__.py +110 -0
  631. truthound-1.1.1/src/truthound/secrets/oidc/github/claims.py +718 -0
  632. truthound-1.1.1/src/truthound/secrets/oidc/github/enhanced_provider.py +693 -0
  633. truthound-1.1.1/src/truthound/secrets/oidc/github/trust_policy.py +742 -0
  634. truthound-1.1.1/src/truthound/secrets/oidc/github/verification.py +723 -0
  635. truthound-1.1.1/src/truthound/secrets/oidc/github/workflow.py +691 -0
  636. truthound-1.1.1/src/truthound/secrets/oidc/providers.py +825 -0
  637. truthound-1.1.1/src/truthound/secrets/providers.py +506 -0
  638. truthound-1.1.1/src/truthound/secrets/resolver.py +495 -0
  639. truthound-1.1.1/src/truthound/stores/__init__.py +177 -0
  640. truthound-1.1.1/src/truthound/stores/backends/__init__.py +18 -0
  641. truthound-1.1.1/src/truthound/stores/backends/_protocols.py +340 -0
  642. truthound-1.1.1/src/truthound/stores/backends/azure_blob.py +530 -0
  643. truthound-1.1.1/src/truthound/stores/backends/concurrent_filesystem.py +915 -0
  644. truthound-1.1.1/src/truthound/stores/backends/connection_pool.py +1365 -0
  645. truthound-1.1.1/src/truthound/stores/backends/database.py +743 -0
  646. truthound-1.1.1/src/truthound/stores/backends/filesystem.py +538 -0
  647. truthound-1.1.1/src/truthound/stores/backends/gcs.py +399 -0
  648. truthound-1.1.1/src/truthound/stores/backends/memory.py +354 -0
  649. truthound-1.1.1/src/truthound/stores/backends/s3.py +434 -0
  650. truthound-1.1.1/src/truthound/stores/backpressure/__init__.py +84 -0
  651. truthound-1.1.1/src/truthound/stores/backpressure/base.py +375 -0
  652. truthound-1.1.1/src/truthound/stores/backpressure/circuit_breaker.py +434 -0
  653. truthound-1.1.1/src/truthound/stores/backpressure/monitor.py +376 -0
  654. truthound-1.1.1/src/truthound/stores/backpressure/strategies.py +677 -0
  655. truthound-1.1.1/src/truthound/stores/base.py +551 -0
  656. truthound-1.1.1/src/truthound/stores/batching/__init__.py +65 -0
  657. truthound-1.1.1/src/truthound/stores/batching/base.py +305 -0
  658. truthound-1.1.1/src/truthound/stores/batching/buffer.py +370 -0
  659. truthound-1.1.1/src/truthound/stores/batching/store.py +248 -0
  660. truthound-1.1.1/src/truthound/stores/batching/writer.py +521 -0
  661. truthound-1.1.1/src/truthound/stores/caching/__init__.py +60 -0
  662. truthound-1.1.1/src/truthound/stores/caching/backends.py +684 -0
  663. truthound-1.1.1/src/truthound/stores/caching/base.py +356 -0
  664. truthound-1.1.1/src/truthound/stores/caching/store.py +305 -0
  665. truthound-1.1.1/src/truthound/stores/compression/__init__.py +193 -0
  666. truthound-1.1.1/src/truthound/stores/compression/adaptive.py +694 -0
  667. truthound-1.1.1/src/truthound/stores/compression/base.py +514 -0
  668. truthound-1.1.1/src/truthound/stores/compression/pipeline.py +868 -0
  669. truthound-1.1.1/src/truthound/stores/compression/providers.py +672 -0
  670. truthound-1.1.1/src/truthound/stores/compression/streaming.py +832 -0
  671. truthound-1.1.1/src/truthound/stores/concurrency/__init__.py +81 -0
  672. truthound-1.1.1/src/truthound/stores/concurrency/atomic.py +556 -0
  673. truthound-1.1.1/src/truthound/stores/concurrency/index.py +775 -0
  674. truthound-1.1.1/src/truthound/stores/concurrency/locks.py +576 -0
  675. truthound-1.1.1/src/truthound/stores/concurrency/manager.py +482 -0
  676. truthound-1.1.1/src/truthound/stores/encryption/__init__.py +297 -0
  677. truthound-1.1.1/src/truthound/stores/encryption/base.py +952 -0
  678. truthound-1.1.1/src/truthound/stores/encryption/keys.py +1191 -0
  679. truthound-1.1.1/src/truthound/stores/encryption/pipeline.py +903 -0
  680. truthound-1.1.1/src/truthound/stores/encryption/providers.py +953 -0
  681. truthound-1.1.1/src/truthound/stores/encryption/streaming.py +950 -0
  682. truthound-1.1.1/src/truthound/stores/expectations.py +227 -0
  683. truthound-1.1.1/src/truthound/stores/factory.py +246 -0
  684. truthound-1.1.1/src/truthound/stores/migration/__init__.py +75 -0
  685. truthound-1.1.1/src/truthound/stores/migration/base.py +480 -0
  686. truthound-1.1.1/src/truthound/stores/migration/manager.py +347 -0
  687. truthound-1.1.1/src/truthound/stores/migration/registry.py +382 -0
  688. truthound-1.1.1/src/truthound/stores/migration/store.py +559 -0
  689. truthound-1.1.1/src/truthound/stores/observability/__init__.py +106 -0
  690. truthound-1.1.1/src/truthound/stores/observability/audit.py +718 -0
  691. truthound-1.1.1/src/truthound/stores/observability/config.py +270 -0
  692. truthound-1.1.1/src/truthound/stores/observability/factory.py +208 -0
  693. truthound-1.1.1/src/truthound/stores/observability/metrics.py +636 -0
  694. truthound-1.1.1/src/truthound/stores/observability/protocols.py +410 -0
  695. truthound-1.1.1/src/truthound/stores/observability/store.py +570 -0
  696. truthound-1.1.1/src/truthound/stores/observability/tracing.py +784 -0
  697. truthound-1.1.1/src/truthound/stores/replication/__init__.py +76 -0
  698. truthound-1.1.1/src/truthound/stores/replication/base.py +260 -0
  699. truthound-1.1.1/src/truthound/stores/replication/monitor.py +269 -0
  700. truthound-1.1.1/src/truthound/stores/replication/store.py +439 -0
  701. truthound-1.1.1/src/truthound/stores/replication/syncer.py +391 -0
  702. truthound-1.1.1/src/truthound/stores/results.py +359 -0
  703. truthound-1.1.1/src/truthound/stores/retention/__init__.py +77 -0
  704. truthound-1.1.1/src/truthound/stores/retention/base.py +378 -0
  705. truthound-1.1.1/src/truthound/stores/retention/policies.py +621 -0
  706. truthound-1.1.1/src/truthound/stores/retention/scheduler.py +279 -0
  707. truthound-1.1.1/src/truthound/stores/retention/store.py +526 -0
  708. truthound-1.1.1/src/truthound/stores/streaming/__init__.py +138 -0
  709. truthound-1.1.1/src/truthound/stores/streaming/base.py +801 -0
  710. truthound-1.1.1/src/truthound/stores/streaming/database.py +984 -0
  711. truthound-1.1.1/src/truthound/stores/streaming/filesystem.py +719 -0
  712. truthound-1.1.1/src/truthound/stores/streaming/reader.py +629 -0
  713. truthound-1.1.1/src/truthound/stores/streaming/s3.py +843 -0
  714. truthound-1.1.1/src/truthound/stores/streaming/writer.py +790 -0
  715. truthound-1.1.1/src/truthound/stores/tiering/__init__.py +108 -0
  716. truthound-1.1.1/src/truthound/stores/tiering/base.py +462 -0
  717. truthound-1.1.1/src/truthound/stores/tiering/manager.py +249 -0
  718. truthound-1.1.1/src/truthound/stores/tiering/policies.py +692 -0
  719. truthound-1.1.1/src/truthound/stores/tiering/store.py +526 -0
  720. truthound-1.1.1/src/truthound/stores/versioning/__init__.py +56 -0
  721. truthound-1.1.1/src/truthound/stores/versioning/base.py +376 -0
  722. truthound-1.1.1/src/truthound/stores/versioning/store.py +660 -0
  723. truthound-1.1.1/src/truthound/stores/versioning/strategies.py +353 -0
  724. truthound-1.1.1/src/truthound/types.py +56 -0
  725. truthound-1.1.1/src/truthound/validators/__init__.py +593 -0
  726. truthound-1.1.1/src/truthound/validators/_lazy.py +760 -0
  727. truthound-1.1.1/src/truthound/validators/aggregate/__init__.py +27 -0
  728. truthound-1.1.1/src/truthound/validators/aggregate/central.py +116 -0
  729. truthound-1.1.1/src/truthound/validators/aggregate/extremes.py +116 -0
  730. truthound-1.1.1/src/truthound/validators/aggregate/spread.py +118 -0
  731. truthound-1.1.1/src/truthound/validators/aggregate/sum.py +64 -0
  732. truthound-1.1.1/src/truthound/validators/aggregate/type.py +85 -0
  733. truthound-1.1.1/src/truthound/validators/anomaly/__init__.py +93 -0
  734. truthound-1.1.1/src/truthound/validators/anomaly/base.py +431 -0
  735. truthound-1.1.1/src/truthound/validators/anomaly/ml_based.py +1190 -0
  736. truthound-1.1.1/src/truthound/validators/anomaly/multivariate.py +647 -0
  737. truthound-1.1.1/src/truthound/validators/anomaly/statistical.py +599 -0
  738. truthound-1.1.1/src/truthound/validators/base.py +1854 -0
  739. truthound-1.1.1/src/truthound/validators/business_rule/__init__.py +46 -0
  740. truthound-1.1.1/src/truthound/validators/business_rule/base.py +147 -0
  741. truthound-1.1.1/src/truthound/validators/business_rule/checksum.py +509 -0
  742. truthound-1.1.1/src/truthound/validators/business_rule/financial.py +526 -0
  743. truthound-1.1.1/src/truthound/validators/cache.py +733 -0
  744. truthound-1.1.1/src/truthound/validators/completeness/__init__.py +39 -0
  745. truthound-1.1.1/src/truthound/validators/completeness/conditional.py +73 -0
  746. truthound-1.1.1/src/truthound/validators/completeness/default.py +98 -0
  747. truthound-1.1.1/src/truthound/validators/completeness/empty.py +103 -0
  748. truthound-1.1.1/src/truthound/validators/completeness/nan.py +337 -0
  749. truthound-1.1.1/src/truthound/validators/completeness/null.py +205 -0
  750. truthound-1.1.1/src/truthound/validators/cross_table/__init__.py +17 -0
  751. truthound-1.1.1/src/truthound/validators/cross_table/aggregate.py +333 -0
  752. truthound-1.1.1/src/truthound/validators/cross_table/row_count.py +122 -0
  753. truthound-1.1.1/src/truthound/validators/datetime/__init__.py +29 -0
  754. truthound-1.1.1/src/truthound/validators/datetime/format.py +78 -0
  755. truthound-1.1.1/src/truthound/validators/datetime/freshness.py +269 -0
  756. truthound-1.1.1/src/truthound/validators/datetime/order.py +73 -0
  757. truthound-1.1.1/src/truthound/validators/datetime/parseable.py +185 -0
  758. truthound-1.1.1/src/truthound/validators/datetime/range.py +202 -0
  759. truthound-1.1.1/src/truthound/validators/datetime/timezone.py +69 -0
  760. truthound-1.1.1/src/truthound/validators/distribution/__init__.py +49 -0
  761. truthound-1.1.1/src/truthound/validators/distribution/distribution.py +128 -0
  762. truthound-1.1.1/src/truthound/validators/distribution/monotonic.py +119 -0
  763. truthound-1.1.1/src/truthound/validators/distribution/outlier.py +178 -0
  764. truthound-1.1.1/src/truthound/validators/distribution/quantile.py +80 -0
  765. truthound-1.1.1/src/truthound/validators/distribution/range.py +252 -0
  766. truthound-1.1.1/src/truthound/validators/distribution/set.py +125 -0
  767. truthound-1.1.1/src/truthound/validators/distribution/statistical.py +459 -0
  768. truthound-1.1.1/src/truthound/validators/drift/__init__.py +79 -0
  769. truthound-1.1.1/src/truthound/validators/drift/base.py +427 -0
  770. truthound-1.1.1/src/truthound/validators/drift/multi_feature.py +401 -0
  771. truthound-1.1.1/src/truthound/validators/drift/numeric.py +395 -0
  772. truthound-1.1.1/src/truthound/validators/drift/psi.py +446 -0
  773. truthound-1.1.1/src/truthound/validators/drift/statistical.py +510 -0
  774. truthound-1.1.1/src/truthound/validators/enterprise.py +1658 -0
  775. truthound-1.1.1/src/truthound/validators/geospatial/__init__.py +80 -0
  776. truthound-1.1.1/src/truthound/validators/geospatial/base.py +97 -0
  777. truthound-1.1.1/src/truthound/validators/geospatial/boundary.py +238 -0
  778. truthound-1.1.1/src/truthound/validators/geospatial/coordinate.py +351 -0
  779. truthound-1.1.1/src/truthound/validators/geospatial/distance.py +399 -0
  780. truthound-1.1.1/src/truthound/validators/geospatial/polygon.py +665 -0
  781. truthound-1.1.1/src/truthound/validators/i18n/__init__.py +308 -0
  782. truthound-1.1.1/src/truthound/validators/i18n/bidi.py +571 -0
  783. truthound-1.1.1/src/truthound/validators/i18n/catalogs.py +570 -0
  784. truthound-1.1.1/src/truthound/validators/i18n/dialects.py +763 -0
  785. truthound-1.1.1/src/truthound/validators/i18n/extended_catalogs.py +549 -0
  786. truthound-1.1.1/src/truthound/validators/i18n/formatting.py +1434 -0
  787. truthound-1.1.1/src/truthound/validators/i18n/loader.py +1020 -0
  788. truthound-1.1.1/src/truthound/validators/i18n/messages.py +521 -0
  789. truthound-1.1.1/src/truthound/validators/i18n/plural.py +683 -0
  790. truthound-1.1.1/src/truthound/validators/i18n/protocols.py +855 -0
  791. truthound-1.1.1/src/truthound/validators/i18n/tms.py +1162 -0
  792. truthound-1.1.1/src/truthound/validators/localization/__init__.py +53 -0
  793. truthound-1.1.1/src/truthound/validators/localization/base.py +122 -0
  794. truthound-1.1.1/src/truthound/validators/localization/chinese.py +362 -0
  795. truthound-1.1.1/src/truthound/validators/localization/japanese.py +275 -0
  796. truthound-1.1.1/src/truthound/validators/localization/korean.py +524 -0
  797. truthound-1.1.1/src/truthound/validators/memory/__init__.py +102 -0
  798. truthound-1.1.1/src/truthound/validators/memory/approximate_knn.py +506 -0
  799. truthound-1.1.1/src/truthound/validators/memory/base.py +547 -0
  800. truthound-1.1.1/src/truthound/validators/memory/sgd_online.py +719 -0
  801. truthound-1.1.1/src/truthound/validators/memory/streaming_ecdf.py +753 -0
  802. truthound-1.1.1/src/truthound/validators/ml_feature/__init__.py +54 -0
  803. truthound-1.1.1/src/truthound/validators/ml_feature/base.py +249 -0
  804. truthound-1.1.1/src/truthound/validators/ml_feature/correlation.py +299 -0
  805. truthound-1.1.1/src/truthound/validators/ml_feature/leakage.py +344 -0
  806. truthound-1.1.1/src/truthound/validators/ml_feature/null_impact.py +270 -0
  807. truthound-1.1.1/src/truthound/validators/ml_feature/scale.py +264 -0
  808. truthound-1.1.1/src/truthound/validators/multi_column/__init__.py +89 -0
  809. truthound-1.1.1/src/truthound/validators/multi_column/arithmetic.py +284 -0
  810. truthound-1.1.1/src/truthound/validators/multi_column/base.py +231 -0
  811. truthound-1.1.1/src/truthound/validators/multi_column/comparison.py +273 -0
  812. truthound-1.1.1/src/truthound/validators/multi_column/consistency.py +312 -0
  813. truthound-1.1.1/src/truthound/validators/multi_column/statistical.py +299 -0
  814. truthound-1.1.1/src/truthound/validators/optimization/__init__.py +164 -0
  815. truthound-1.1.1/src/truthound/validators/optimization/aggregation.py +563 -0
  816. truthound-1.1.1/src/truthound/validators/optimization/covariance.py +556 -0
  817. truthound-1.1.1/src/truthound/validators/optimization/geo.py +626 -0
  818. truthound-1.1.1/src/truthound/validators/optimization/graph.py +587 -0
  819. truthound-1.1.1/src/truthound/validators/optimization/orchestrator.py +970 -0
  820. truthound-1.1.1/src/truthound/validators/optimization/profiling.py +1312 -0
  821. truthound-1.1.1/src/truthound/validators/privacy/__init__.py +223 -0
  822. truthound-1.1.1/src/truthound/validators/privacy/base.py +635 -0
  823. truthound-1.1.1/src/truthound/validators/privacy/ccpa.py +670 -0
  824. truthound-1.1.1/src/truthound/validators/privacy/gdpr.py +728 -0
  825. truthound-1.1.1/src/truthound/validators/privacy/global_patterns.py +604 -0
  826. truthound-1.1.1/src/truthound/validators/privacy/plugins.py +867 -0
  827. truthound-1.1.1/src/truthound/validators/profiling/__init__.py +52 -0
  828. truthound-1.1.1/src/truthound/validators/profiling/base.py +175 -0
  829. truthound-1.1.1/src/truthound/validators/profiling/cardinality.py +312 -0
  830. truthound-1.1.1/src/truthound/validators/profiling/entropy.py +391 -0
  831. truthound-1.1.1/src/truthound/validators/profiling/frequency.py +455 -0
  832. truthound-1.1.1/src/truthound/validators/pushdown_support.py +660 -0
  833. truthound-1.1.1/src/truthound/validators/query/__init__.py +91 -0
  834. truthound-1.1.1/src/truthound/validators/query/aggregate.py +346 -0
  835. truthound-1.1.1/src/truthound/validators/query/base.py +246 -0
  836. truthound-1.1.1/src/truthound/validators/query/column.py +249 -0
  837. truthound-1.1.1/src/truthound/validators/query/expression.py +274 -0
  838. truthound-1.1.1/src/truthound/validators/query/result.py +323 -0
  839. truthound-1.1.1/src/truthound/validators/query/row_count.py +264 -0
  840. truthound-1.1.1/src/truthound/validators/referential/__init__.py +80 -0
  841. truthound-1.1.1/src/truthound/validators/referential/base.py +395 -0
  842. truthound-1.1.1/src/truthound/validators/referential/cascade.py +391 -0
  843. truthound-1.1.1/src/truthound/validators/referential/circular.py +563 -0
  844. truthound-1.1.1/src/truthound/validators/referential/foreign_key.py +624 -0
  845. truthound-1.1.1/src/truthound/validators/referential/orphan.py +485 -0
  846. truthound-1.1.1/src/truthound/validators/registry.py +330 -0
  847. truthound-1.1.1/src/truthound/validators/schema/__init__.py +41 -0
  848. truthound-1.1.1/src/truthound/validators/schema/column_count.py +142 -0
  849. truthound-1.1.1/src/truthound/validators/schema/column_exists.py +80 -0
  850. truthound-1.1.1/src/truthound/validators/schema/column_order.py +82 -0
  851. truthound-1.1.1/src/truthound/validators/schema/column_pair.py +85 -0
  852. truthound-1.1.1/src/truthound/validators/schema/column_pair_set.py +195 -0
  853. truthound-1.1.1/src/truthound/validators/schema/column_type.py +94 -0
  854. truthound-1.1.1/src/truthound/validators/schema/multi_column.py +53 -0
  855. truthound-1.1.1/src/truthound/validators/schema/multi_column_aggregate.py +175 -0
  856. truthound-1.1.1/src/truthound/validators/schema/referential.py +274 -0
  857. truthound-1.1.1/src/truthound/validators/schema/table_schema.py +91 -0
  858. truthound-1.1.1/src/truthound/validators/schema_validator.py +310 -0
  859. truthound-1.1.1/src/truthound/validators/sdk/__init__.py +250 -0
  860. truthound-1.1.1/src/truthound/validators/sdk/builder.py +680 -0
  861. truthound-1.1.1/src/truthound/validators/sdk/decorators.py +474 -0
  862. truthound-1.1.1/src/truthound/validators/sdk/enterprise/__init__.py +211 -0
  863. truthound-1.1.1/src/truthound/validators/sdk/enterprise/docs.py +725 -0
  864. truthound-1.1.1/src/truthound/validators/sdk/enterprise/fuzzing.py +659 -0
  865. truthound-1.1.1/src/truthound/validators/sdk/enterprise/licensing.py +709 -0
  866. truthound-1.1.1/src/truthound/validators/sdk/enterprise/manager.py +543 -0
  867. truthound-1.1.1/src/truthound/validators/sdk/enterprise/resources.py +628 -0
  868. truthound-1.1.1/src/truthound/validators/sdk/enterprise/sandbox.py +766 -0
  869. truthound-1.1.1/src/truthound/validators/sdk/enterprise/signing.py +603 -0
  870. truthound-1.1.1/src/truthound/validators/sdk/enterprise/templates.py +865 -0
  871. truthound-1.1.1/src/truthound/validators/sdk/enterprise/versioning.py +659 -0
  872. truthound-1.1.1/src/truthound/validators/sdk/templates.py +757 -0
  873. truthound-1.1.1/src/truthound/validators/sdk/testing.py +807 -0
  874. truthound-1.1.1/src/truthound/validators/security/__init__.py +181 -0
  875. truthound-1.1.1/src/truthound/validators/security/redos/__init__.py +182 -0
  876. truthound-1.1.1/src/truthound/validators/security/redos/core.py +861 -0
  877. truthound-1.1.1/src/truthound/validators/security/redos/cpu_monitor.py +593 -0
  878. truthound-1.1.1/src/truthound/validators/security/redos/cve_database.py +791 -0
  879. truthound-1.1.1/src/truthound/validators/security/redos/ml/__init__.py +155 -0
  880. truthound-1.1.1/src/truthound/validators/security/redos/ml/base.py +785 -0
  881. truthound-1.1.1/src/truthound/validators/security/redos/ml/datasets.py +618 -0
  882. truthound-1.1.1/src/truthound/validators/security/redos/ml/features.py +359 -0
  883. truthound-1.1.1/src/truthound/validators/security/redos/ml/models.py +1000 -0
  884. truthound-1.1.1/src/truthound/validators/security/redos/ml/predictor.py +507 -0
  885. truthound-1.1.1/src/truthound/validators/security/redos/ml/storage.py +632 -0
  886. truthound-1.1.1/src/truthound/validators/security/redos/ml/training.py +571 -0
  887. truthound-1.1.1/src/truthound/validators/security/redos/ml_analyzer.py +937 -0
  888. truthound-1.1.1/src/truthound/validators/security/redos/optimizer.py +674 -0
  889. truthound-1.1.1/src/truthound/validators/security/redos/profiler.py +682 -0
  890. truthound-1.1.1/src/truthound/validators/security/redos/re2_engine.py +709 -0
  891. truthound-1.1.1/src/truthound/validators/security/redos.py +886 -0
  892. truthound-1.1.1/src/truthound/validators/security/sql_security.py +1247 -0
  893. truthound-1.1.1/src/truthound/validators/streaming/__init__.py +126 -0
  894. truthound-1.1.1/src/truthound/validators/streaming/base.py +292 -0
  895. truthound-1.1.1/src/truthound/validators/streaming/completeness.py +210 -0
  896. truthound-1.1.1/src/truthound/validators/streaming/mixin.py +575 -0
  897. truthound-1.1.1/src/truthound/validators/streaming/range.py +308 -0
  898. truthound-1.1.1/src/truthound/validators/streaming/sources.py +846 -0
  899. truthound-1.1.1/src/truthound/validators/string/__init__.py +57 -0
  900. truthound-1.1.1/src/truthound/validators/string/casing.py +159 -0
  901. truthound-1.1.1/src/truthound/validators/string/charset.py +150 -0
  902. truthound-1.1.1/src/truthound/validators/string/format.py +552 -0
  903. truthound-1.1.1/src/truthound/validators/string/json.py +208 -0
  904. truthound-1.1.1/src/truthound/validators/string/json_schema.py +185 -0
  905. truthound-1.1.1/src/truthound/validators/string/length.py +105 -0
  906. truthound-1.1.1/src/truthound/validators/string/like_pattern.py +348 -0
  907. truthound-1.1.1/src/truthound/validators/string/regex.py +338 -0
  908. truthound-1.1.1/src/truthound/validators/string/regex_extended.py +438 -0
  909. truthound-1.1.1/src/truthound/validators/table/__init__.py +88 -0
  910. truthound-1.1.1/src/truthound/validators/table/base.py +78 -0
  911. truthound-1.1.1/src/truthound/validators/table/column_count.py +198 -0
  912. truthound-1.1.1/src/truthound/validators/table/freshness.py +362 -0
  913. truthound-1.1.1/src/truthound/validators/table/row_count.py +251 -0
  914. truthound-1.1.1/src/truthound/validators/table/schema.py +333 -0
  915. truthound-1.1.1/src/truthound/validators/table/size.py +285 -0
  916. truthound-1.1.1/src/truthound/validators/timeout/__init__.py +102 -0
  917. truthound-1.1.1/src/truthound/validators/timeout/advanced/__init__.py +247 -0
  918. truthound-1.1.1/src/truthound/validators/timeout/advanced/circuit_breaker.py +675 -0
  919. truthound-1.1.1/src/truthound/validators/timeout/advanced/prediction.py +773 -0
  920. truthound-1.1.1/src/truthound/validators/timeout/advanced/priority.py +618 -0
  921. truthound-1.1.1/src/truthound/validators/timeout/advanced/redis_backend.py +770 -0
  922. truthound-1.1.1/src/truthound/validators/timeout/advanced/retry.py +721 -0
  923. truthound-1.1.1/src/truthound/validators/timeout/advanced/sampling.py +788 -0
  924. truthound-1.1.1/src/truthound/validators/timeout/advanced/sla.py +661 -0
  925. truthound-1.1.1/src/truthound/validators/timeout/advanced/telemetry.py +804 -0
  926. truthound-1.1.1/src/truthound/validators/timeout/cascade.py +477 -0
  927. truthound-1.1.1/src/truthound/validators/timeout/deadline.py +657 -0
  928. truthound-1.1.1/src/truthound/validators/timeout/degradation.py +525 -0
  929. truthound-1.1.1/src/truthound/validators/timeout/distributed.py +597 -0
  930. truthound-1.1.1/src/truthound/validators/timeseries/__init__.py +89 -0
  931. truthound-1.1.1/src/truthound/validators/timeseries/base.py +326 -0
  932. truthound-1.1.1/src/truthound/validators/timeseries/completeness.py +617 -0
  933. truthound-1.1.1/src/truthound/validators/timeseries/gap.py +485 -0
  934. truthound-1.1.1/src/truthound/validators/timeseries/monotonic.py +310 -0
  935. truthound-1.1.1/src/truthound/validators/timeseries/seasonality.py +422 -0
  936. truthound-1.1.1/src/truthound/validators/timeseries/trend.py +510 -0
  937. truthound-1.1.1/src/truthound/validators/uniqueness/__init__.py +59 -0
  938. truthound-1.1.1/src/truthound/validators/uniqueness/approximate.py +475 -0
  939. truthound-1.1.1/src/truthound/validators/uniqueness/distinct_values.py +253 -0
  940. truthound-1.1.1/src/truthound/validators/uniqueness/duplicate.py +118 -0
  941. truthound-1.1.1/src/truthound/validators/uniqueness/primary_key.py +140 -0
  942. truthound-1.1.1/src/truthound/validators/uniqueness/unique.py +191 -0
  943. truthound-1.1.1/src/truthound/validators/uniqueness/within_record.py +599 -0
  944. truthound-1.1.1/src/truthound/validators/utils.py +756 -0
  945. truthound-1.1.1/tests/__init__.py +1 -0
  946. truthound-1.1.1/tests/datadocs/__init__.py +1 -0
  947. truthound-1.1.1/tests/datadocs/test_base.py +253 -0
  948. truthound-1.1.1/tests/datadocs/test_builder.py +408 -0
  949. truthound-1.1.1/tests/datadocs/test_charts.py +513 -0
  950. truthound-1.1.1/tests/datadocs/test_sections.py +735 -0
  951. truthound-1.1.1/tests/datadocs/test_styles.py +286 -0
  952. truthound-1.1.1/tests/datadocs/test_themes.py +177 -0
  953. truthound-1.1.1/tests/e2e/__init__.py +27 -0
  954. truthound-1.1.1/tests/e2e/fixtures.py +715 -0
  955. truthound-1.1.1/tests/e2e/test_core_paths.py +869 -0
  956. truthound-1.1.1/tests/e2e/utils.py +763 -0
  957. truthound-1.1.1/tests/integration/__init__.py +16 -0
  958. truthound-1.1.1/tests/integration/cloud_dw/__init__.py +68 -0
  959. truthound-1.1.1/tests/integration/cloud_dw/backends/__init__.py +61 -0
  960. truthound-1.1.1/tests/integration/cloud_dw/backends/bigquery.py +460 -0
  961. truthound-1.1.1/tests/integration/cloud_dw/backends/databricks.py +444 -0
  962. truthound-1.1.1/tests/integration/cloud_dw/backends/redshift.py +411 -0
  963. truthound-1.1.1/tests/integration/cloud_dw/backends/registry.py +475 -0
  964. truthound-1.1.1/tests/integration/cloud_dw/backends/snowflake.py +460 -0
  965. truthound-1.1.1/tests/integration/cloud_dw/base.py +907 -0
  966. truthound-1.1.1/tests/integration/cloud_dw/conftest.py +581 -0
  967. truthound-1.1.1/tests/integration/cloud_dw/fixtures.py +682 -0
  968. truthound-1.1.1/tests/integration/cloud_dw/runner.py +711 -0
  969. truthound-1.1.1/tests/integration/cloud_dw/test_connection.py +149 -0
  970. truthound-1.1.1/tests/integration/cloud_dw/test_performance.py +658 -0
  971. truthound-1.1.1/tests/integration/cloud_dw/test_schema.py +438 -0
  972. truthound-1.1.1/tests/integration/cloud_dw/test_truthound_validators.py +759 -0
  973. truthound-1.1.1/tests/integration/cloud_dw/test_validation.py +544 -0
  974. truthound-1.1.1/tests/integration/conftest.py +60 -0
  975. truthound-1.1.1/tests/integration/external/README.md +305 -0
  976. truthound-1.1.1/tests/integration/external/__init__.py +62 -0
  977. truthound-1.1.1/tests/integration/external/backends/__init__.py +64 -0
  978. truthound-1.1.1/tests/integration/external/backends/elasticsearch_backend.py +339 -0
  979. truthound-1.1.1/tests/integration/external/backends/kms_backend.py +628 -0
  980. truthound-1.1.1/tests/integration/external/backends/redis_backend.py +289 -0
  981. truthound-1.1.1/tests/integration/external/backends/tms_backend.py +669 -0
  982. truthound-1.1.1/tests/integration/external/backends/vault_backend.py +434 -0
  983. truthound-1.1.1/tests/integration/external/base.py +766 -0
  984. truthound-1.1.1/tests/integration/external/conftest.py +607 -0
  985. truthound-1.1.1/tests/integration/external/docker-compose.yml +190 -0
  986. truthound-1.1.1/tests/integration/external/fluentd.conf +23 -0
  987. truthound-1.1.1/tests/integration/external/providers/__init__.py +49 -0
  988. truthound-1.1.1/tests/integration/external/providers/docker_provider.py +525 -0
  989. truthound-1.1.1/tests/integration/external/providers/mock_provider.py +864 -0
  990. truthound-1.1.1/tests/integration/external/providers/registry.py +280 -0
  991. truthound-1.1.1/tests/integration/external/tests/__init__.py +10 -0
  992. truthound-1.1.1/tests/integration/external/tests/test_kms.py +358 -0
  993. truthound-1.1.1/tests/integration/external/tests/test_logging_sinks.py +469 -0
  994. truthound-1.1.1/tests/integration/external/tests/test_redis.py +379 -0
  995. truthound-1.1.1/tests/integration/external/tests/test_tms.py +476 -0
  996. truthound-1.1.1/tests/integration/realtime/__init__.py +1 -0
  997. truthound-1.1.1/tests/integration/realtime/test_kafka_adapter.py +402 -0
  998. truthound-1.1.1/tests/integration/realtime/test_kinesis_adapter.py +330 -0
  999. truthound-1.1.1/tests/integration/realtime/test_lineage_integration.py +483 -0
  1000. truthound-1.1.1/tests/integration/realtime/test_ml_monitoring.py +461 -0
  1001. truthound-1.1.1/tests/integration/stores/__init__.py +6 -0
  1002. truthound-1.1.1/tests/integration/stores/conftest.py +263 -0
  1003. truthound-1.1.1/tests/integration/stores/test_azure_store.py +331 -0
  1004. truthound-1.1.1/tests/integration/stores/test_cross_cloud.py +415 -0
  1005. truthound-1.1.1/tests/integration/stores/test_gcs_store.py +284 -0
  1006. truthound-1.1.1/tests/integration/stores/test_s3_store.py +364 -0
  1007. truthound-1.1.1/tests/lineage/__init__.py +1 -0
  1008. truthound-1.1.1/tests/lineage/test_lineage_module.py +190 -0
  1009. truthound-1.1.1/tests/ml/__init__.py +1 -0
  1010. truthound-1.1.1/tests/ml/test_ml_module.py +298 -0
  1011. truthound-1.1.1/tests/mocks/__init__.py +43 -0
  1012. truthound-1.1.1/tests/mocks/cloud_mocks.py +320 -0
  1013. truthound-1.1.1/tests/mocks/database_mocks.py +371 -0
  1014. truthound-1.1.1/tests/mocks/reporter_mocks.py +124 -0
  1015. truthound-1.1.1/tests/phase6_verification/VERIFICATION_SUMMARY.md +240 -0
  1016. truthound-1.1.1/tests/phase6_verification/run_all_tests.py +79 -0
  1017. truthound-1.1.1/tests/phase6_verification/test_01_saga_pattern.py +328 -0
  1018. truthound-1.1.1/tests/phase6_verification/test_02_notification_providers.py +270 -0
  1019. truthound-1.1.1/tests/phase6_verification/test_03_async_execution.py +208 -0
  1020. truthound-1.1.1/tests/phase6_verification/test_04_circuit_breaker.py +217 -0
  1021. truthound-1.1.1/tests/phase6_verification/test_05_idempotency.py +225 -0
  1022. truthound-1.1.1/tests/phase6_verification/test_06_ci_platforms.py +217 -0
  1023. truthound-1.1.1/tests/phase6_verification/test_07_distributed_checkpoint.py +212 -0
  1024. truthound-1.1.1/tests/phase6_verification/test_08_github_oidc.py +208 -0
  1025. truthound-1.1.1/tests/phase6_verification/test_09_job_queue_monitoring.py +198 -0
  1026. truthound-1.1.1/tests/phase6_verification/test_10_historical_analytics.py +220 -0
  1027. truthound-1.1.1/tests/phase6_verification/verification_report.txt +674 -0
  1028. truthound-1.1.1/tests/plugins/__init__.py +1 -0
  1029. truthound-1.1.1/tests/plugins/test_hooks.py +487 -0
  1030. truthound-1.1.1/tests/plugins/test_plugin_base.py +362 -0
  1031. truthound-1.1.1/tests/plugins/test_plugin_manager.py +355 -0
  1032. truthound-1.1.1/tests/plugins/test_registry.py +413 -0
  1033. truthound-1.1.1/tests/profiler/generators/test_pattern_rules.py +178 -0
  1034. truthound-1.1.1/tests/profiler/generators/test_profile_adapter.py +394 -0
  1035. truthound-1.1.1/tests/profiler/integration/test_naming.py +97 -0
  1036. truthound-1.1.1/tests/profiler/scheduling/test_interval_trigger_seconds.py +156 -0
  1037. truthound-1.1.1/tests/profiler/test_enterprise_sampling.py +535 -0
  1038. truthound-1.1.1/tests/realtime/__init__.py +1 -0
  1039. truthound-1.1.1/tests/realtime/test_realtime_module.py +395 -0
  1040. truthound-1.1.1/tests/reporters/sdk/__init__.py +1 -0
  1041. truthound-1.1.1/tests/reporters/sdk/test_mixins.py +669 -0
  1042. truthound-1.1.1/tests/reporters/sdk/test_schema.py +728 -0
  1043. truthound-1.1.1/tests/reporters/sdk/test_testing.py +627 -0
  1044. truthound-1.1.1/tests/stores/compression/__init__.py +1 -0
  1045. truthound-1.1.1/tests/stores/compression/test_adaptive.py +445 -0
  1046. truthound-1.1.1/tests/stores/compression/test_base.py +324 -0
  1047. truthound-1.1.1/tests/stores/compression/test_pipeline.py +555 -0
  1048. truthound-1.1.1/tests/stores/compression/test_providers.py +315 -0
  1049. truthound-1.1.1/tests/stores/compression/test_streaming.py +473 -0
  1050. truthound-1.1.1/tests/stores/concurrency/__init__.py +1 -0
  1051. truthound-1.1.1/tests/stores/concurrency/test_atomic.py +401 -0
  1052. truthound-1.1.1/tests/stores/concurrency/test_concurrent_store.py +429 -0
  1053. truthound-1.1.1/tests/stores/concurrency/test_index.py +515 -0
  1054. truthound-1.1.1/tests/stores/concurrency/test_locks.py +251 -0
  1055. truthound-1.1.1/tests/stores/encryption/__init__.py +1 -0
  1056. truthound-1.1.1/tests/stores/encryption/test_base.py +373 -0
  1057. truthound-1.1.1/tests/stores/encryption/test_keys.py +608 -0
  1058. truthound-1.1.1/tests/stores/encryption/test_pipeline.py +511 -0
  1059. truthound-1.1.1/tests/stores/encryption/test_providers.py +406 -0
  1060. truthound-1.1.1/tests/stores/encryption/test_streaming.py +525 -0
  1061. truthound-1.1.1/tests/stores/streaming/__init__.py +1 -0
  1062. truthound-1.1.1/tests/stores/streaming/test_base.py +318 -0
  1063. truthound-1.1.1/tests/stores/streaming/test_filesystem_store.py +476 -0
  1064. truthound-1.1.1/tests/stores/streaming/test_writer_reader.py +552 -0
  1065. truthound-1.1.1/tests/stores/test_connection_pool.py +914 -0
  1066. truthound-1.1.1/tests/stress/__init__.py +62 -0
  1067. truthound-1.1.1/tests/stress/chaos.py +505 -0
  1068. truthound-1.1.1/tests/stress/framework.py +520 -0
  1069. truthound-1.1.1/tests/stress/generators.py +513 -0
  1070. truthound-1.1.1/tests/stress/metrics.py +550 -0
  1071. truthound-1.1.1/tests/stress/reports.py +441 -0
  1072. truthound-1.1.1/tests/stress/test_saga_stress.py +389 -0
  1073. truthound-1.1.1/tests/test_100m_scale.py +816 -0
  1074. truthound-1.1.1/tests/test_adapters.py +120 -0
  1075. truthound-1.1.1/tests/test_api.py +204 -0
  1076. truthound-1.1.1/tests/test_async_checkpoint.py +848 -0
  1077. truthound-1.1.1/tests/test_audit.py +1066 -0
  1078. truthound-1.1.1/tests/test_benchmark.py +865 -0
  1079. truthound-1.1.1/tests/test_cache.py +273 -0
  1080. truthound-1.1.1/tests/test_checkpoint.py +815 -0
  1081. truthound-1.1.1/tests/test_ci_reporters.py +971 -0
  1082. truthound-1.1.1/tests/test_circuitbreaker.py +1150 -0
  1083. truthound-1.1.1/tests/test_datasources.py +426 -0
  1084. truthound-1.1.1/tests/test_datasources_enterprise.py +1074 -0
  1085. truthound-1.1.1/tests/test_datasources_sql.py +433 -0
  1086. truthound-1.1.1/tests/test_drift.py +277 -0
  1087. truthound-1.1.1/tests/test_execution_engines.py +399 -0
  1088. truthound-1.1.1/tests/test_extreme_stress.py +579 -0
  1089. truthound-1.1.1/tests/test_html_report.py +603 -0
  1090. truthound-1.1.1/tests/test_i18n.py +829 -0
  1091. truthound-1.1.1/tests/test_idempotency.py +812 -0
  1092. truthound-1.1.1/tests/test_incremental_validation.py +1259 -0
  1093. truthound-1.1.1/tests/test_memory_efficient.py +675 -0
  1094. truthound-1.1.1/tests/test_ml_sampling.py +433 -0
  1095. truthound-1.1.1/tests/test_multitenancy.py +1269 -0
  1096. truthound-1.1.1/tests/test_observability.py +980 -0
  1097. truthound-1.1.1/tests/test_opsgenie.py +1258 -0
  1098. truthound-1.1.1/tests/test_optimization_mixins.py +804 -0
  1099. truthound-1.1.1/tests/test_process_timeout.py +1087 -0
  1100. truthound-1.1.1/tests/test_profiler.py +592 -0
  1101. truthound-1.1.1/tests/test_profiler_p0.py +656 -0
  1102. truthound-1.1.1/tests/test_profiler_p1.py +731 -0
  1103. truthound-1.1.1/tests/test_profiler_p2.py +1007 -0
  1104. truthound-1.1.1/tests/test_profiler_p3.py +788 -0
  1105. truthound-1.1.1/tests/test_progress_callbacks.py +1154 -0
  1106. truthound-1.1.1/tests/test_ratelimit.py +1123 -0
  1107. truthound-1.1.1/tests/test_rbac.py +1553 -0
  1108. truthound-1.1.1/tests/test_reference_cache.py +499 -0
  1109. truthound-1.1.1/tests/test_reporters.py +476 -0
  1110. truthound-1.1.1/tests/test_reporters_optional.py +274 -0
  1111. truthound-1.1.1/tests/test_resilience.py +1213 -0
  1112. truthound-1.1.1/tests/test_sampling.py +961 -0
  1113. truthound-1.1.1/tests/test_scheduling.py +1227 -0
  1114. truthound-1.1.1/tests/test_schema.py +226 -0
  1115. truthound-1.1.1/tests/test_secrets.py +902 -0
  1116. truthound-1.1.1/tests/test_sql_security.py +768 -0
  1117. truthound-1.1.1/tests/test_stores.py +486 -0
  1118. truthound-1.1.1/tests/test_stores_optional_backends.py +469 -0
  1119. truthound-1.1.1/tests/test_streaming_patterns.py +1020 -0
  1120. truthound-1.1.1/tests/test_streaming_sources.py +569 -0
  1121. truthound-1.1.1/tests/test_stress.py +674 -0
  1122. truthound-1.1.1/tests/test_suite_generation.py +823 -0
  1123. truthound-1.1.1/tests/test_teams_notify.py +1060 -0
  1124. truthound-1.1.1/tests/test_tracing.py +1232 -0
  1125. truthound-1.1.1/tests/test_transaction.py +1159 -0
  1126. truthound-1.1.1/tests/test_validators.py +185 -0
  1127. truthound-1.1.1/tests/test_validators_anomaly.py +573 -0
  1128. truthound-1.1.1/tests/test_validators_business_rule.py +323 -0
  1129. truthound-1.1.1/tests/test_validators_drift.py +836 -0
  1130. truthound-1.1.1/tests/test_validators_extended.py +1359 -0
  1131. truthound-1.1.1/tests/test_validators_geospatial.py +434 -0
  1132. truthound-1.1.1/tests/test_validators_localization.py +401 -0
  1133. truthound-1.1.1/tests/test_validators_ml_feature.py +367 -0
  1134. truthound-1.1.1/tests/test_validators_multi_column.py +642 -0
  1135. truthound-1.1.1/tests/test_validators_p0.py +621 -0
  1136. truthound-1.1.1/tests/test_validators_p1.py +626 -0
  1137. truthound-1.1.1/tests/test_validators_p2.py +558 -0
  1138. truthound-1.1.1/tests/test_validators_privacy.py +884 -0
  1139. truthound-1.1.1/tests/test_validators_profiling.py +372 -0
  1140. truthound-1.1.1/tests/test_validators_query.py +612 -0
  1141. truthound-1.1.1/tests/test_validators_referential.py +704 -0
  1142. truthound-1.1.1/tests/test_validators_table.py +455 -0
  1143. truthound-1.1.1/tests/test_validators_timeseries.py +600 -0
  1144. truthound-1.1.1/tests/unit/checkpoint/actions/__init__.py +1 -0
  1145. truthound-1.1.1/tests/unit/checkpoint/actions/test_discord_telegram.py +440 -0
  1146. truthound-1.1.1/tests/unit/checkpoint/analytics/__init__.py +1 -0
  1147. truthound-1.1.1/tests/unit/checkpoint/analytics/test_aggregations.py +383 -0
  1148. truthound-1.1.1/tests/unit/checkpoint/analytics/test_analyzers.py +287 -0
  1149. truthound-1.1.1/tests/unit/checkpoint/deduplication/__init__.py +1 -0
  1150. truthound-1.1.1/tests/unit/checkpoint/deduplication/test_middleware.py +474 -0
  1151. truthound-1.1.1/tests/unit/checkpoint/deduplication/test_processor.py +405 -0
  1152. truthound-1.1.1/tests/unit/checkpoint/deduplication/test_protocols.py +371 -0
  1153. truthound-1.1.1/tests/unit/checkpoint/deduplication/test_service.py +528 -0
  1154. truthound-1.1.1/tests/unit/checkpoint/deduplication/test_stores.py +346 -0
  1155. truthound-1.1.1/tests/unit/checkpoint/escalation/__init__.py +1 -0
  1156. truthound-1.1.1/tests/unit/checkpoint/escalation/test_engine.py +500 -0
  1157. truthound-1.1.1/tests/unit/checkpoint/escalation/test_protocols.py +451 -0
  1158. truthound-1.1.1/tests/unit/checkpoint/escalation/test_scheduler.py +350 -0
  1159. truthound-1.1.1/tests/unit/checkpoint/escalation/test_states.py +437 -0
  1160. truthound-1.1.1/tests/unit/checkpoint/escalation/test_stores.py +355 -0
  1161. truthound-1.1.1/tests/unit/checkpoint/monitoring/__init__.py +1 -0
  1162. truthound-1.1.1/tests/unit/checkpoint/monitoring/test_collectors.py +287 -0
  1163. truthound-1.1.1/tests/unit/checkpoint/monitoring/test_protocols.py +283 -0
  1164. truthound-1.1.1/tests/unit/checkpoint/routing/__init__.py +1 -0
  1165. truthound-1.1.1/tests/unit/checkpoint/routing/test_base.py +532 -0
  1166. truthound-1.1.1/tests/unit/checkpoint/routing/test_combinators.py +518 -0
  1167. truthound-1.1.1/tests/unit/checkpoint/routing/test_config.py +528 -0
  1168. truthound-1.1.1/tests/unit/checkpoint/routing/test_engine.py +421 -0
  1169. truthound-1.1.1/tests/unit/checkpoint/routing/test_rules.py +511 -0
  1170. truthound-1.1.1/tests/unit/checkpoint/test_distributed_orchestration.py +767 -0
  1171. truthound-1.1.1/tests/unit/checkpoint/test_saga_advanced.py +1586 -0
  1172. truthound-1.1.1/tests/unit/checkpoint/throttling/__init__.py +1 -0
  1173. truthound-1.1.1/tests/unit/checkpoint/throttling/test_middleware.py +408 -0
  1174. truthound-1.1.1/tests/unit/checkpoint/throttling/test_protocols.py +420 -0
  1175. truthound-1.1.1/tests/unit/checkpoint/throttling/test_service.py +453 -0
  1176. truthound-1.1.1/tests/unit/checkpoint/throttling/test_stores.py +315 -0
  1177. truthound-1.1.1/tests/unit/checkpoint/throttling/test_throttlers.py +438 -0
  1178. truthound-1.1.1/tests/unit/cli/__init__.py +1 -0
  1179. truthound-1.1.1/tests/unit/cli/test_scaffolding.py +593 -0
  1180. truthound-1.1.1/tests/unit/datadocs/__init__.py +1 -0
  1181. truthound-1.1.1/tests/unit/datadocs/engine/__init__.py +1 -0
  1182. truthound-1.1.1/tests/unit/datadocs/engine/test_context.py +140 -0
  1183. truthound-1.1.1/tests/unit/datadocs/engine/test_pipeline.py +209 -0
  1184. truthound-1.1.1/tests/unit/datadocs/engine/test_registry.py +152 -0
  1185. truthound-1.1.1/tests/unit/datadocs/i18n/__init__.py +1 -0
  1186. truthound-1.1.1/tests/unit/datadocs/i18n/test_catalog.py +233 -0
  1187. truthound-1.1.1/tests/unit/datadocs/i18n/test_formatting.py +217 -0
  1188. truthound-1.1.1/tests/unit/datadocs/i18n/test_plurals.py +175 -0
  1189. truthound-1.1.1/tests/unit/datadocs/versioning/__init__.py +1 -0
  1190. truthound-1.1.1/tests/unit/datadocs/versioning/test_diff.py +276 -0
  1191. truthound-1.1.1/tests/unit/datadocs/versioning/test_storage.py +257 -0
  1192. truthound-1.1.1/tests/unit/datadocs/versioning/test_version.py +264 -0
  1193. truthound-1.1.1/tests/unit/datasources/__init__.py +1 -0
  1194. truthound-1.1.1/tests/unit/datasources/nosql/__init__.py +1 -0
  1195. truthound-1.1.1/tests/unit/datasources/nosql/test_elasticsearch.py +224 -0
  1196. truthound-1.1.1/tests/unit/datasources/nosql/test_mongodb.py +338 -0
  1197. truthound-1.1.1/tests/unit/datasources/streaming/__init__.py +1 -0
  1198. truthound-1.1.1/tests/unit/datasources/streaming/test_kafka.py +217 -0
  1199. truthound-1.1.1/tests/unit/datasources/test_adapters.py +316 -0
  1200. truthound-1.1.1/tests/unit/datasources/test_async_base.py +254 -0
  1201. truthound-1.1.1/tests/unit/datasources/test_async_protocols.py +139 -0
  1202. truthound-1.1.1/tests/unit/datasources/test_pandas_optimized.py +312 -0
  1203. truthound-1.1.1/tests/unit/execution/pushdown/__init__.py +1 -0
  1204. truthound-1.1.1/tests/unit/execution/pushdown/test_ast.py +551 -0
  1205. truthound-1.1.1/tests/unit/execution/pushdown/test_builder.py +512 -0
  1206. truthound-1.1.1/tests/unit/execution/pushdown/test_dialects.py +1039 -0
  1207. truthound-1.1.1/tests/unit/execution/pushdown/test_executor.py +673 -0
  1208. truthound-1.1.1/tests/unit/execution/pushdown/test_integration.py +536 -0
  1209. truthound-1.1.1/tests/unit/execution/pushdown/test_optimizer.py +669 -0
  1210. truthound-1.1.1/tests/unit/execution/test_dask_engine.py +410 -0
  1211. truthound-1.1.1/tests/unit/execution/test_distributed.py +878 -0
  1212. truthound-1.1.1/tests/unit/execution/test_distributed_mixins.py +540 -0
  1213. truthound-1.1.1/tests/unit/execution/test_ray_engine.py +445 -0
  1214. truthound-1.1.1/tests/unit/infrastructure/__init__.py +1 -0
  1215. truthound-1.1.1/tests/unit/infrastructure/test_audit.py +463 -0
  1216. truthound-1.1.1/tests/unit/infrastructure/test_config.py +589 -0
  1217. truthound-1.1.1/tests/unit/infrastructure/test_encryption.py +653 -0
  1218. truthound-1.1.1/tests/unit/infrastructure/test_logging.py +595 -0
  1219. truthound-1.1.1/tests/unit/infrastructure/test_metrics.py +463 -0
  1220. truthound-1.1.1/tests/unit/observability/test_otel_compat.py +1057 -0
  1221. truthound-1.1.1/tests/unit/plugins/dependencies/__init__.py +1 -0
  1222. truthound-1.1.1/tests/unit/plugins/dependencies/test_graph.py +415 -0
  1223. truthound-1.1.1/tests/unit/plugins/security/__init__.py +1 -0
  1224. truthound-1.1.1/tests/unit/plugins/security/sandbox/__init__.py +1 -0
  1225. truthound-1.1.1/tests/unit/plugins/security/sandbox/test_context.py +180 -0
  1226. truthound-1.1.1/tests/unit/plugins/security/sandbox/test_factory.py +189 -0
  1227. truthound-1.1.1/tests/unit/plugins/security/sandbox/test_noop_engine.py +184 -0
  1228. truthound-1.1.1/tests/unit/plugins/security/signing/__init__.py +1 -0
  1229. truthound-1.1.1/tests/unit/plugins/security/signing/test_service.py +311 -0
  1230. truthound-1.1.1/tests/unit/plugins/security/signing/test_trust_store.py +318 -0
  1231. truthound-1.1.1/tests/unit/plugins/security/signing/test_verifier.py +387 -0
  1232. truthound-1.1.1/tests/unit/plugins/security/test_policies.py +166 -0
  1233. truthound-1.1.1/tests/unit/plugins/security/test_protocols.py +206 -0
  1234. truthound-1.1.1/tests/unit/plugins/versioning/__init__.py +1 -0
  1235. truthound-1.1.1/tests/unit/plugins/versioning/test_constraints.py +258 -0
  1236. truthound-1.1.1/tests/unit/profiler/phase7/test_evolution.py +452 -0
  1237. truthound-1.1.1/tests/unit/profiler/phase7/test_lazy_loading.py +232 -0
  1238. truthound-1.1.1/tests/unit/profiler/phase7/test_resilience.py +548 -0
  1239. truthound-1.1.1/tests/unit/profiler/phase7/test_scheduling.py +425 -0
  1240. truthound-1.1.1/tests/unit/secrets/__init__.py +1 -0
  1241. truthound-1.1.1/tests/unit/secrets/oidc/__init__.py +1 -0
  1242. truthound-1.1.1/tests/unit/secrets/oidc/test_base.py +999 -0
  1243. truthound-1.1.1/tests/unit/secrets/oidc/test_credential_provider.py +721 -0
  1244. truthound-1.1.1/tests/unit/secrets/oidc/test_exchangers.py +657 -0
  1245. truthound-1.1.1/tests/unit/secrets/oidc/test_github_oidc.py +875 -0
  1246. truthound-1.1.1/tests/unit/secrets/oidc/test_providers.py +747 -0
  1247. truthound-1.1.1/tests/unit/stores/backpressure/__init__.py +1 -0
  1248. truthound-1.1.1/tests/unit/stores/backpressure/test_base.py +274 -0
  1249. truthound-1.1.1/tests/unit/stores/backpressure/test_circuit_breaker.py +384 -0
  1250. truthound-1.1.1/tests/unit/stores/backpressure/test_strategies.py +414 -0
  1251. truthound-1.1.1/tests/unit/stores/batching/__init__.py +1 -0
  1252. truthound-1.1.1/tests/unit/stores/batching/test_base.py +286 -0
  1253. truthound-1.1.1/tests/unit/stores/batching/test_buffer.py +225 -0
  1254. truthound-1.1.1/tests/unit/stores/batching/test_writer.py +306 -0
  1255. truthound-1.1.1/tests/unit/stores/caching/__init__.py +1 -0
  1256. truthound-1.1.1/tests/unit/stores/caching/test_backends.py +295 -0
  1257. truthound-1.1.1/tests/unit/stores/observability/__init__.py +1 -0
  1258. truthound-1.1.1/tests/unit/stores/observability/test_audit.py +416 -0
  1259. truthound-1.1.1/tests/unit/stores/observability/test_metrics.py +353 -0
  1260. truthound-1.1.1/tests/unit/stores/observability/test_store.py +431 -0
  1261. truthound-1.1.1/tests/unit/stores/observability/test_tracing.py +391 -0
  1262. truthound-1.1.1/tests/unit/stores/replication/__init__.py +1 -0
  1263. truthound-1.1.1/tests/unit/stores/replication/test_base.py +244 -0
  1264. truthound-1.1.1/tests/unit/stores/test_azure_blob.py +329 -0
  1265. truthound-1.1.1/tests/unit/stores/test_migration.py +481 -0
  1266. truthound-1.1.1/tests/unit/stores/test_retention.py +410 -0
  1267. truthound-1.1.1/tests/unit/stores/test_tiering.py +641 -0
  1268. truthound-1.1.1/tests/unit/stores/test_versioning.py +218 -0
  1269. truthound-1.1.1/tests/unit/validators/test_enterprise_sdk.py +843 -0
  1270. truthound-1.1.1/tests/unit/validators/test_i18n.py +679 -0
  1271. truthound-1.1.1/tests/unit/validators/test_i18n_enterprise.py +784 -0
  1272. truthound-1.1.1/tests/unit/validators/test_pushdown_support.py +447 -0
  1273. truthound-1.1.1/tests/unit/validators/test_redos.py +327 -0
  1274. truthound-1.1.1/tests/unit/validators/test_redos_advanced.py +613 -0
  1275. truthound-1.1.1/tests/unit/validators/test_redos_ml.py +907 -0
  1276. truthound-1.1.1/tests/unit/validators/test_sdk.py +615 -0
  1277. truthound-1.1.1/tests/unit/validators/test_timeout.py +496 -0
  1278. truthound-1.1.1/tests/unit/validators/test_timeout_advanced.py +1081 -0
  1279. truthound-1.1.1/tests/validators/optimization/__init__.py +1 -0
  1280. truthound-1.1.1/tests/validators/optimization/test_orchestrator.py +722 -0
  1281. truthound-1.1.1/tests/validators/optimization/test_profiling.py +1217 -0
  1282. truthound-1.1.1/tests/validators/test_approximate_validators.py +223 -0
  1283. truthound-1.1.1/tests/validators/test_early_termination.py +462 -0
  1284. truthound-1.1.1/tests/validators/test_edge_cases.py +681 -0
  1285. truthound-1.1.1/tests/validators/test_expression_based.py +597 -0
  1286. truthound-1.1.1/tests/validators/test_nan_validators.py +219 -0
  1287. truthound-1.1.1/tests/validators/test_regex_validation.py +221 -0
  1288. truthound-1.1.1/tests/validators/test_streaming_validators.py +249 -0
  1289. truthound-1.1.1/tests/validators/test_vectorized_validators.py +505 -0
  1290. truthound-1.1.1/truthound.yaml +47 -0
  1291. truthound-1.1.1/uv.lock +3488 -0
@@ -0,0 +1,162 @@
1
+ # Cloud DW Integration Tests Setup Guide
2
+
3
+ This guide explains how to configure GitHub Actions secrets to run Cloud DW integration tests.
4
+
5
+ ## Overview
6
+
7
+ The integration test workflow (`.github/workflows/integration-tests.yml`) supports:
8
+ - **BigQuery** (Google Cloud)
9
+ - **Snowflake**
10
+ - **Redshift** (AWS)
11
+ - **Databricks**
12
+
13
+ Tests run automatically on:
14
+ - Push to `main` branch (full execution)
15
+ - Pull requests (dry-run mode - no actual queries)
16
+ - Weekly schedule (Sunday midnight UTC)
17
+ - Manual trigger (workflow_dispatch)
18
+
19
+ ## Required GitHub Secrets
20
+
21
+ Navigate to your repository's **Settings > Secrets and variables > Actions** to add these secrets.
22
+
23
+ ### BigQuery
24
+
25
+ | Secret Name | Description | Example |
26
+ |-------------|-------------|---------|
27
+ | `GCP_SERVICE_ACCOUNT_KEY` | Service account JSON key (full content) | `{"type": "service_account", ...}` |
28
+ | `BIGQUERY_PROJECT` | GCP project ID | `my-project-123` |
29
+ | `BIGQUERY_LOCATION` | (Optional) Dataset location | `US` (default) |
30
+
31
+ **Setup Steps:**
32
+ 1. Create a service account in GCP Console
33
+ 2. Grant roles: `BigQuery Data Editor`, `BigQuery Job User`
34
+ 3. Create and download JSON key
35
+ 4. Paste the entire JSON content as `GCP_SERVICE_ACCOUNT_KEY`
36
+
37
+ ### Snowflake
38
+
39
+ | Secret Name | Description | Example |
40
+ |-------------|-------------|---------|
41
+ | `SNOWFLAKE_ACCOUNT` | Account identifier | `abc12345.us-east-1` |
42
+ | `SNOWFLAKE_USER` | Username | `test_user` |
43
+ | `SNOWFLAKE_PASSWORD` | Password | `***` |
44
+ | `SNOWFLAKE_WAREHOUSE` | (Optional) Warehouse name | `COMPUTE_WH` |
45
+ | `SNOWFLAKE_DATABASE` | (Optional) Database name | `TEST_DB` |
46
+ | `SNOWFLAKE_ROLE` | (Optional) Role name | `SYSADMIN` |
47
+
48
+ **Setup Steps:**
49
+ 1. Create a dedicated test user in Snowflake
50
+ 2. Grant minimal permissions for test database
51
+ 3. Add secrets to GitHub
52
+
53
+ ### Redshift
54
+
55
+ | Secret Name | Description | Example |
56
+ |-------------|-------------|---------|
57
+ | `REDSHIFT_HOST` | Cluster endpoint | `cluster.abc123.us-east-1.redshift.amazonaws.com` |
58
+ | `REDSHIFT_DATABASE` | Database name | `dev` |
59
+ | `REDSHIFT_USER` | Username | `test_user` |
60
+ | `REDSHIFT_PASSWORD` | Password | `***` |
61
+ | `REDSHIFT_PORT` | (Optional) Port | `5439` (default) |
62
+ | `AWS_REGION` | (Optional) AWS region | `us-east-1` (default) |
63
+
64
+ **Setup Steps:**
65
+ 1. Create a Redshift cluster or use existing
66
+ 2. Create test user with limited permissions
67
+ 3. Ensure security group allows GitHub Actions IPs
68
+
69
+ ### Databricks
70
+
71
+ | Secret Name | Description | Example |
72
+ |-------------|-------------|---------|
73
+ | `DATABRICKS_HOST` | Workspace URL | `https://abc-123.cloud.databricks.com` |
74
+ | `DATABRICKS_HTTP_PATH` | SQL endpoint path | `/sql/1.0/warehouses/abc123` |
75
+ | `DATABRICKS_TOKEN` | Personal access token | `dapi...` |
76
+ | `DATABRICKS_CATALOG` | (Optional) Unity Catalog name | `main` |
77
+
78
+ **Setup Steps:**
79
+ 1. Create SQL warehouse in Databricks
80
+ 2. Generate personal access token
81
+ 3. Note the HTTP path from SQL warehouse settings
82
+
83
+ ## Cost Control
84
+
85
+ The workflow includes several cost control mechanisms:
86
+
87
+ ### Automatic Dry-Run Mode
88
+ - PR tests always run in dry-run mode (no actual queries)
89
+ - Use `TRUTHOUND_TEST_DRY_RUN=true` for local dry-run testing
90
+
91
+ ### Cost Limits
92
+ - Default max cost: $5.0 per test run
93
+ - Override via workflow dispatch: `max_cost` input
94
+ - Each query's estimated cost is checked before execution
95
+
96
+ ### Resource Cleanup
97
+ - Weekly cleanup job removes datasets older than 24 hours
98
+ - Test datasets use prefix `truthound_test_` for easy identification
99
+
100
+ ## Running Tests Locally
101
+
102
+ ```bash
103
+ # Set environment variables
104
+ export BIGQUERY_PROJECT="your-project"
105
+ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
106
+
107
+ # Run specific backend tests
108
+ pytest tests/integration/cloud_dw/ -v -m bigquery
109
+
110
+ # Run in dry-run mode
111
+ TRUTHOUND_TEST_DRY_RUN=true pytest tests/integration/cloud_dw/ -v
112
+
113
+ # Run with cost limit
114
+ TRUTHOUND_TEST_MAX_COST_USD=1.0 pytest tests/integration/cloud_dw/ -v
115
+ ```
116
+
117
+ ## Manual Workflow Trigger
118
+
119
+ You can manually trigger the workflow with custom options:
120
+
121
+ 1. Go to **Actions > Cloud DW Integration Tests**
122
+ 2. Click **Run workflow**
123
+ 3. Options:
124
+ - `backends`: Comma-separated list or "all"
125
+ - `dry_run`: Run without executing actual queries
126
+ - `max_cost`: Maximum cost limit in USD
127
+
128
+ ## Troubleshooting
129
+
130
+ ### Backend Not Running
131
+ - Check if the required secrets are set
132
+ - The preflight job logs which backends are configured
133
+
134
+ ### Authentication Failures
135
+ - Verify secret values (no extra whitespace)
136
+ - Check service account permissions
137
+ - Ensure tokens haven't expired
138
+
139
+ ### Cost Limit Exceeded
140
+ - Reduce test data size
141
+ - Use dry-run mode for development
142
+ - Increase `max_cost` for one-time runs
143
+
144
+ ### Stale Resources
145
+ - Run cleanup manually via workflow dispatch
146
+ - Check for orphaned test datasets in cloud console
147
+
148
+ ## Security Best Practices
149
+
150
+ 1. **Use dedicated test credentials** - Never use production credentials
151
+ 2. **Minimal permissions** - Grant only required permissions to test accounts
152
+ 3. **Regular rotation** - Rotate secrets periodically
153
+ 4. **Audit access** - Monitor secret usage in GitHub audit logs
154
+ 5. **Environment isolation** - Use separate test projects/databases
155
+
156
+ ## Viewing Results
157
+
158
+ After a test run:
159
+ 1. Go to **Actions** tab
160
+ 2. Click on the workflow run
161
+ 3. View the **Summary** for pass/fail status per backend
162
+ 4. Download **Artifacts** for detailed JUnit XML reports
@@ -0,0 +1,448 @@
1
+ name: Cloud DW Integration Tests
2
+
3
+ on:
4
+ # Run on push to main (after PR merge)
5
+ push:
6
+ branches:
7
+ - main
8
+ paths:
9
+ - 'src/truthound/datasources/**'
10
+ - 'src/truthound/validators/**'
11
+ - 'tests/integration/**'
12
+ - '.github/workflows/integration-tests.yml'
13
+
14
+ # Run on PR (dry-run mode only)
15
+ pull_request:
16
+ branches:
17
+ - main
18
+ paths:
19
+ - 'src/truthound/datasources/**'
20
+ - 'src/truthound/validators/**'
21
+ - 'tests/integration/**'
22
+
23
+ # Allow manual trigger
24
+ workflow_dispatch:
25
+ inputs:
26
+ backends:
27
+ description: 'Backends to test (comma-separated, or "all")'
28
+ required: false
29
+ default: 'all'
30
+ dry_run:
31
+ description: 'Run in dry-run mode'
32
+ required: false
33
+ default: 'false'
34
+ type: boolean
35
+ max_cost:
36
+ description: 'Maximum cost limit (USD)'
37
+ required: false
38
+ default: '5.0'
39
+ include_expensive:
40
+ description: 'Include expensive tests (performance benchmarks)'
41
+ required: false
42
+ default: 'false'
43
+ type: boolean
44
+ include_truthound:
45
+ description: 'Include Truthound validator tests'
46
+ required: false
47
+ default: 'true'
48
+ type: boolean
49
+
50
+ # Scheduled run (weekly on Sunday at midnight UTC)
51
+ schedule:
52
+ - cron: '0 0 * * 0'
53
+
54
+ # Limit concurrent runs
55
+ concurrency:
56
+ group: integration-tests-${{ github.ref }}
57
+ cancel-in-progress: true
58
+
59
+ env:
60
+ PYTHON_VERSION: '3.11'
61
+ TRUTHOUND_TEST_LOG_QUERIES: 'true'
62
+ TRUTHOUND_TEST_METRICS: 'true'
63
+ TRUTHOUND_TEST_COST_TRACKING: 'true'
64
+
65
+ jobs:
66
+ # Pre-flight checks
67
+ preflight:
68
+ name: Pre-flight Checks
69
+ runs-on: ubuntu-latest
70
+ outputs:
71
+ backends: ${{ steps.detect.outputs.backends }}
72
+ is_pr: ${{ steps.detect.outputs.is_pr }}
73
+
74
+ steps:
75
+ - name: Checkout
76
+ uses: actions/checkout@v4
77
+
78
+ - name: Detect available backends
79
+ id: detect
80
+ run: |
81
+ # Determine which backends are configured
82
+ BACKENDS=""
83
+
84
+ if [ -n "${{ secrets.BIGQUERY_PROJECT }}" ]; then
85
+ BACKENDS="${BACKENDS}bigquery,"
86
+ fi
87
+
88
+ if [ -n "${{ secrets.SNOWFLAKE_ACCOUNT }}" ]; then
89
+ BACKENDS="${BACKENDS}snowflake,"
90
+ fi
91
+
92
+ if [ -n "${{ secrets.REDSHIFT_HOST }}" ]; then
93
+ BACKENDS="${BACKENDS}redshift,"
94
+ fi
95
+
96
+ if [ -n "${{ secrets.DATABRICKS_HOST }}" ]; then
97
+ BACKENDS="${BACKENDS}databricks,"
98
+ fi
99
+
100
+ # Remove trailing comma
101
+ BACKENDS="${BACKENDS%,}"
102
+
103
+ # Check if manual input overrides
104
+ if [ "${{ github.event.inputs.backends }}" != "" ] && [ "${{ github.event.inputs.backends }}" != "all" ]; then
105
+ BACKENDS="${{ github.event.inputs.backends }}"
106
+ fi
107
+
108
+ echo "backends=${BACKENDS:-none}" >> $GITHUB_OUTPUT
109
+ echo "is_pr=${{ github.event_name == 'pull_request' }}" >> $GITHUB_OUTPUT
110
+
111
+ echo "Detected backends: ${BACKENDS:-none}"
112
+
113
+ # BigQuery Integration Tests
114
+ bigquery:
115
+ name: BigQuery Tests
116
+ needs: preflight
117
+ if: contains(needs.preflight.outputs.backends, 'bigquery')
118
+ runs-on: ubuntu-latest
119
+
120
+ steps:
121
+ - name: Checkout
122
+ uses: actions/checkout@v4
123
+
124
+ - name: Set up Python
125
+ uses: actions/setup-python@v5
126
+ with:
127
+ python-version: ${{ env.PYTHON_VERSION }}
128
+
129
+ - name: Install dependencies
130
+ run: |
131
+ pip install -e ".[dev,bigquery]"
132
+
133
+ - name: Authenticate to GCP
134
+ uses: google-github-actions/auth@v2
135
+ with:
136
+ credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
137
+
138
+ - name: Run BigQuery tests
139
+ env:
140
+ BIGQUERY_PROJECT: ${{ secrets.BIGQUERY_PROJECT }}
141
+ BIGQUERY_LOCATION: ${{ secrets.BIGQUERY_LOCATION || 'US' }}
142
+ TRUTHOUND_TEST_DRY_RUN: ${{ needs.preflight.outputs.is_pr == 'true' || github.event.inputs.dry_run == 'true' }}
143
+ TRUTHOUND_TEST_MAX_COST_USD: ${{ github.event.inputs.max_cost || '5.0' }}
144
+ run: |
145
+ MARKERS="bigquery"
146
+ SKIP_EXPENSIVE=""
147
+
148
+ # Skip expensive tests unless explicitly requested
149
+ if [ "${{ github.event.inputs.include_expensive }}" != "true" ]; then
150
+ SKIP_EXPENSIVE="--skip-expensive"
151
+ fi
152
+
153
+ # Include Truthound validator tests
154
+ if [ "${{ github.event.inputs.include_truthound }}" = "true" ] || [ "${{ github.event.inputs.include_truthound }}" = "" ]; then
155
+ MARKERS="${MARKERS} and truthound"
156
+ fi
157
+
158
+ pytest tests/integration/cloud_dw/ \
159
+ -v \
160
+ -m "${MARKERS}" \
161
+ ${SKIP_EXPENSIVE} \
162
+ --tb=short \
163
+ --junitxml=test-results/bigquery.xml \
164
+ 2>&1 | tee test-results/bigquery.log
165
+
166
+ - name: Upload test results
167
+ uses: actions/upload-artifact@v4
168
+ if: always()
169
+ with:
170
+ name: bigquery-results
171
+ path: test-results/
172
+
173
+ # Snowflake Integration Tests
174
+ snowflake:
175
+ name: Snowflake Tests
176
+ needs: preflight
177
+ if: contains(needs.preflight.outputs.backends, 'snowflake')
178
+ runs-on: ubuntu-latest
179
+
180
+ steps:
181
+ - name: Checkout
182
+ uses: actions/checkout@v4
183
+
184
+ - name: Set up Python
185
+ uses: actions/setup-python@v5
186
+ with:
187
+ python-version: ${{ env.PYTHON_VERSION }}
188
+
189
+ - name: Install dependencies
190
+ run: |
191
+ pip install -e ".[dev,snowflake]"
192
+
193
+ - name: Run Snowflake tests
194
+ env:
195
+ SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
196
+ SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }}
197
+ SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
198
+ SNOWFLAKE_WAREHOUSE: ${{ secrets.SNOWFLAKE_WAREHOUSE }}
199
+ SNOWFLAKE_DATABASE: ${{ secrets.SNOWFLAKE_DATABASE }}
200
+ SNOWFLAKE_ROLE: ${{ secrets.SNOWFLAKE_ROLE }}
201
+ TRUTHOUND_TEST_DRY_RUN: ${{ needs.preflight.outputs.is_pr == 'true' || github.event.inputs.dry_run == 'true' }}
202
+ TRUTHOUND_TEST_MAX_COST_USD: ${{ github.event.inputs.max_cost || '5.0' }}
203
+ run: |
204
+ pytest tests/integration/cloud_dw/ \
205
+ -v \
206
+ -m snowflake \
207
+ --tb=short \
208
+ --junitxml=test-results/snowflake.xml
209
+
210
+ - name: Upload test results
211
+ uses: actions/upload-artifact@v4
212
+ if: always()
213
+ with:
214
+ name: snowflake-results
215
+ path: test-results/
216
+
217
+ # Redshift Integration Tests
218
+ redshift:
219
+ name: Redshift Tests
220
+ needs: preflight
221
+ if: contains(needs.preflight.outputs.backends, 'redshift')
222
+ runs-on: ubuntu-latest
223
+
224
+ steps:
225
+ - name: Checkout
226
+ uses: actions/checkout@v4
227
+
228
+ - name: Set up Python
229
+ uses: actions/setup-python@v5
230
+ with:
231
+ python-version: ${{ env.PYTHON_VERSION }}
232
+
233
+ - name: Install dependencies
234
+ run: |
235
+ pip install -e ".[dev,redshift]"
236
+
237
+ - name: Run Redshift tests
238
+ env:
239
+ REDSHIFT_HOST: ${{ secrets.REDSHIFT_HOST }}
240
+ REDSHIFT_DATABASE: ${{ secrets.REDSHIFT_DATABASE }}
241
+ REDSHIFT_USER: ${{ secrets.REDSHIFT_USER }}
242
+ REDSHIFT_PASSWORD: ${{ secrets.REDSHIFT_PASSWORD }}
243
+ REDSHIFT_PORT: ${{ secrets.REDSHIFT_PORT || '5439' }}
244
+ AWS_REGION: ${{ secrets.AWS_REGION || 'us-east-1' }}
245
+ TRUTHOUND_TEST_DRY_RUN: ${{ needs.preflight.outputs.is_pr == 'true' || github.event.inputs.dry_run == 'true' }}
246
+ TRUTHOUND_TEST_MAX_COST_USD: ${{ github.event.inputs.max_cost || '5.0' }}
247
+ run: |
248
+ pytest tests/integration/cloud_dw/ \
249
+ -v \
250
+ -m redshift \
251
+ --tb=short \
252
+ --junitxml=test-results/redshift.xml
253
+
254
+ - name: Upload test results
255
+ uses: actions/upload-artifact@v4
256
+ if: always()
257
+ with:
258
+ name: redshift-results
259
+ path: test-results/
260
+
261
+ # Databricks Integration Tests
262
+ databricks:
263
+ name: Databricks Tests
264
+ needs: preflight
265
+ if: contains(needs.preflight.outputs.backends, 'databricks')
266
+ runs-on: ubuntu-latest
267
+
268
+ steps:
269
+ - name: Checkout
270
+ uses: actions/checkout@v4
271
+
272
+ - name: Set up Python
273
+ uses: actions/setup-python@v5
274
+ with:
275
+ python-version: ${{ env.PYTHON_VERSION }}
276
+
277
+ - name: Install dependencies
278
+ run: |
279
+ pip install -e ".[dev,databricks]"
280
+
281
+ - name: Run Databricks tests
282
+ env:
283
+ DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
284
+ DATABRICKS_HTTP_PATH: ${{ secrets.DATABRICKS_HTTP_PATH }}
285
+ DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
286
+ DATABRICKS_CATALOG: ${{ secrets.DATABRICKS_CATALOG }}
287
+ TRUTHOUND_TEST_DRY_RUN: ${{ needs.preflight.outputs.is_pr == 'true' || github.event.inputs.dry_run == 'true' }}
288
+ TRUTHOUND_TEST_MAX_COST_USD: ${{ github.event.inputs.max_cost || '5.0' }}
289
+ run: |
290
+ pytest tests/integration/cloud_dw/ \
291
+ -v \
292
+ -m databricks \
293
+ --tb=short \
294
+ --junitxml=test-results/databricks.xml
295
+
296
+ - name: Upload test results
297
+ uses: actions/upload-artifact@v4
298
+ if: always()
299
+ with:
300
+ name: databricks-results
301
+ path: test-results/
302
+
303
+ # Aggregate results
304
+ summary:
305
+ name: Test Summary
306
+ needs: [preflight, bigquery, snowflake, redshift, databricks]
307
+ if: always()
308
+ runs-on: ubuntu-latest
309
+
310
+ steps:
311
+ - name: Download all artifacts
312
+ uses: actions/download-artifact@v4
313
+ with:
314
+ path: all-results/
315
+
316
+ - name: Generate summary
317
+ run: |
318
+ echo "## Cloud DW Integration Test Summary" >> $GITHUB_STEP_SUMMARY
319
+ echo "" >> $GITHUB_STEP_SUMMARY
320
+ echo "### Test Results" >> $GITHUB_STEP_SUMMARY
321
+ echo "" >> $GITHUB_STEP_SUMMARY
322
+ echo "| Backend | Status | Tests | Duration |" >> $GITHUB_STEP_SUMMARY
323
+ echo "|---------|--------|-------|----------|" >> $GITHUB_STEP_SUMMARY
324
+
325
+ TOTAL_TESTS=0
326
+ TOTAL_PASSED=0
327
+ TOTAL_FAILED=0
328
+
329
+ # Check each backend result
330
+ for backend in bigquery snowflake redshift databricks; do
331
+ if [ -d "all-results/${backend}-results" ]; then
332
+ if [ -f "all-results/${backend}-results/${backend}.xml" ]; then
333
+ # Parse JUnit XML for pass/fail
334
+ tests=$(grep -o 'tests="[0-9]*"' "all-results/${backend}-results/${backend}.xml" | head -1 | grep -o '[0-9]*' || echo "0")
335
+ failures=$(grep -o 'failures="[0-9]*"' "all-results/${backend}-results/${backend}.xml" | head -1 | grep -o '[0-9]*' || echo "0")
336
+ errors=$(grep -o 'errors="[0-9]*"' "all-results/${backend}-results/${backend}.xml" | head -1 | grep -o '[0-9]*' || echo "0")
337
+ time=$(grep -o 'time="[0-9.]*"' "all-results/${backend}-results/${backend}.xml" | head -1 | grep -o '[0-9.]*' || echo "0")
338
+
339
+ TOTAL_TESTS=$((TOTAL_TESTS + tests))
340
+
341
+ if [ "${failures:-0}" = "0" ] && [ "${errors:-0}" = "0" ]; then
342
+ echo "| ${backend} | ✅ Passed | ${tests} | ${time}s |" >> $GITHUB_STEP_SUMMARY
343
+ TOTAL_PASSED=$((TOTAL_PASSED + tests))
344
+ else
345
+ echo "| ${backend} | ❌ Failed | ${failures}/${tests} failed | ${time}s |" >> $GITHUB_STEP_SUMMARY
346
+ TOTAL_FAILED=$((TOTAL_FAILED + failures))
347
+ fi
348
+ else
349
+ echo "| ${backend} | ⚠️ No results | - | - |" >> $GITHUB_STEP_SUMMARY
350
+ fi
351
+ else
352
+ echo "| ${backend} | ⏭️ Skipped | - | - |" >> $GITHUB_STEP_SUMMARY
353
+ fi
354
+ done
355
+
356
+ echo "" >> $GITHUB_STEP_SUMMARY
357
+ echo "### Summary" >> $GITHUB_STEP_SUMMARY
358
+ echo "" >> $GITHUB_STEP_SUMMARY
359
+ echo "- **Total Tests:** ${TOTAL_TESTS}" >> $GITHUB_STEP_SUMMARY
360
+ echo "- **Passed:** ${TOTAL_PASSED}" >> $GITHUB_STEP_SUMMARY
361
+ echo "- **Failed:** ${TOTAL_FAILED}" >> $GITHUB_STEP_SUMMARY
362
+ echo "- **Run mode:** ${{ needs.preflight.outputs.is_pr == 'true' && 'Dry-run (PR)' || 'Full execution' }}" >> $GITHUB_STEP_SUMMARY
363
+ echo "- **Cost limit:** \${{ github.event.inputs.max_cost || '5.0' }} USD" >> $GITHUB_STEP_SUMMARY
364
+
365
+ # Parse cost from logs if available
366
+ echo "" >> $GITHUB_STEP_SUMMARY
367
+ echo "### Cost Tracking" >> $GITHUB_STEP_SUMMARY
368
+ echo "" >> $GITHUB_STEP_SUMMARY
369
+ echo "| Backend | Bytes Processed | Estimated Cost |" >> $GITHUB_STEP_SUMMARY
370
+ echo "|---------|-----------------|----------------|" >> $GITHUB_STEP_SUMMARY
371
+
372
+ for backend in bigquery snowflake redshift databricks; do
373
+ if [ -f "all-results/${backend}-results/${backend}.log" ]; then
374
+ bytes=$(grep -o 'bytes_processed=[0-9]*' "all-results/${backend}-results/${backend}.log" | tail -1 | cut -d= -f2 || echo "N/A")
375
+ cost=$(grep -o 'estimated_cost=\$[0-9.]*' "all-results/${backend}-results/${backend}.log" | tail -1 | cut -d= -f2 || echo "N/A")
376
+ echo "| ${backend} | ${bytes:-N/A} | ${cost:-N/A} |" >> $GITHUB_STEP_SUMMARY
377
+ fi
378
+ done
379
+
380
+ - name: Check for failures
381
+ run: |
382
+ # Exit with error if any backend failed
383
+ for dir in all-results/*-results; do
384
+ if [ -d "$dir" ]; then
385
+ for xml in $dir/*.xml; do
386
+ if [ -f "$xml" ]; then
387
+ failures=$(grep -o 'failures="[0-9]*"' "$xml" | head -1 | grep -o '[0-9]*')
388
+ errors=$(grep -o 'errors="[0-9]*"' "$xml" | head -1 | grep -o '[0-9]*')
389
+ if [ "${failures:-0}" != "0" ] || [ "${errors:-0}" != "0" ]; then
390
+ echo "Tests failed in $(basename $dir)"
391
+ exit 1
392
+ fi
393
+ fi
394
+ done
395
+ fi
396
+ done
397
+ echo "All tests passed!"
398
+
399
+ # Cleanup stale resources (weekly only)
400
+ cleanup:
401
+ name: Cleanup Stale Resources
402
+ needs: summary
403
+ if: github.event_name == 'schedule'
404
+ runs-on: ubuntu-latest
405
+
406
+ steps:
407
+ - name: Checkout
408
+ uses: actions/checkout@v4
409
+
410
+ - name: Set up Python
411
+ uses: actions/setup-python@v5
412
+ with:
413
+ python-version: ${{ env.PYTHON_VERSION }}
414
+
415
+ - name: Install dependencies
416
+ run: |
417
+ pip install -e ".[dev,bigquery,snowflake]"
418
+
419
+ - name: Authenticate to GCP
420
+ if: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
421
+ uses: google-github-actions/auth@v2
422
+ with:
423
+ credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
424
+
425
+ - name: Cleanup stale resources
426
+ env:
427
+ BIGQUERY_PROJECT: ${{ secrets.BIGQUERY_PROJECT }}
428
+ SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
429
+ SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }}
430
+ SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
431
+ run: |
432
+ python -c "
433
+ from tests.integration.cloud_dw.backends import get_available_backends, get_backend
434
+ from tests.integration.cloud_dw.base import IntegrationTestConfig
435
+
436
+ config = IntegrationTestConfig(cleanup_after_hours=24)
437
+
438
+ for backend_name in get_available_backends():
439
+ try:
440
+ print(f'Cleaning up stale resources in {backend_name}...')
441
+ backend = get_backend(backend_name, config)
442
+ backend.connect()
443
+ cleaned = backend.cleanup_stale_datasets(max_hours=24)
444
+ print(f' Cleaned up {cleaned} stale datasets')
445
+ backend.disconnect()
446
+ except Exception as e:
447
+ print(f' Error: {e}')
448
+ "
@@ -0,0 +1,98 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+
27
+ # PyInstaller
28
+ *.manifest
29
+ *.spec
30
+
31
+ # Installer logs
32
+ pip-log.txt
33
+ pip-delete-this-directory.txt
34
+
35
+ # Unit test / coverage reports
36
+ htmlcov/
37
+ .tox/
38
+ .nox/
39
+ .coverage
40
+ .coverage.*
41
+ .cache
42
+ nosetests.xml
43
+ coverage.xml
44
+ *.cover
45
+ *.py,cover
46
+ .hypothesis/
47
+ .pytest_cache/
48
+
49
+ # Translations
50
+ *.mo
51
+ *.pot
52
+
53
+ # Environments
54
+ .env
55
+ .venv
56
+ env/
57
+ venv/
58
+ ENV/
59
+ env.bak/
60
+ venv.bak/
61
+
62
+ # IDE
63
+ .idea/
64
+ .vscode/
65
+ *.swp
66
+ *.swo
67
+ *~
68
+
69
+ # mypy
70
+ .mypy_cache/
71
+ .dmypy.json
72
+ dmypy.json
73
+
74
+ # ruff
75
+ .ruff_cache/
76
+
77
+ # OS
78
+ .DS_Store
79
+ Thumbs.db
80
+
81
+ # Project specific
82
+ *.csv
83
+ *.parquet
84
+ *.json
85
+ !pyproject.toml
86
+
87
+ # Claude Code
88
+ .claude/
89
+ CLAUDE.md
90
+
91
+ # Truthound cache
92
+ .truthound/
93
+
94
+ .truthound_keys
95
+ site/
96
+
97
+ #copilot
98
+ copilot-instructions.md