pointblank 0.8.7__tar.gz → 0.9.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 (304) hide show
  1. {pointblank-0.8.7 → pointblank-0.9.1}/.github/workflows/ci-tests.yaml +1 -1
  2. {pointblank-0.8.7 → pointblank-0.9.1}/Makefile +8 -3
  3. {pointblank-0.8.7 → pointblank-0.9.1}/PKG-INFO +6 -2
  4. {pointblank-0.8.7 → pointblank-0.9.1}/README.md +5 -1
  5. {pointblank-0.8.7 → pointblank-0.9.1}/docs/_quarto.yml +4 -1
  6. pointblank-0.9.1/docs/assets/pointblank-sales-data.de.png +0 -0
  7. pointblank-0.9.1/docs/assets/pointblank-sales-data.es.png +0 -0
  8. pointblank-0.9.1/docs/assets/pointblank-sales-data.fr.png +0 -0
  9. pointblank-0.9.1/docs/assets/pointblank-sales-data.it.png +0 -0
  10. pointblank-0.9.1/docs/assets/pointblank-sales-data.ja.png +0 -0
  11. pointblank-0.9.1/docs/assets/pointblank-sales-data.ko.png +0 -0
  12. pointblank-0.9.1/docs/assets/pointblank-sales-data.nl.png +0 -0
  13. pointblank-0.9.1/docs/assets/pointblank-sales-data.pt-BR.png +0 -0
  14. pointblank-0.9.1/docs/assets/pointblank-sales-data.zh-CN.png +0 -0
  15. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/02-advanced/index.qmd +0 -2
  16. {pointblank-0.8.7 → pointblank-0.9.1}/docs/styles.css +11 -0
  17. {pointblank-0.8.7 → pointblank-0.9.1}/docs/user-guide/actions.qmd +221 -7
  18. pointblank-0.9.1/docs/user-guide/briefs.qmd +330 -0
  19. {pointblank-0.8.7 → pointblank-0.9.1}/docs/user-guide/col-summary-tbl.qmd +1 -0
  20. pointblank-0.9.1/docs/user-guide/columns.qmd +356 -0
  21. pointblank-0.9.1/docs/user-guide/extracts.qmd +334 -0
  22. {pointblank-0.8.7 → pointblank-0.9.1}/docs/user-guide/index.qmd +5 -1
  23. pointblank-0.9.1/docs/user-guide/langs.qmd +39 -0
  24. {pointblank-0.8.7 → pointblank-0.9.1}/docs/user-guide/missing-vals-tbl.qmd +3 -0
  25. pointblank-0.9.1/docs/user-guide/preprocessing.qmd +282 -0
  26. {pointblank-0.8.7 → pointblank-0.9.1}/docs/user-guide/preview.qmd +4 -0
  27. pointblank-0.9.1/docs/user-guide/segmentation.qmd +273 -0
  28. pointblank-0.9.1/docs/user-guide/step-reports.qmd +371 -0
  29. pointblank-0.9.1/docs/user-guide/sundering.qmd +301 -0
  30. {pointblank-0.8.7 → pointblank-0.9.1}/docs/user-guide/thresholds.qmd +8 -2
  31. {pointblank-0.8.7 → pointblank-0.9.1}/docs/user-guide/types.qmd +59 -14
  32. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/_constants.py +26 -10
  33. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/_constants_translations.py +162 -0
  34. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/_interrogation.py +117 -0
  35. pointblank-0.9.1/pointblank/_typing.py +26 -0
  36. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/_utils.py +1 -0
  37. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/data/api-docs.txt +1022 -52
  38. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/datascan.py +4 -4
  39. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/draft.py +1 -1
  40. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/thresholds.py +10 -0
  41. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/validate.py +1462 -55
  42. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank.egg-info/PKG-INFO +6 -2
  43. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank.egg-info/SOURCES.txt +21 -1
  44. {pointblank-0.8.7 → pointblank-0.9.1}/pyproject.toml +4 -2
  45. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +104 -16
  46. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +14 -14
  47. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +6 -6
  48. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +6 -6
  49. {pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl → pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb}/validation_report.json +1 -0
  50. {pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd → pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet}/validation_report.json +1 -0
  51. {pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb → pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd}/validation_report.json +1 -0
  52. {pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet → pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl}/validation_report.json +1 -0
  53. pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +26 -0
  54. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +1 -0
  55. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +1 -0
  56. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +1 -0
  57. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +1 -0
  58. pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +26 -0
  59. pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +608 -0
  60. pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +608 -0
  61. pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +608 -0
  62. pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/polars/validation_report_segments_with_pre.html +185 -0
  63. pointblank-0.9.1/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/validation_report_segments_with_pre.html +185 -0
  64. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_memtable_variable_names/selector_helper_functions_no_match.html +2 -2
  65. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pd_variable_names/selector_helper_functions_no_match.html +2 -2
  66. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pl_variable_names/selector_helper_functions_no_match.html +2 -2
  67. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test__utils.py +4 -11
  68. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_validate.py +180 -44
  69. {pointblank-0.8.7 → pointblank-0.9.1}/translations/README.de.md +7 -2
  70. {pointblank-0.8.7 → pointblank-0.9.1}/translations/README.es.md +7 -2
  71. {pointblank-0.8.7 → pointblank-0.9.1}/translations/README.fr.md +7 -2
  72. {pointblank-0.8.7 → pointblank-0.9.1}/translations/README.it.md +7 -2
  73. pointblank-0.9.1/translations/README.ja.md +245 -0
  74. pointblank-0.9.1/translations/README.ko.md +245 -0
  75. pointblank-0.9.1/translations/README.nl.md +245 -0
  76. {pointblank-0.8.7 → pointblank-0.9.1}/translations/README.pt-BR.md +7 -2
  77. {pointblank-0.8.7 → pointblank-0.9.1}/translations/README.zh-CN.md +7 -2
  78. pointblank-0.8.7/docs/user-guide/across.qmd +0 -130
  79. pointblank-0.8.7/docs/user-guide/columns.qmd +0 -236
  80. pointblank-0.8.7/docs/user-guide/extracts.qmd +0 -127
  81. pointblank-0.8.7/docs/user-guide/preprocessing.qmd +0 -183
  82. pointblank-0.8.7/docs/user-guide/sundering.qmd +0 -163
  83. pointblank-0.8.7/pointblank/_typing.py +0 -10
  84. pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -25
  85. pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -25
  86. {pointblank-0.8.7 → pointblank-0.9.1}/.github/CODE_OF_CONDUCT.md +0 -0
  87. {pointblank-0.8.7 → pointblank-0.9.1}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  88. {pointblank-0.8.7 → pointblank-0.9.1}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  89. {pointblank-0.8.7 → pointblank-0.9.1}/.github/ISSUE_TEMPLATE/question.md +0 -0
  90. {pointblank-0.8.7 → pointblank-0.9.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  91. {pointblank-0.8.7 → pointblank-0.9.1}/.github/SECURITY.md +0 -0
  92. {pointblank-0.8.7 → pointblank-0.9.1}/.github/workflows/ci-docs.yaml +0 -0
  93. {pointblank-0.8.7 → pointblank-0.9.1}/.github/workflows/code-checks.yaml +0 -0
  94. {pointblank-0.8.7 → pointblank-0.9.1}/.gitignore +0 -0
  95. {pointblank-0.8.7 → pointblank-0.9.1}/.pre-commit-config.yaml +0 -0
  96. {pointblank-0.8.7 → pointblank-0.9.1}/.vscode/settings.json +0 -0
  97. {pointblank-0.8.7 → pointblank-0.9.1}/CITATION.cff +0 -0
  98. {pointblank-0.8.7 → pointblank-0.9.1}/CONTRIBUTING.md +0 -0
  99. {pointblank-0.8.7 → pointblank-0.9.1}/LICENSE +0 -0
  100. {pointblank-0.8.7 → pointblank-0.9.1}/data_raw/game_revenue.csv +0 -0
  101. {pointblank-0.8.7 → pointblank-0.9.1}/data_raw/nycflights.csv +0 -0
  102. {pointblank-0.8.7 → pointblank-0.9.1}/data_raw/nycflights.ddb +0 -0
  103. {pointblank-0.8.7 → pointblank-0.9.1}/data_raw/small_table.csv +0 -0
  104. {pointblank-0.8.7 → pointblank-0.9.1}/data_raw/x-01-parquet.qmd +0 -0
  105. {pointblank-0.8.7 → pointblank-0.9.1}/data_raw/x-02-duckdb.qmd +0 -0
  106. {pointblank-0.8.7 → pointblank-0.9.1}/data_raw/x-03-sqlite.qmd +0 -0
  107. {pointblank-0.8.7 → pointblank-0.9.1}/docs/.gitignore +0 -0
  108. {pointblank-0.8.7 → pointblank-0.9.1}/docs/_extensions/machow/interlinks/.gitignore +0 -0
  109. {pointblank-0.8.7 → pointblank-0.9.1}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
  110. {pointblank-0.8.7 → pointblank-0.9.1}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
  111. {pointblank-0.8.7 → pointblank-0.9.1}/docs/assets/fav-logo.png +0 -0
  112. {pointblank-0.8.7 → pointblank-0.9.1}/docs/assets/pointblank-sales-data.png +0 -0
  113. {pointblank-0.8.7 → pointblank-0.9.1}/docs/assets/pointblank-step-report.png +0 -0
  114. {pointblank-0.8.7 → pointblank-0.9.1}/docs/assets/pointblank-tabular-report.png +0 -0
  115. {pointblank-0.8.7 → pointblank-0.9.1}/docs/assets/pointblank_logo.svg +0 -0
  116. {pointblank-0.8.7 → pointblank-0.9.1}/docs/assets/validation-table-diagram.png +0 -0
  117. {pointblank-0.8.7 → pointblank-0.9.1}/docs/blog/index.qmd +0 -0
  118. {pointblank-0.8.7 → pointblank-0.9.1}/docs/blog/intro-pointblank/index.qmd +0 -0
  119. {pointblank-0.8.7 → pointblank-0.9.1}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
  120. {pointblank-0.8.7 → pointblank-0.9.1}/docs/blog/intro-pointblank/step_report.png +0 -0
  121. {pointblank-0.8.7 → pointblank-0.9.1}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
  122. {pointblank-0.8.7 → pointblank-0.9.1}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
  123. {pointblank-0.8.7 → pointblank-0.9.1}/docs/blog/pointblank_blog_logo.png +0 -0
  124. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/01-starter/index.qmd +0 -0
  125. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/03-data-extracts/index.qmd +0 -0
  126. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/04-sundered-data/index.qmd +0 -0
  127. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/05-step-report-column-check/index.qmd +0 -0
  128. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
  129. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
  130. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/check-row-column-counts/index.qmd +0 -0
  131. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/checks-for-missing/index.qmd +0 -0
  132. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
  133. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/column-selector-functions/index.qmd +0 -0
  134. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/comparisons-across-columns/index.qmd +0 -0
  135. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/data/game_revenue.parquet +0 -0
  136. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
  137. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
  138. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/expect-text-pattern/index.qmd +0 -0
  139. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/failure-thresholds/index.qmd +0 -0
  140. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/img/advanced_validation.png +0 -0
  141. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/img/data_extracts.png +0 -0
  142. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/img/starter_validation.png +0 -0
  143. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/img/step_report_column_schema.png +0 -0
  144. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/img/step_report_column_values.png +0 -0
  145. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/img/sundered_data.png +0 -0
  146. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/index.qmd +0 -0
  147. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/mutate-table-in-step/index.qmd +0 -0
  148. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/numeric-comparisons/index.qmd +0 -0
  149. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/schema-check/index.qmd +0 -0
  150. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/set-membership/index.qmd +0 -0
  151. {pointblank-0.8.7 → pointblank-0.9.1}/docs/demos/using-parquet-data/index.qmd +0 -0
  152. {pointblank-0.8.7 → pointblank-0.9.1}/docs/index.qmd +0 -0
  153. {pointblank-0.8.7 → pointblank-0.9.1}/images/pointblank-tabular-report.png +0 -0
  154. {pointblank-0.8.7 → pointblank-0.9.1}/images/pointblank_logo.svg +0 -0
  155. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/__init__.py +0 -0
  156. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/_constants_docs.py +0 -0
  157. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/_utils_check_args.py +0 -0
  158. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/_utils_html.py +0 -0
  159. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/actions.py +0 -0
  160. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/assistant.py +0 -0
  161. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/column.py +0 -0
  162. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/data/game_revenue-duckdb.zip +0 -0
  163. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/data/game_revenue.zip +0 -0
  164. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/data/nycflights-duckdb.zip +0 -0
  165. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/data/nycflights.zip +0 -0
  166. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/data/polars-api-docs.txt +0 -0
  167. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/data/small_table-duckdb.zip +0 -0
  168. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/data/small_table.zip +0 -0
  169. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/schema.py +0 -0
  170. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank/tf.py +0 -0
  171. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank.egg-info/dependency_links.txt +0 -0
  172. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank.egg-info/requires.txt +0 -0
  173. {pointblank-0.8.7 → pointblank-0.9.1}/pointblank.egg-info/top_level.txt +0 -0
  174. {pointblank-0.8.7 → pointblank-0.9.1}/setup.cfg +0 -0
  175. {pointblank-0.8.7 → pointblank-0.9.1}/tests/__init__.py +0 -0
  176. {pointblank-0.8.7 → pointblank-0.9.1}/tests/manual_tests/schema_step_reports.qmd +0 -0
  177. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
  178. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
  179. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
  180. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
  181. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
  182. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
  183. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
  184. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
  185. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
  186. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
  187. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
  188. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
  189. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
  190. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
  191. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
  192. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
  193. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
  194. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
  195. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
  196. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
  197. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
  198. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
  199. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
  200. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
  201. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
  202. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
  203. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
  204. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
  205. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
  206. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
  207. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
  208. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
  209. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
  210. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
  211. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
  212. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
  213. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
  214. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
  215. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
  216. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
  217. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
  218. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
  219. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
  220. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
  221. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
  222. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
  223. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
  224. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
  225. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
  226. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
  227. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
  228. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
  229. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
  230. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
  231. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
  232. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
  233. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
  234. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
  235. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
  236. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
  237. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
  238. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
  239. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
  240. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
  241. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
  242. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
  243. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
  244. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
  245. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
  246. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
  247. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
  248. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
  249. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
  250. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
  251. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
  252. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
  253. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
  254. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
  255. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
  256. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
  257. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
  258. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
  259. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
  260. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
  261. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
  262. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
  263. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
  264. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
  265. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
  266. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
  267. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
  268. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
  269. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
  270. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
  271. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
  272. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
  273. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
  274. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
  275. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
  276. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
  277. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
  278. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
  279. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
  280. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
  281. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
  282. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
  283. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
  284. {pointblank-0.8.7 → pointblank-0.9.1}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
  285. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
  286. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
  287. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
  288. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
  289. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_xyz.ddb +0 -0
  290. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_xyz.parquet +0 -0
  291. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_xyz.sqlite +0 -0
  292. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
  293. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
  294. {pointblank-0.8.7 → pointblank-0.9.1}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
  295. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test__interrogation.py +0 -0
  296. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test__utils_check_args.py +0 -0
  297. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_actions.py +0 -0
  298. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_assistant.py +0 -0
  299. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_column.py +0 -0
  300. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_datascan.py +0 -0
  301. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_draft.py +0 -0
  302. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_schema.py +0 -0
  303. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_tf.py +0 -0
  304. {pointblank-0.8.7 → pointblank-0.9.1}/tests/test_thresholds.py +0 -0
@@ -29,7 +29,7 @@ jobs:
29
29
  pip install -e '.[dev]'
30
30
  - name: Install test dependencies
31
31
  run: |
32
- pip install pytest pytest-cov pytest-snapshot pandas polars ibis-framework[duckdb,mysql,postgres,sqlite]>=9.5.0 chatlas requests shiny
32
+ pip install pytest pytest-rerunfailures pytest-randomly pytest-xdist pytest-cov pytest-snapshot pandas polars ibis-framework[duckdb,mysql,postgres,sqlite]>=9.5.0 chatlas requests shiny
33
33
  - name: pytest unit tests
34
34
  run: |
35
35
  make test
@@ -1,13 +1,18 @@
1
1
  .PHONY: check
2
2
 
3
+ .PHONY: test
3
4
  test:
4
- pytest --cov=pointblank --cov-report=xml
5
+ @pytest \
6
+ --cov=pointblank \
7
+ --cov-report=term-missing \
8
+ --randomly-seed 123 \
9
+ -n auto \
10
+ --reruns 3 \
11
+ --reruns-delay 1
5
12
 
6
13
  test-update:
7
14
  pytest --snapshot-update
8
15
 
9
- test-coverage:
10
- pytest --cov=pointblank --cov-report=term-missing
11
16
 
12
17
  lint: ## Run ruff formatter and linter
13
18
  @uv run ruff format
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pointblank
3
- Version: 0.8.7
3
+ Version: 0.9.1
4
4
  Summary: Find out if your data is what you think it is.
5
5
  Author-email: Richard Iannone <riannone@me.com>
6
6
  License: MIT License
@@ -89,6 +89,7 @@ _Data validation made beautiful and powerful_
89
89
  [![Python Versions](https://img.shields.io/pypi/pyversions/pointblank.svg)](https://pypi.python.org/pypi/pointblank)
90
90
  [![PyPI](https://img.shields.io/pypi/v/pointblank)](https://pypi.org/project/pointblank/#history)
91
91
  [![PyPI Downloads](https://img.shields.io/pypi/dm/pointblank)](https://pypistats.org/packages/pointblank)
92
+ [![Conda Version](https://img.shields.io/conda/vn/conda-forge/pointblank.svg)](https://anaconda.org/conda-forge/pointblank)
92
93
  [![License](https://img.shields.io/github/license/posit-dev/pointblank)](https://img.shields.io/github/license/posit-dev/pointblank)
93
94
 
94
95
  [![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)
@@ -108,7 +109,10 @@ _Data validation made beautiful and powerful_
108
109
  <a href="translations/README.it.md">Italiano</a> |
109
110
  <a href="translations/README.es.md">Español</a> |
110
111
  <a href="translations/README.pt-BR.md">Português</a> |
111
- <a href="translations/README.zh-CN.md">简体中文</a>
112
+ <a href="translations/README.nl.md">Nederlands</a> |
113
+ <a href="translations/README.zh-CN.md">简体中文</a> |
114
+ <a href="translations/README.ja.md">日本語</a> |
115
+ <a href="translations/README.ko.md">한국어</a>
112
116
  </div>
113
117
 
114
118
  ## What is Pointblank?
@@ -7,6 +7,7 @@ _Data validation made beautiful and powerful_
7
7
  [![Python Versions](https://img.shields.io/pypi/pyversions/pointblank.svg)](https://pypi.python.org/pypi/pointblank)
8
8
  [![PyPI](https://img.shields.io/pypi/v/pointblank)](https://pypi.org/project/pointblank/#history)
9
9
  [![PyPI Downloads](https://img.shields.io/pypi/dm/pointblank)](https://pypistats.org/packages/pointblank)
10
+ [![Conda Version](https://img.shields.io/conda/vn/conda-forge/pointblank.svg)](https://anaconda.org/conda-forge/pointblank)
10
11
  [![License](https://img.shields.io/github/license/posit-dev/pointblank)](https://img.shields.io/github/license/posit-dev/pointblank)
11
12
 
12
13
  [![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)
@@ -26,7 +27,10 @@ _Data validation made beautiful and powerful_
26
27
  <a href="translations/README.it.md">Italiano</a> |
27
28
  <a href="translations/README.es.md">Español</a> |
28
29
  <a href="translations/README.pt-BR.md">Português</a> |
29
- <a href="translations/README.zh-CN.md">简体中文</a>
30
+ <a href="translations/README.nl.md">Nederlands</a> |
31
+ <a href="translations/README.zh-CN.md">简体中文</a> |
32
+ <a href="translations/README.ja.md">日本語</a> |
33
+ <a href="translations/README.ko.md">한국어</a>
30
34
  </div>
31
35
 
32
36
  ## What is Pointblank?
@@ -61,10 +61,12 @@ website:
61
61
  contents:
62
62
  - user-guide/types.qmd
63
63
  - user-guide/columns.qmd
64
- - user-guide/across.qmd
65
64
  - user-guide/preprocessing.qmd
65
+ - user-guide/segmentation.qmd
66
+ - user-guide/briefs.qmd
66
67
  - section: "Post Interrogation"
67
68
  contents:
69
+ - user-guide/step-reports.qmd
68
70
  - user-guide/extracts.qmd
69
71
  - user-guide/sundering.qmd
70
72
  - section: "Data Inspection"
@@ -126,6 +128,7 @@ quartodoc:
126
128
  - name: Validate.col_vals_expr
127
129
  - name: Validate.col_exists
128
130
  - name: Validate.rows_distinct
131
+ - name: Validate.rows_complete
129
132
  - name: Validate.col_schema_match
130
133
  - name: Validate.row_count_match
131
134
  - name: Validate.col_count_match
@@ -15,7 +15,6 @@ A validation with a comprehensive set of rules.
15
15
 
16
16
  import pointblank as pb
17
17
  import polars as pl
18
- import narwhals as nw
19
18
 
20
19
  validation = (
21
20
  pb.Validate(
@@ -52,7 +51,6 @@ validation
52
51
  ```python
53
52
  import pointblank as pb
54
53
  import polars as pl
55
- import narwhals as nw
56
54
 
57
55
  validation = (
58
56
  pb.Validate(
@@ -17,6 +17,17 @@ p a {
17
17
  text-underline-offset: 4px;
18
18
  }
19
19
 
20
+ li a {
21
+ color: black;
22
+ text-underline-offset: 4px;
23
+ }
24
+
25
+ dt {
26
+ height: 32px;
27
+ overflow-x: scroll;
28
+ margin-left: -4px;
29
+ }
30
+
20
31
  .table td {
21
32
  padding-left: 0px;
22
33
  }
@@ -107,9 +107,18 @@ validation_2 = (
107
107
  thresholds=pb.Thresholds(warning=0.05, error=0.10, critical=0.15),
108
108
  actions=pb.Actions(critical=action_str),
109
109
  )
110
- .col_vals_regex(columns="player_id", pattern=r"[A-Z]{12}\d{3}")
111
- .col_vals_gt(columns="item_revenue", value=0.10)
112
- .col_vals_ge(columns="session_duration", value=15)
110
+ .col_vals_regex(
111
+ columns="player_id",
112
+ pattern=r"[A-Z]{12}\d{3}"
113
+ )
114
+ .col_vals_gt(
115
+ columns="item_revenue",
116
+ value=0.10
117
+ )
118
+ .col_vals_ge(
119
+ columns="session_duration",
120
+ value=15
121
+ )
113
122
  .interrogate()
114
123
  )
115
124
 
@@ -139,8 +148,14 @@ validation_3 = (
139
148
  data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
140
149
  thresholds=pb.Thresholds(warning=0.05, error=0.10, critical=0.15),
141
150
  )
142
- .col_vals_regex(columns="player_id", pattern=r"[A-Z]{12}\d{3}")
143
- .col_vals_gt(columns="item_revenue", value=0.05)
151
+ .col_vals_regex(
152
+ columns="player_id",
153
+ pattern=r"[A-Z]{12}\d{3}"
154
+ )
155
+ .col_vals_gt(
156
+ columns="item_revenue",
157
+ value=0.05
158
+ )
144
159
  .col_vals_gt(
145
160
  columns="session_duration",
146
161
  value=15,
@@ -191,8 +206,14 @@ validation = (
191
206
  actions=pb.Actions(default=print_problem),
192
207
  brief=True,
193
208
  )
194
- .col_vals_regex(columns="player_id", pattern=r"[A-Z]{12}\d{3}")
195
- .col_vals_gt(columns="item_revenue", value=0.05)
209
+ .col_vals_regex(
210
+ columns="player_id",
211
+ pattern=r"[A-Z]{12}\d{3}"
212
+ )
213
+ .col_vals_gt(
214
+ columns="item_revenue",
215
+ value=0.05
216
+ )
196
217
  .col_vals_gt(
197
218
  columns="session_duration",
198
219
  value=15,
@@ -222,3 +243,196 @@ The metadata dictionary contains the following fields for a given validation ste
222
243
  - `level_num`: The severity level as a numeric value (`30`, `40`, or `50`).
223
244
  - `autobrief`: A localized and brief statement of the expectation for the step.
224
245
  - `failure_text`: Localized text that explains how the validation step failed.
246
+
247
+ ## Final Actions with `FinalActions`
248
+
249
+ When you need to execute actions after all validation steps are complete, Pointblank provides the
250
+ [`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html) class. Unlike
251
+ [`Actions`](https://posit-dev.github.io/pointblank/reference/Actions.html) which triggers on a
252
+ per-step basis during the validation process,
253
+ [`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html) executes after
254
+ the entire validation is complete, giving you a way to respond to the overall validation results.
255
+
256
+ Here's how to use
257
+ [`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html):
258
+
259
+ ```{python}
260
+ import pointblank as pb
261
+
262
+ def send_alert():
263
+ summary = pb.get_validation_summary()
264
+ if summary["highest_severity"] == "critical":
265
+ print(f"ALERT: Critical validation failures found in `{summary['tbl_name']}`")
266
+
267
+ validation_with_final = (
268
+ pb.Validate(
269
+ data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
270
+ tbl_name="game_revenue",
271
+ thresholds=pb.Thresholds(warning=0.05, error=0.10, critical=0.15),
272
+ final_actions=pb.FinalActions(
273
+ "Validation complete.", # a string message
274
+ send_alert # a callable function
275
+ )
276
+ )
277
+ .col_vals_regex(
278
+ columns="player_id",
279
+ pattern=r"[A-Z]{12}\d{3}"
280
+ )
281
+ .col_vals_gt(
282
+ columns="item_revenue",
283
+ value=0.10
284
+ )
285
+ .interrogate()
286
+ )
287
+
288
+ validation_with_final
289
+ ```
290
+
291
+ In this example:
292
+
293
+ - We define the function `send_alert()` that checks the validation summary for critical failures
294
+ - We provide a simple string message `"Validation complete."` that will print to the console
295
+ - Both actions will execute in order after all validation steps have completed
296
+
297
+ Because the 'critical' threshold was exceeded in Step 2, we see the printed alert of `send_alert()`
298
+ after the simple string message.
299
+
300
+ ### Creating Final Actions
301
+
302
+ [`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html) accepts any
303
+ number of actions as positional arguments. Each argument can be:
304
+
305
+ 1. **String**: A message to be displayed in the console
306
+ 2. **Callable**: A function to be called with no arguments
307
+ 3. **List of Strings/Callables**: Multiple actions to execute in sequence
308
+
309
+ All actions will be executed in the order they are provided after all validation steps have
310
+ completed.
311
+
312
+ ### Using `get_validation_summary()` in Final Actions
313
+
314
+ When creating a callable function to use with
315
+ [`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html), you can access
316
+ information about the overall validation results using the
317
+ [`get_validation_summary()`](https://posit-dev.github.io/pointblank/reference/get_validation_summary.html)
318
+ function. This gives you a dictionary with comprehensive information about the validation:
319
+
320
+ ```python
321
+ def comprehensive_report():
322
+ summary = pb.get_validation_summary()
323
+ print(f"Validation Report for {summary['tbl_name']}:")
324
+ print(f"- Steps: {summary['n_steps']}")
325
+ print(f"- Passing steps: {summary['n_passing_steps']}")
326
+ print(f"- Failing steps: {summary['n_failing_steps']}")
327
+
328
+ # Take additional actions based on results
329
+ if summary["n_failing_steps"] > 0:
330
+ # Create and execute a Slack notification
331
+ notify = pb.send_slack_notification(
332
+ webhook_url="https://hooks.slack.com/services/your/webhook/url",
333
+ summary_msg="""
334
+ 🚨 *Validation Failure Alert*
335
+ • Table: {tbl_name}
336
+ • Failed Steps: {n_failing_steps} of {n_steps}
337
+ • Highest Severity: {highest_severity}
338
+ • Time: {time}
339
+ """,
340
+ )
341
+ notify() # Execute the notification function
342
+
343
+
344
+ validation = (
345
+ pb.Validate(
346
+ data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
347
+ tbl_name="game_revenue",
348
+ final_actions=pb.FinalActions(comprehensive_report),
349
+ )
350
+ .col_vals_regex(
351
+ columns="player_id",
352
+ pattern=r"[A-Z]{12}\d{3}"
353
+ )
354
+ .col_vals_gt(
355
+ columns="item_revenue",
356
+ value=0.05
357
+ )
358
+ .interrogate()
359
+ )
360
+
361
+ validation
362
+ ```
363
+
364
+ ```{python}
365
+ # | echo: false
366
+
367
+ validation = (
368
+ pb.Validate(
369
+ data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
370
+ tbl_name="game_revenue",
371
+ )
372
+ .col_vals_regex(
373
+ columns="player_id",
374
+ pattern=r"[A-Z]{12}\d{3}"
375
+ )
376
+ .col_vals_gt(
377
+ columns="item_revenue",
378
+ value=0.05
379
+ )
380
+ .interrogate()
381
+ )
382
+
383
+ validation
384
+ ```
385
+
386
+ Here we used the [`send_slack_notification()`](https://posit-dev.github.io/pointblank/reference/send_slack_notification.html)
387
+ function, which is available in Pointblank as a pre-built action. It can be used by itself in
388
+ `final_actions=` but here it's integrated into the user's `comprehensive_report()` function.
389
+
390
+ ### Combining the Two Types of Actions
391
+
392
+ You can use both [`Actions`](https://posit-dev.github.io/pointblank/reference/Actions.html) and
393
+ [`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html) together for
394
+ comprehensive validation control:
395
+
396
+ ```{python}
397
+ def log_step_failure():
398
+ m = pb.get_action_metadata()
399
+ print(f"Step {m['step']} failed with {m['level']}")
400
+
401
+
402
+ def generate_summary():
403
+ summary = pb.get_validation_summary()
404
+ # Sum up total failed test units across all steps
405
+ total_failed = sum(summary["dict_n_failed"].values())
406
+ # Sum up total test units across all steps
407
+ total_units = sum(summary["dict_n"].values())
408
+ print(f"Validation complete: {total_failed} failures out of {total_units} tests")
409
+
410
+
411
+ validation_combined = (
412
+ pb.Validate(
413
+ data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
414
+ thresholds=pb.Thresholds(warning=0.05, error=0.10),
415
+ actions=pb.Actions(default=log_step_failure),
416
+ final_actions=pb.FinalActions(generate_summary),
417
+ )
418
+ .col_vals_regex(
419
+ columns="player_id",
420
+ pattern=r"[A-Z]{12}\d{3}"
421
+ )
422
+ .col_vals_gt(
423
+ columns="item_revenue",
424
+ value=0.05
425
+ )
426
+ .interrogate()
427
+ )
428
+ ```
429
+
430
+ This approach allows you to:
431
+
432
+ 1. Log individual step failures during the validation process using
433
+ [`Actions`](https://posit-dev.github.io/pointblank/reference/Actions.html)
434
+ 2. Generate a comprehensive report after all validation steps are complete using
435
+ [`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html)
436
+
437
+ Using both action types gives you fine-grained control over when and how notifications and other
438
+ actions are triggered in your validation workflow.