pointblank 0.8.4__tar.gz → 0.8.6__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 (274) hide show
  1. pointblank-0.8.6/PKG-INFO +312 -0
  2. pointblank-0.8.6/README.md +230 -0
  3. {pointblank-0.8.4 → pointblank-0.8.6}/docs/_quarto.yml +2 -0
  4. pointblank-0.8.6/docs/assets/pointblank-sales-data.png +0 -0
  5. pointblank-0.8.6/docs/assets/pointblank-step-report.png +0 -0
  6. pointblank-0.8.6/docs/index.qmd +202 -0
  7. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/__init__.py +2 -0
  8. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/_constants.py +13 -0
  9. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/_constants_translations.py +216 -0
  10. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/_interrogation.py +182 -0
  11. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/_utils.py +2 -0
  12. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/column.py +352 -4
  13. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/data/api-docs.txt +270 -4
  14. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/validate.py +462 -5
  15. pointblank-0.8.6/pointblank.egg-info/PKG-INFO +312 -0
  16. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank.egg-info/SOURCES.txt +2 -0
  17. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +43 -2
  18. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_column.py +779 -0
  19. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_validate.py +131 -18
  20. pointblank-0.8.4/PKG-INFO +0 -269
  21. pointblank-0.8.4/README.md +0 -187
  22. pointblank-0.8.4/docs/index.qmd +0 -150
  23. pointblank-0.8.4/pointblank.egg-info/PKG-INFO +0 -269
  24. {pointblank-0.8.4 → pointblank-0.8.6}/.github/CODE_OF_CONDUCT.md +0 -0
  25. {pointblank-0.8.4 → pointblank-0.8.6}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  26. {pointblank-0.8.4 → pointblank-0.8.6}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  27. {pointblank-0.8.4 → pointblank-0.8.6}/.github/ISSUE_TEMPLATE/question.md +0 -0
  28. {pointblank-0.8.4 → pointblank-0.8.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  29. {pointblank-0.8.4 → pointblank-0.8.6}/.github/SECURITY.md +0 -0
  30. {pointblank-0.8.4 → pointblank-0.8.6}/.github/workflows/ci-docs.yaml +0 -0
  31. {pointblank-0.8.4 → pointblank-0.8.6}/.github/workflows/ci-tests.yaml +0 -0
  32. {pointblank-0.8.4 → pointblank-0.8.6}/.github/workflows/code-checks.yaml +0 -0
  33. {pointblank-0.8.4 → pointblank-0.8.6}/.gitignore +0 -0
  34. {pointblank-0.8.4 → pointblank-0.8.6}/.pre-commit-config.yaml +0 -0
  35. {pointblank-0.8.4 → pointblank-0.8.6}/.vscode/settings.json +0 -0
  36. {pointblank-0.8.4 → pointblank-0.8.6}/CITATION.cff +0 -0
  37. {pointblank-0.8.4 → pointblank-0.8.6}/CONTRIBUTING.md +0 -0
  38. {pointblank-0.8.4 → pointblank-0.8.6}/LICENSE +0 -0
  39. {pointblank-0.8.4 → pointblank-0.8.6}/Makefile +0 -0
  40. {pointblank-0.8.4 → pointblank-0.8.6}/data_raw/game_revenue.csv +0 -0
  41. {pointblank-0.8.4 → pointblank-0.8.6}/data_raw/nycflights.csv +0 -0
  42. {pointblank-0.8.4 → pointblank-0.8.6}/data_raw/nycflights.ddb +0 -0
  43. {pointblank-0.8.4 → pointblank-0.8.6}/data_raw/small_table.csv +0 -0
  44. {pointblank-0.8.4 → pointblank-0.8.6}/data_raw/x-01-parquet.qmd +0 -0
  45. {pointblank-0.8.4 → pointblank-0.8.6}/data_raw/x-02-duckdb.qmd +0 -0
  46. {pointblank-0.8.4 → pointblank-0.8.6}/data_raw/x-03-sqlite.qmd +0 -0
  47. {pointblank-0.8.4 → pointblank-0.8.6}/docs/.gitignore +0 -0
  48. {pointblank-0.8.4 → pointblank-0.8.6}/docs/_extensions/machow/interlinks/.gitignore +0 -0
  49. {pointblank-0.8.4 → pointblank-0.8.6}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
  50. {pointblank-0.8.4 → pointblank-0.8.6}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
  51. {pointblank-0.8.4 → pointblank-0.8.6}/docs/assets/fav-logo.png +0 -0
  52. {pointblank-0.8.4 → pointblank-0.8.6}/docs/assets/pointblank-tabular-report.png +0 -0
  53. {pointblank-0.8.4 → pointblank-0.8.6}/docs/assets/pointblank_logo.svg +0 -0
  54. {pointblank-0.8.4 → pointblank-0.8.6}/docs/assets/validation-table-diagram.png +0 -0
  55. {pointblank-0.8.4 → pointblank-0.8.6}/docs/blog/index.qmd +0 -0
  56. {pointblank-0.8.4 → pointblank-0.8.6}/docs/blog/intro-pointblank/index.qmd +0 -0
  57. {pointblank-0.8.4 → pointblank-0.8.6}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
  58. {pointblank-0.8.4 → pointblank-0.8.6}/docs/blog/intro-pointblank/step_report.png +0 -0
  59. {pointblank-0.8.4 → pointblank-0.8.6}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
  60. {pointblank-0.8.4 → pointblank-0.8.6}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
  61. {pointblank-0.8.4 → pointblank-0.8.6}/docs/blog/pointblank_blog_logo.png +0 -0
  62. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/01-starter/index.qmd +0 -0
  63. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/02-advanced/index.qmd +0 -0
  64. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/03-data-extracts/index.qmd +0 -0
  65. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/04-sundered-data/index.qmd +0 -0
  66. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/05-step-report-column-check/index.qmd +0 -0
  67. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
  68. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
  69. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/check-row-column-counts/index.qmd +0 -0
  70. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/checks-for-missing/index.qmd +0 -0
  71. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
  72. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/column-selector-functions/index.qmd +0 -0
  73. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/comparisons-across-columns/index.qmd +0 -0
  74. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/data/game_revenue.parquet +0 -0
  75. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
  76. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
  77. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/expect-text-pattern/index.qmd +0 -0
  78. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/failure-thresholds/index.qmd +0 -0
  79. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/img/advanced_validation.png +0 -0
  80. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/img/data_extracts.png +0 -0
  81. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/img/starter_validation.png +0 -0
  82. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/img/step_report_column_schema.png +0 -0
  83. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/img/step_report_column_values.png +0 -0
  84. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/img/sundered_data.png +0 -0
  85. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/index.qmd +0 -0
  86. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/mutate-table-in-step/index.qmd +0 -0
  87. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/numeric-comparisons/index.qmd +0 -0
  88. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/schema-check/index.qmd +0 -0
  89. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/set-membership/index.qmd +0 -0
  90. {pointblank-0.8.4 → pointblank-0.8.6}/docs/demos/using-parquet-data/index.qmd +0 -0
  91. {pointblank-0.8.4 → pointblank-0.8.6}/docs/styles.css +0 -0
  92. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/across.qmd +0 -0
  93. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/actions.qmd +0 -0
  94. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/col-summary-tbl.qmd +0 -0
  95. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/columns.qmd +0 -0
  96. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/extracts.qmd +0 -0
  97. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/index.qmd +0 -0
  98. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/missing-vals-tbl.qmd +0 -0
  99. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/preprocessing.qmd +0 -0
  100. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/preview.qmd +0 -0
  101. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/sundering.qmd +0 -0
  102. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/thresholds.qmd +0 -0
  103. {pointblank-0.8.4 → pointblank-0.8.6}/docs/user-guide/types.qmd +0 -0
  104. {pointblank-0.8.4 → pointblank-0.8.6}/images/pointblank-tabular-report.png +0 -0
  105. {pointblank-0.8.4 → pointblank-0.8.6}/images/pointblank_logo.svg +0 -0
  106. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/_constants_docs.py +0 -0
  107. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/_typing.py +0 -0
  108. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/_utils_check_args.py +0 -0
  109. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/_utils_html.py +0 -0
  110. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/actions.py +0 -0
  111. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/assistant.py +0 -0
  112. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/data/game_revenue-duckdb.zip +0 -0
  113. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/data/game_revenue.zip +0 -0
  114. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/data/nycflights-duckdb.zip +0 -0
  115. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/data/nycflights.zip +0 -0
  116. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/data/polars-api-docs.txt +0 -0
  117. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/data/small_table-duckdb.zip +0 -0
  118. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/data/small_table.zip +0 -0
  119. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/datascan.py +0 -0
  120. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/draft.py +0 -0
  121. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/schema.py +0 -0
  122. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/tf.py +0 -0
  123. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank/thresholds.py +0 -0
  124. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank.egg-info/dependency_links.txt +0 -0
  125. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank.egg-info/requires.txt +0 -0
  126. {pointblank-0.8.4 → pointblank-0.8.6}/pointblank.egg-info/top_level.txt +0 -0
  127. {pointblank-0.8.4 → pointblank-0.8.6}/pyproject.toml +0 -0
  128. {pointblank-0.8.4 → pointblank-0.8.6}/setup.cfg +0 -0
  129. {pointblank-0.8.4 → pointblank-0.8.6}/tests/__init__.py +0 -0
  130. {pointblank-0.8.4 → pointblank-0.8.6}/tests/manual_tests/schema_step_reports.qmd +0 -0
  131. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
  132. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
  133. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
  134. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
  135. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
  136. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
  137. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
  138. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
  139. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
  140. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
  141. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
  142. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
  143. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
  144. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
  145. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
  146. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
  147. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
  148. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
  149. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
  150. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
  151. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
  152. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
  153. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
  154. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
  155. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
  156. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
  157. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
  158. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
  159. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
  160. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
  161. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
  162. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
  163. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
  164. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
  165. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
  166. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
  167. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
  168. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
  169. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
  170. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
  171. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
  172. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
  173. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
  174. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
  175. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
  176. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
  177. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
  178. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
  179. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
  180. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
  181. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
  182. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
  183. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
  184. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
  185. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
  186. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
  187. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
  188. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
  189. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
  190. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
  191. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
  192. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
  193. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
  194. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
  195. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
  196. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
  197. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
  198. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
  199. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
  200. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
  201. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
  202. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
  203. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
  204. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
  205. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
  206. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
  207. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
  208. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
  209. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
  210. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
  211. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
  212. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
  213. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
  214. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
  215. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
  216. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
  217. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
  218. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
  219. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
  220. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
  221. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
  222. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
  223. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
  224. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
  225. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
  226. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
  227. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
  228. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
  229. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
  230. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
  231. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
  232. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
  233. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
  234. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
  235. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +0 -0
  236. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +0 -0
  237. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  238. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  239. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
  240. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
  241. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  242. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  243. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  244. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
  245. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
  246. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  247. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
  248. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
  249. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
  250. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
  251. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
  252. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_memtable_variable_names/selector_helper_functions_no_match.html +0 -0
  253. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pd_variable_names/selector_helper_functions_no_match.html +0 -0
  254. {pointblank-0.8.4 → pointblank-0.8.6}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pl_variable_names/selector_helper_functions_no_match.html +0 -0
  255. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
  256. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
  257. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
  258. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
  259. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_xyz.ddb +0 -0
  260. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_xyz.parquet +0 -0
  261. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_xyz.sqlite +0 -0
  262. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
  263. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
  264. {pointblank-0.8.4 → pointblank-0.8.6}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
  265. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test__interrogation.py +0 -0
  266. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test__utils.py +0 -0
  267. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test__utils_check_args.py +0 -0
  268. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_actions.py +0 -0
  269. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_assistant.py +0 -0
  270. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_datascan.py +0 -0
  271. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_draft.py +0 -0
  272. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_schema.py +0 -0
  273. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_tf.py +0 -0
  274. {pointblank-0.8.4 → pointblank-0.8.6}/tests/test_thresholds.py +0 -0
@@ -0,0 +1,312 @@
1
+ Metadata-Version: 2.4
2
+ Name: pointblank
3
+ Version: 0.8.6
4
+ Summary: Find out if your data is what you think it is.
5
+ Author-email: Richard Iannone <riannone@me.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2024-2025 Posit Software, PBC
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Project-URL: homepage, https://github.com/posit-dev/pointblank
29
+ Keywords: data,quality,validation,testing,data science,data engineering
30
+ Classifier: Development Status :: 5 - Production/Stable
31
+ Classifier: Intended Audience :: Science/Research
32
+ Classifier: License :: OSI Approved :: MIT License
33
+ Classifier: Programming Language :: Python
34
+ Classifier: Programming Language :: Python :: 3
35
+ Classifier: Programming Language :: Python :: 3.10
36
+ Classifier: Programming Language :: Python :: 3.11
37
+ Classifier: Programming Language :: Python :: 3.12
38
+ Classifier: Operating System :: OS Independent
39
+ Classifier: Topic :: Scientific/Engineering
40
+ Requires-Python: >=3.10
41
+ Description-Content-Type: text/markdown
42
+ License-File: LICENSE
43
+ Requires-Dist: commonmark>=0.9.1
44
+ Requires-Dist: importlib-metadata
45
+ Requires-Dist: great_tables>=0.17.0
46
+ Requires-Dist: narwhals>=1.24.1
47
+ Requires-Dist: typing_extensions>=3.10.0.0
48
+ Requires-Dist: requests>=2.31.0
49
+ Provides-Extra: pd
50
+ Requires-Dist: pandas>=2.2.3; extra == "pd"
51
+ Provides-Extra: pl
52
+ Requires-Dist: polars>=1.24.0; extra == "pl"
53
+ Provides-Extra: generate
54
+ Requires-Dist: chatlas>=0.3.0; extra == "generate"
55
+ Requires-Dist: anthropic[bedrock]>=0.45.2; extra == "generate"
56
+ Requires-Dist: openai>=1.63.0; extra == "generate"
57
+ Requires-Dist: shiny>=1.3.0; extra == "generate"
58
+ Provides-Extra: databricks
59
+ Requires-Dist: ibis-framework[databricks]>=9.5.0; extra == "databricks"
60
+ Provides-Extra: duckdb
61
+ Requires-Dist: ibis-framework[duckdb]>=9.5.0; extra == "duckdb"
62
+ Provides-Extra: mysql
63
+ Requires-Dist: ibis-framework[mysql]>=9.5.0; extra == "mysql"
64
+ Provides-Extra: mssql
65
+ Requires-Dist: ibis-framework[mssql]>=9.5.0; extra == "mssql"
66
+ Provides-Extra: postgres
67
+ Requires-Dist: ibis-framework[postgres]>=9.5.0; extra == "postgres"
68
+ Provides-Extra: pyspark
69
+ Requires-Dist: ibis-framework[pyspark]>=9.5.0; extra == "pyspark"
70
+ Provides-Extra: snowflake
71
+ Requires-Dist: ibis-framework[snowflake]>=9.5.0; extra == "snowflake"
72
+ Provides-Extra: sqlite
73
+ Requires-Dist: ibis-framework[sqlite]>=9.5.0; extra == "sqlite"
74
+ Provides-Extra: docs
75
+ Requires-Dist: jupyter; extra == "docs"
76
+ Requires-Dist: nbclient>=0.10.0; extra == "docs"
77
+ Requires-Dist: nbformat>=5.10.4; extra == "docs"
78
+ Requires-Dist: quartodoc>=0.8.1; python_version >= "3.9" and extra == "docs"
79
+ Requires-Dist: pandas>=2.2.3; extra == "docs"
80
+ Requires-Dist: polars>=1.17.1; extra == "docs"
81
+ Dynamic: license-file
82
+
83
+ <div align="center">
84
+
85
+ <a href="https://posit-dev.github.io/pointblank/"><img src="https://posit-dev.github.io/pointblank/assets/pointblank_logo.svg" width="75%"/></a>
86
+
87
+ _Data validation made beautiful and powerful_
88
+
89
+ [![Python Versions](https://img.shields.io/pypi/pyversions/pointblank.svg)](https://pypi.python.org/pypi/pointblank)
90
+ [![PyPI](https://img.shields.io/pypi/v/pointblank)](https://pypi.org/project/pointblank/#history)
91
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/pointblank)](https://pypistats.org/packages/pointblank)
92
+ [![License](https://img.shields.io/github/license/posit-dev/pointblank)](https://img.shields.io/github/license/posit-dev/pointblank)
93
+
94
+ [![CI Build](https://github.com/posit-dev/pointblank/actions/workflows/ci-tests.yaml/badge.svg)](https://github.com/posit-dev/pointblank/actions/workflows/ci-tests.yaml)
95
+ [![Codecov branch](https://img.shields.io/codecov/c/github/posit-dev/pointblank/main.svg)](https://codecov.io/gh/posit-dev/pointblank)
96
+ [![Repo Status](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
97
+ [![Documentation](https://img.shields.io/badge/docs-project_website-blue.svg)](https://posit-dev.github.io/pointblank/)
98
+
99
+ [![Contributors](https://img.shields.io/github/contributors/posit-dev/pointblank)](https://github.com/posit-dev/pointblank/graphs/contributors)
100
+ [![Discord](https://img.shields.io/discord/1345877328982446110?color=%237289da&label=Discord)](https://discord.com/invite/YH7CybCNCQ)
101
+ [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.1%20adopted-ff69b4.svg)](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html)
102
+
103
+ </div>
104
+
105
+ ## What is Pointblank?
106
+
107
+ Pointblank is a modern data validation framework for Python that helps you trust your data with confidence. It provides a fluent, expressive API to validate your data against a wide range of constraints and presents results in beautiful, interactive reports.
108
+
109
+ Whether you're a data scientist, data engineer, or analyst, Pointblank helps you catch data quality issues before they impact your analyses or downstream systems.
110
+
111
+ ## Getting Started in 30 Seconds
112
+
113
+ ```python
114
+ import pointblank as pb
115
+
116
+ validation = (
117
+ pb.Validate(data=pb.load_dataset(dataset="small_table"))
118
+ .col_vals_gt(columns="d", value=100) # Validate values > 100
119
+ .col_vals_le(columns="c", value=5) # Validate values <= 5
120
+ .col_exists(columns=["date", "date_time"]) # Check columns exist
121
+ .interrogate() # Execute and collect results
122
+ )
123
+
124
+ # Get the validation report from the REPL with:
125
+ validation.get_tabular_report().show()
126
+
127
+ # From a notebook simply use:
128
+ validation
129
+ ```
130
+
131
+ <div align="center">
132
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-tabular-report.png" width="800px">
133
+ </div>
134
+
135
+ <br>
136
+
137
+ Why Choose Pointblank?
138
+
139
+ - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, and more!
140
+ - **Beautiful, interactive reports** - Crystal-clear validation results that highlight issues and help communicate data quality
141
+ - **Composable validation pipeline** - Chain validation steps into a complete data quality workflow
142
+ - **Threshold-based alerts** - Set 'warning', 'error', and 'critical' thresholds with custom actions
143
+ - **Practical outputs** - Use validation results to filter tables, extract problematic data, or trigger downstream processes
144
+
145
+ ## Real-World Example
146
+
147
+ ```python
148
+ import pointblank as pb
149
+ import polars as pl
150
+
151
+ # Load your data
152
+ sales_data = pl.read_csv("sales_data.csv")
153
+
154
+ # Create a comprehensive validation
155
+ validation = (
156
+ pb.Validate(
157
+ data=sales_data,
158
+ tbl_name="sales_data", # Name of the table for reporting
159
+ label="Real-world example.", # Label for the validation, appears in reports
160
+ thresholds=(0.01, 0.02, 0.05), # Set thresholds for warnings, errors, and critical issues
161
+ actions=pb.Actions( # Define actions for any threshold exceedance
162
+ critical="Major data quality issue found in step {step} ({time})."
163
+ ),
164
+ final_actions=pb.FinalActions( # Define final actions for the entire validation
165
+ pb.send_slack_notification(
166
+ webhook_url="https://hooks.slack.com/services/your/webhook/url"
167
+ )
168
+ ),
169
+ brief=True, # Add automatically-generated briefs for each step
170
+ )
171
+ .col_vals_between( # Check numeric ranges with precision
172
+ columns=["price", "quantity"],
173
+ left=0, right=1000
174
+ )
175
+ .col_vals_not_null( # Ensure that columns ending with '_id' don't have null values
176
+ columns=pb.ends_with("_id")
177
+ )
178
+ .col_vals_regex( # Validate patterns with regex
179
+ columns="email",
180
+ pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
181
+ )
182
+ .col_vals_in_set( # Check categorical values
183
+ columns="status",
184
+ set=["pending", "shipped", "delivered", "returned"]
185
+ )
186
+ .conjointly( # Combine multiple conditions
187
+ lambda df: pb.expr_col("revenue") == pb.expr_col("price") * pb.expr_col("quantity"),
188
+ lambda df: pb.expr_col("tax") >= pb.expr_col("revenue") * 0.05
189
+ )
190
+ .interrogate()
191
+ )
192
+ ```
193
+
194
+ ```
195
+ Major data quality issue found in step 7 (2025-04-16 15:03:04.685612+00:00).
196
+ ```
197
+
198
+ ```python
199
+ # Get an HTML report you can share with your team
200
+ validation.get_tabular_report().show("browser")
201
+ ```
202
+
203
+ <div align="center">
204
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-sales-data.png" width="800px">
205
+ </div>
206
+
207
+ ```python
208
+ # Get a report of failing records from a specific step
209
+ validation.get_step_report(i=3).show("browser") # Get failing records from step 3
210
+ ```
211
+
212
+ <div align="center">
213
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-step-report.png" width="800px">
214
+ </div>
215
+
216
+ ## Features That Set Pointblank Apart
217
+
218
+ - **Complete validation workflow** - From data access to validation to reporting in a single pipeline
219
+ - **Built for collaboration** - Share results with colleagues through beautiful interactive reports
220
+ - **Practical outputs** - Get exactly what you need: counts, extracts, summaries, or full reports
221
+ - **Flexible deployment** - Use in notebooks, scripts, or data pipelines
222
+ - **Customizable** - Tailor validation steps and reporting to your specific needs
223
+ - **Internationalization** - Reports can be generated in over 20 languages, including English, Spanish, French, and German
224
+
225
+ ## Documentation and Examples
226
+
227
+ Visit our [documentation site](https://posit-dev.github.io/pointblank) for:
228
+
229
+ - [The User Guide](https://posit-dev.github.io/pointblank/user-guide/)
230
+ - [API reference](https://posit-dev.github.io/pointblank/reference/)
231
+ - [Example gallery](https://posit-dev.github.io/pointblank/demos/)
232
+ - [The Pointblog](https://posit-dev.github.io/pointblank/blog/)
233
+
234
+ ## Join the Community
235
+
236
+ We'd love to hear from you! Connect with us:
237
+
238
+ - [GitHub Issues](https://github.com/posit-dev/pointblank/issues) for bug reports and feature requests
239
+ - [_Discord server_](https://discord.com/invite/YH7CybCNCQ) for discussions and help
240
+ - [Contributing guidelines](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) if you'd like to help improve Pointblank
241
+
242
+ ## Installation
243
+
244
+ You can install Pointblank using pip:
245
+
246
+ ```bash
247
+ pip install pointblank
248
+ ```
249
+
250
+ You can also install Pointblank from Conda-Forge by using:
251
+
252
+ ```bash
253
+ conda install conda-forge::pointblank
254
+ ```
255
+
256
+ If you don't have Polars or Pandas installed, you'll need to install one of them to use Pointblank.
257
+
258
+ ```bash
259
+ pip install "pointblank[pl]" # Install Pointblank with Polars
260
+ pip install "pointblank[pd]" # Install Pointblank with Pandas
261
+ ```
262
+
263
+ To use Pointblank with DuckDB, MySQL, PostgreSQL, or SQLite, install Ibis with the appropriate backend:
264
+
265
+ ```bash
266
+ pip install "pointblank[duckdb]" # Install Pointblank with Ibis + DuckDB
267
+ pip install "pointblank[mysql]" # Install Pointblank with Ibis + MySQL
268
+ pip install "pointblank[postgres]" # Install Pointblank with Ibis + PostgreSQL
269
+ pip install "pointblank[sqlite]" # Install Pointblank with Ibis + SQLite
270
+ ```
271
+
272
+ ## Technical Details
273
+
274
+ Pointblank uses [Narwhals](https://github.com/narwhals-dev/narwhals) to work with Polars and Pandas DataFrames, and integrates with [Ibis](https://github.com/ibis-project/ibis) for database and file format support. This architecture provides a consistent API for validating tabular data from various sources.
275
+
276
+ ## Contributing to Pointblank
277
+
278
+ There are many ways to contribute to the ongoing development of Pointblank. Some contributions can be simple (like fixing typos, improving documentation, filing issues for feature requests or problems, etc.) and others might take more time and care (like answering questions and submitting PRs with code changes). Just know that anything you can do to help would be very much appreciated!
279
+
280
+ Please read over the [contributing guidelines](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) for
281
+ information on how to get started.
282
+
283
+ ## Roadmap
284
+
285
+ We're actively working on enhancing Pointblank with:
286
+
287
+ 1. Additional validation methods for comprehensive data quality checks
288
+ 2. Advanced logging capabilities
289
+ 3. Messaging actions (Slack, email) for threshold exceedances
290
+ 4. LLM-powered validation suggestions and data dictionary generation
291
+ 5. JSON/YAML configuration for pipeline portability
292
+ 6. CLI utility for validation from the command line
293
+ 7. Expanded backend support and certification
294
+ 8. High-quality documentation and examples
295
+
296
+ If you have any ideas for features or improvements, don't hesitate to share them with us! We are always looking for ways to make Pointblank better.
297
+
298
+ ## Code of Conduct
299
+
300
+ Please note that the Pointblank project is released with a [contributor code of conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). <br>By participating in this project you agree to abide by its terms.
301
+
302
+ ## 📄 License
303
+
304
+ Pointblank is licensed under the MIT license.
305
+
306
+ © Posit Software, PBC.
307
+
308
+ ## 🏛️ Governance
309
+
310
+ This project is primarily maintained by
311
+ [Rich Iannone](https://bsky.app/profile/richmeister.bsky.social). Other authors may occasionally
312
+ assist with some of these duties.
@@ -0,0 +1,230 @@
1
+ <div align="center">
2
+
3
+ <a href="https://posit-dev.github.io/pointblank/"><img src="https://posit-dev.github.io/pointblank/assets/pointblank_logo.svg" width="75%"/></a>
4
+
5
+ _Data validation made beautiful and powerful_
6
+
7
+ [![Python Versions](https://img.shields.io/pypi/pyversions/pointblank.svg)](https://pypi.python.org/pypi/pointblank)
8
+ [![PyPI](https://img.shields.io/pypi/v/pointblank)](https://pypi.org/project/pointblank/#history)
9
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/pointblank)](https://pypistats.org/packages/pointblank)
10
+ [![License](https://img.shields.io/github/license/posit-dev/pointblank)](https://img.shields.io/github/license/posit-dev/pointblank)
11
+
12
+ [![CI Build](https://github.com/posit-dev/pointblank/actions/workflows/ci-tests.yaml/badge.svg)](https://github.com/posit-dev/pointblank/actions/workflows/ci-tests.yaml)
13
+ [![Codecov branch](https://img.shields.io/codecov/c/github/posit-dev/pointblank/main.svg)](https://codecov.io/gh/posit-dev/pointblank)
14
+ [![Repo Status](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
15
+ [![Documentation](https://img.shields.io/badge/docs-project_website-blue.svg)](https://posit-dev.github.io/pointblank/)
16
+
17
+ [![Contributors](https://img.shields.io/github/contributors/posit-dev/pointblank)](https://github.com/posit-dev/pointblank/graphs/contributors)
18
+ [![Discord](https://img.shields.io/discord/1345877328982446110?color=%237289da&label=Discord)](https://discord.com/invite/YH7CybCNCQ)
19
+ [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.1%20adopted-ff69b4.svg)](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html)
20
+
21
+ </div>
22
+
23
+ ## What is Pointblank?
24
+
25
+ Pointblank is a modern data validation framework for Python that helps you trust your data with confidence. It provides a fluent, expressive API to validate your data against a wide range of constraints and presents results in beautiful, interactive reports.
26
+
27
+ Whether you're a data scientist, data engineer, or analyst, Pointblank helps you catch data quality issues before they impact your analyses or downstream systems.
28
+
29
+ ## Getting Started in 30 Seconds
30
+
31
+ ```python
32
+ import pointblank as pb
33
+
34
+ validation = (
35
+ pb.Validate(data=pb.load_dataset(dataset="small_table"))
36
+ .col_vals_gt(columns="d", value=100) # Validate values > 100
37
+ .col_vals_le(columns="c", value=5) # Validate values <= 5
38
+ .col_exists(columns=["date", "date_time"]) # Check columns exist
39
+ .interrogate() # Execute and collect results
40
+ )
41
+
42
+ # Get the validation report from the REPL with:
43
+ validation.get_tabular_report().show()
44
+
45
+ # From a notebook simply use:
46
+ validation
47
+ ```
48
+
49
+ <div align="center">
50
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-tabular-report.png" width="800px">
51
+ </div>
52
+
53
+ <br>
54
+
55
+ Why Choose Pointblank?
56
+
57
+ - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, and more!
58
+ - **Beautiful, interactive reports** - Crystal-clear validation results that highlight issues and help communicate data quality
59
+ - **Composable validation pipeline** - Chain validation steps into a complete data quality workflow
60
+ - **Threshold-based alerts** - Set 'warning', 'error', and 'critical' thresholds with custom actions
61
+ - **Practical outputs** - Use validation results to filter tables, extract problematic data, or trigger downstream processes
62
+
63
+ ## Real-World Example
64
+
65
+ ```python
66
+ import pointblank as pb
67
+ import polars as pl
68
+
69
+ # Load your data
70
+ sales_data = pl.read_csv("sales_data.csv")
71
+
72
+ # Create a comprehensive validation
73
+ validation = (
74
+ pb.Validate(
75
+ data=sales_data,
76
+ tbl_name="sales_data", # Name of the table for reporting
77
+ label="Real-world example.", # Label for the validation, appears in reports
78
+ thresholds=(0.01, 0.02, 0.05), # Set thresholds for warnings, errors, and critical issues
79
+ actions=pb.Actions( # Define actions for any threshold exceedance
80
+ critical="Major data quality issue found in step {step} ({time})."
81
+ ),
82
+ final_actions=pb.FinalActions( # Define final actions for the entire validation
83
+ pb.send_slack_notification(
84
+ webhook_url="https://hooks.slack.com/services/your/webhook/url"
85
+ )
86
+ ),
87
+ brief=True, # Add automatically-generated briefs for each step
88
+ )
89
+ .col_vals_between( # Check numeric ranges with precision
90
+ columns=["price", "quantity"],
91
+ left=0, right=1000
92
+ )
93
+ .col_vals_not_null( # Ensure that columns ending with '_id' don't have null values
94
+ columns=pb.ends_with("_id")
95
+ )
96
+ .col_vals_regex( # Validate patterns with regex
97
+ columns="email",
98
+ pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
99
+ )
100
+ .col_vals_in_set( # Check categorical values
101
+ columns="status",
102
+ set=["pending", "shipped", "delivered", "returned"]
103
+ )
104
+ .conjointly( # Combine multiple conditions
105
+ lambda df: pb.expr_col("revenue") == pb.expr_col("price") * pb.expr_col("quantity"),
106
+ lambda df: pb.expr_col("tax") >= pb.expr_col("revenue") * 0.05
107
+ )
108
+ .interrogate()
109
+ )
110
+ ```
111
+
112
+ ```
113
+ Major data quality issue found in step 7 (2025-04-16 15:03:04.685612+00:00).
114
+ ```
115
+
116
+ ```python
117
+ # Get an HTML report you can share with your team
118
+ validation.get_tabular_report().show("browser")
119
+ ```
120
+
121
+ <div align="center">
122
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-sales-data.png" width="800px">
123
+ </div>
124
+
125
+ ```python
126
+ # Get a report of failing records from a specific step
127
+ validation.get_step_report(i=3).show("browser") # Get failing records from step 3
128
+ ```
129
+
130
+ <div align="center">
131
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-step-report.png" width="800px">
132
+ </div>
133
+
134
+ ## Features That Set Pointblank Apart
135
+
136
+ - **Complete validation workflow** - From data access to validation to reporting in a single pipeline
137
+ - **Built for collaboration** - Share results with colleagues through beautiful interactive reports
138
+ - **Practical outputs** - Get exactly what you need: counts, extracts, summaries, or full reports
139
+ - **Flexible deployment** - Use in notebooks, scripts, or data pipelines
140
+ - **Customizable** - Tailor validation steps and reporting to your specific needs
141
+ - **Internationalization** - Reports can be generated in over 20 languages, including English, Spanish, French, and German
142
+
143
+ ## Documentation and Examples
144
+
145
+ Visit our [documentation site](https://posit-dev.github.io/pointblank) for:
146
+
147
+ - [The User Guide](https://posit-dev.github.io/pointblank/user-guide/)
148
+ - [API reference](https://posit-dev.github.io/pointblank/reference/)
149
+ - [Example gallery](https://posit-dev.github.io/pointblank/demos/)
150
+ - [The Pointblog](https://posit-dev.github.io/pointblank/blog/)
151
+
152
+ ## Join the Community
153
+
154
+ We'd love to hear from you! Connect with us:
155
+
156
+ - [GitHub Issues](https://github.com/posit-dev/pointblank/issues) for bug reports and feature requests
157
+ - [_Discord server_](https://discord.com/invite/YH7CybCNCQ) for discussions and help
158
+ - [Contributing guidelines](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) if you'd like to help improve Pointblank
159
+
160
+ ## Installation
161
+
162
+ You can install Pointblank using pip:
163
+
164
+ ```bash
165
+ pip install pointblank
166
+ ```
167
+
168
+ You can also install Pointblank from Conda-Forge by using:
169
+
170
+ ```bash
171
+ conda install conda-forge::pointblank
172
+ ```
173
+
174
+ If you don't have Polars or Pandas installed, you'll need to install one of them to use Pointblank.
175
+
176
+ ```bash
177
+ pip install "pointblank[pl]" # Install Pointblank with Polars
178
+ pip install "pointblank[pd]" # Install Pointblank with Pandas
179
+ ```
180
+
181
+ To use Pointblank with DuckDB, MySQL, PostgreSQL, or SQLite, install Ibis with the appropriate backend:
182
+
183
+ ```bash
184
+ pip install "pointblank[duckdb]" # Install Pointblank with Ibis + DuckDB
185
+ pip install "pointblank[mysql]" # Install Pointblank with Ibis + MySQL
186
+ pip install "pointblank[postgres]" # Install Pointblank with Ibis + PostgreSQL
187
+ pip install "pointblank[sqlite]" # Install Pointblank with Ibis + SQLite
188
+ ```
189
+
190
+ ## Technical Details
191
+
192
+ Pointblank uses [Narwhals](https://github.com/narwhals-dev/narwhals) to work with Polars and Pandas DataFrames, and integrates with [Ibis](https://github.com/ibis-project/ibis) for database and file format support. This architecture provides a consistent API for validating tabular data from various sources.
193
+
194
+ ## Contributing to Pointblank
195
+
196
+ There are many ways to contribute to the ongoing development of Pointblank. Some contributions can be simple (like fixing typos, improving documentation, filing issues for feature requests or problems, etc.) and others might take more time and care (like answering questions and submitting PRs with code changes). Just know that anything you can do to help would be very much appreciated!
197
+
198
+ Please read over the [contributing guidelines](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) for
199
+ information on how to get started.
200
+
201
+ ## Roadmap
202
+
203
+ We're actively working on enhancing Pointblank with:
204
+
205
+ 1. Additional validation methods for comprehensive data quality checks
206
+ 2. Advanced logging capabilities
207
+ 3. Messaging actions (Slack, email) for threshold exceedances
208
+ 4. LLM-powered validation suggestions and data dictionary generation
209
+ 5. JSON/YAML configuration for pipeline portability
210
+ 6. CLI utility for validation from the command line
211
+ 7. Expanded backend support and certification
212
+ 8. High-quality documentation and examples
213
+
214
+ If you have any ideas for features or improvements, don't hesitate to share them with us! We are always looking for ways to make Pointblank better.
215
+
216
+ ## Code of Conduct
217
+
218
+ Please note that the Pointblank project is released with a [contributor code of conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). <br>By participating in this project you agree to abide by its terms.
219
+
220
+ ## 📄 License
221
+
222
+ Pointblank is licensed under the MIT license.
223
+
224
+ © Posit Software, PBC.
225
+
226
+ ## 🏛️ Governance
227
+
228
+ This project is primarily maintained by
229
+ [Rich Iannone](https://bsky.app/profile/richmeister.bsky.social). Other authors may occasionally
230
+ assist with some of these duties.
@@ -129,6 +129,7 @@ quartodoc:
129
129
  - name: Validate.col_schema_match
130
130
  - name: Validate.row_count_match
131
131
  - name: Validate.col_count_match
132
+ - name: Validate.conjointly
132
133
  - title: Column Selection
133
134
  desc: >
134
135
  A flexible way to select columns for validation is to use the `col()` function along with
@@ -146,6 +147,7 @@ quartodoc:
146
147
  - name: everything
147
148
  - name: first_n
148
149
  - name: last_n
150
+ - name: expr_col
149
151
  - title: Interrogation and Reporting
150
152
  desc: >
151
153
  The validation plan is put into action when `interrogate()` is called. The workflow for