pointblank 0.8.5__tar.gz → 0.8.7__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 (280) hide show
  1. pointblank-0.8.7/PKG-INFO +323 -0
  2. pointblank-0.8.7/README.md +241 -0
  3. {pointblank-0.8.5 → pointblank-0.8.7}/docs/_quarto.yml +2 -0
  4. pointblank-0.8.7/docs/assets/pointblank-sales-data.png +0 -0
  5. pointblank-0.8.7/docs/assets/pointblank-step-report.png +0 -0
  6. {pointblank-0.8.5 → pointblank-0.8.7}/docs/blog/intro-pointblank/index.qmd +1 -1
  7. pointblank-0.8.7/docs/index.qmd +202 -0
  8. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/__init__.py +2 -0
  9. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/_constants.py +13 -0
  10. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/_constants_translations.py +54 -0
  11. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/_interrogation.py +192 -4
  12. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/_utils.py +2 -0
  13. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/column.py +352 -4
  14. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/data/api-docs.txt +270 -4
  15. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/validate.py +291 -5
  16. pointblank-0.8.7/pointblank.egg-info/PKG-INFO +323 -0
  17. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank.egg-info/SOURCES.txt +9 -1
  18. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +41 -0
  19. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_column.py +779 -0
  20. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_validate.py +139 -0
  21. pointblank-0.8.7/translations/README.de.md +240 -0
  22. pointblank-0.8.7/translations/README.es.md +238 -0
  23. pointblank-0.8.7/translations/README.fr.md +238 -0
  24. pointblank-0.8.7/translations/README.it.md +240 -0
  25. pointblank-0.8.7/translations/README.pt-BR.md +240 -0
  26. pointblank-0.8.7/translations/README.zh-CN.md +233 -0
  27. pointblank-0.8.5/PKG-INFO +0 -269
  28. pointblank-0.8.5/README.md +0 -187
  29. pointblank-0.8.5/docs/index.qmd +0 -150
  30. pointblank-0.8.5/pointblank.egg-info/PKG-INFO +0 -269
  31. {pointblank-0.8.5 → pointblank-0.8.7}/.github/CODE_OF_CONDUCT.md +0 -0
  32. {pointblank-0.8.5 → pointblank-0.8.7}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  33. {pointblank-0.8.5 → pointblank-0.8.7}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  34. {pointblank-0.8.5 → pointblank-0.8.7}/.github/ISSUE_TEMPLATE/question.md +0 -0
  35. {pointblank-0.8.5 → pointblank-0.8.7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  36. {pointblank-0.8.5 → pointblank-0.8.7}/.github/SECURITY.md +0 -0
  37. {pointblank-0.8.5 → pointblank-0.8.7}/.github/workflows/ci-docs.yaml +0 -0
  38. {pointblank-0.8.5 → pointblank-0.8.7}/.github/workflows/ci-tests.yaml +0 -0
  39. {pointblank-0.8.5 → pointblank-0.8.7}/.github/workflows/code-checks.yaml +0 -0
  40. {pointblank-0.8.5 → pointblank-0.8.7}/.gitignore +0 -0
  41. {pointblank-0.8.5 → pointblank-0.8.7}/.pre-commit-config.yaml +0 -0
  42. {pointblank-0.8.5 → pointblank-0.8.7}/.vscode/settings.json +0 -0
  43. {pointblank-0.8.5 → pointblank-0.8.7}/CITATION.cff +0 -0
  44. {pointblank-0.8.5 → pointblank-0.8.7}/CONTRIBUTING.md +0 -0
  45. {pointblank-0.8.5 → pointblank-0.8.7}/LICENSE +0 -0
  46. {pointblank-0.8.5 → pointblank-0.8.7}/Makefile +0 -0
  47. {pointblank-0.8.5 → pointblank-0.8.7}/data_raw/game_revenue.csv +0 -0
  48. {pointblank-0.8.5 → pointblank-0.8.7}/data_raw/nycflights.csv +0 -0
  49. {pointblank-0.8.5 → pointblank-0.8.7}/data_raw/nycflights.ddb +0 -0
  50. {pointblank-0.8.5 → pointblank-0.8.7}/data_raw/small_table.csv +0 -0
  51. {pointblank-0.8.5 → pointblank-0.8.7}/data_raw/x-01-parquet.qmd +0 -0
  52. {pointblank-0.8.5 → pointblank-0.8.7}/data_raw/x-02-duckdb.qmd +0 -0
  53. {pointblank-0.8.5 → pointblank-0.8.7}/data_raw/x-03-sqlite.qmd +0 -0
  54. {pointblank-0.8.5 → pointblank-0.8.7}/docs/.gitignore +0 -0
  55. {pointblank-0.8.5 → pointblank-0.8.7}/docs/_extensions/machow/interlinks/.gitignore +0 -0
  56. {pointblank-0.8.5 → pointblank-0.8.7}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
  57. {pointblank-0.8.5 → pointblank-0.8.7}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
  58. {pointblank-0.8.5 → pointblank-0.8.7}/docs/assets/fav-logo.png +0 -0
  59. {pointblank-0.8.5 → pointblank-0.8.7}/docs/assets/pointblank-tabular-report.png +0 -0
  60. {pointblank-0.8.5 → pointblank-0.8.7}/docs/assets/pointblank_logo.svg +0 -0
  61. {pointblank-0.8.5 → pointblank-0.8.7}/docs/assets/validation-table-diagram.png +0 -0
  62. {pointblank-0.8.5 → pointblank-0.8.7}/docs/blog/index.qmd +0 -0
  63. {pointblank-0.8.5 → pointblank-0.8.7}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
  64. {pointblank-0.8.5 → pointblank-0.8.7}/docs/blog/intro-pointblank/step_report.png +0 -0
  65. {pointblank-0.8.5 → pointblank-0.8.7}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
  66. {pointblank-0.8.5 → pointblank-0.8.7}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
  67. {pointblank-0.8.5 → pointblank-0.8.7}/docs/blog/pointblank_blog_logo.png +0 -0
  68. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/01-starter/index.qmd +0 -0
  69. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/02-advanced/index.qmd +0 -0
  70. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/03-data-extracts/index.qmd +0 -0
  71. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/04-sundered-data/index.qmd +0 -0
  72. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/05-step-report-column-check/index.qmd +0 -0
  73. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
  74. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
  75. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/check-row-column-counts/index.qmd +0 -0
  76. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/checks-for-missing/index.qmd +0 -0
  77. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
  78. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/column-selector-functions/index.qmd +0 -0
  79. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/comparisons-across-columns/index.qmd +0 -0
  80. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/data/game_revenue.parquet +0 -0
  81. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
  82. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
  83. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/expect-text-pattern/index.qmd +0 -0
  84. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/failure-thresholds/index.qmd +0 -0
  85. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/img/advanced_validation.png +0 -0
  86. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/img/data_extracts.png +0 -0
  87. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/img/starter_validation.png +0 -0
  88. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/img/step_report_column_schema.png +0 -0
  89. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/img/step_report_column_values.png +0 -0
  90. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/img/sundered_data.png +0 -0
  91. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/index.qmd +0 -0
  92. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/mutate-table-in-step/index.qmd +0 -0
  93. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/numeric-comparisons/index.qmd +0 -0
  94. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/schema-check/index.qmd +0 -0
  95. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/set-membership/index.qmd +0 -0
  96. {pointblank-0.8.5 → pointblank-0.8.7}/docs/demos/using-parquet-data/index.qmd +0 -0
  97. {pointblank-0.8.5 → pointblank-0.8.7}/docs/styles.css +0 -0
  98. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/across.qmd +0 -0
  99. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/actions.qmd +0 -0
  100. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/col-summary-tbl.qmd +0 -0
  101. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/columns.qmd +0 -0
  102. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/extracts.qmd +0 -0
  103. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/index.qmd +0 -0
  104. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/missing-vals-tbl.qmd +0 -0
  105. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/preprocessing.qmd +0 -0
  106. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/preview.qmd +0 -0
  107. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/sundering.qmd +0 -0
  108. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/thresholds.qmd +0 -0
  109. {pointblank-0.8.5 → pointblank-0.8.7}/docs/user-guide/types.qmd +0 -0
  110. {pointblank-0.8.5 → pointblank-0.8.7}/images/pointblank-tabular-report.png +0 -0
  111. {pointblank-0.8.5 → pointblank-0.8.7}/images/pointblank_logo.svg +0 -0
  112. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/_constants_docs.py +0 -0
  113. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/_typing.py +0 -0
  114. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/_utils_check_args.py +0 -0
  115. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/_utils_html.py +0 -0
  116. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/actions.py +0 -0
  117. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/assistant.py +0 -0
  118. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/data/game_revenue-duckdb.zip +0 -0
  119. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/data/game_revenue.zip +0 -0
  120. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/data/nycflights-duckdb.zip +0 -0
  121. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/data/nycflights.zip +0 -0
  122. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/data/polars-api-docs.txt +0 -0
  123. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/data/small_table-duckdb.zip +0 -0
  124. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/data/small_table.zip +0 -0
  125. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/datascan.py +0 -0
  126. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/draft.py +0 -0
  127. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/schema.py +0 -0
  128. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/tf.py +0 -0
  129. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank/thresholds.py +0 -0
  130. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank.egg-info/dependency_links.txt +0 -0
  131. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank.egg-info/requires.txt +0 -0
  132. {pointblank-0.8.5 → pointblank-0.8.7}/pointblank.egg-info/top_level.txt +0 -0
  133. {pointblank-0.8.5 → pointblank-0.8.7}/pyproject.toml +0 -0
  134. {pointblank-0.8.5 → pointblank-0.8.7}/setup.cfg +0 -0
  135. {pointblank-0.8.5 → pointblank-0.8.7}/tests/__init__.py +0 -0
  136. {pointblank-0.8.5 → pointblank-0.8.7}/tests/manual_tests/schema_step_reports.qmd +0 -0
  137. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
  138. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
  139. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
  140. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
  141. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
  142. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
  143. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
  144. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
  145. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
  146. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
  147. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
  148. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
  149. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
  150. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
  151. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
  152. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
  153. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
  154. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
  155. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
  156. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
  157. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
  158. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
  159. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
  160. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
  161. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
  162. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
  163. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
  164. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
  165. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
  166. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
  167. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
  168. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
  169. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
  170. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
  171. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
  172. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
  173. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
  174. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
  175. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
  176. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
  177. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
  178. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
  179. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
  180. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
  181. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
  182. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
  183. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
  184. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
  185. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
  186. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
  187. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
  188. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
  189. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
  190. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
  191. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
  192. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
  193. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
  194. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
  195. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
  196. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
  197. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
  198. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
  199. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
  200. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
  201. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
  202. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
  203. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
  204. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
  205. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
  206. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
  207. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
  208. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
  209. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
  210. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
  211. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
  212. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
  213. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
  214. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
  215. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
  216. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
  217. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
  218. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
  219. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
  220. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
  221. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
  222. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
  223. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
  224. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
  225. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
  226. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
  227. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
  228. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
  229. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
  230. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
  231. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
  232. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
  233. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
  234. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
  235. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
  236. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
  237. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
  238. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
  239. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
  240. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
  241. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +0 -0
  242. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +0 -0
  243. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  244. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  245. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
  246. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
  247. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  248. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  249. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  250. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
  251. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
  252. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  253. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
  254. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
  255. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
  256. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
  257. {pointblank-0.8.5 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
  258. {pointblank-0.8.5 → pointblank-0.8.7}/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
  259. {pointblank-0.8.5 → pointblank-0.8.7}/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
  260. {pointblank-0.8.5 → pointblank-0.8.7}/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
  261. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
  262. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
  263. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
  264. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
  265. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz.ddb +0 -0
  266. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz.parquet +0 -0
  267. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz.sqlite +0 -0
  268. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
  269. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
  270. {pointblank-0.8.5 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
  271. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test__interrogation.py +0 -0
  272. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test__utils.py +0 -0
  273. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test__utils_check_args.py +0 -0
  274. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_actions.py +0 -0
  275. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_assistant.py +0 -0
  276. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_datascan.py +0 -0
  277. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_draft.py +0 -0
  278. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_schema.py +0 -0
  279. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_tf.py +0 -0
  280. {pointblank-0.8.5 → pointblank-0.8.7}/tests/test_thresholds.py +0 -0
@@ -0,0 +1,323 @@
1
+ Metadata-Version: 2.4
2
+ Name: pointblank
3
+ Version: 0.8.7
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
+ <div align="right">
106
+ <a href="translations/README.fr.md">Français</a> |
107
+ <a href="translations/README.de.md">Deutsch</a> |
108
+ <a href="translations/README.it.md">Italiano</a> |
109
+ <a href="translations/README.es.md">Español</a> |
110
+ <a href="translations/README.pt-BR.md">Português</a> |
111
+ <a href="translations/README.zh-CN.md">简体中文</a>
112
+ </div>
113
+
114
+ ## What is Pointblank?
115
+
116
+ Pointblank is a powerful, yet elegant data validation framework for Python that transforms how you ensure data quality. With its intuitive, chainable API, you can quickly validate your data against comprehensive quality checks and visualize results through stunning, interactive reports that make data issues immediately actionable.
117
+
118
+ 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.
119
+
120
+ ## Getting Started in 30 Seconds
121
+
122
+ ```python
123
+ import pointblank as pb
124
+
125
+ validation = (
126
+ pb.Validate(data=pb.load_dataset(dataset="small_table"))
127
+ .col_vals_gt(columns="d", value=100) # Validate values > 100
128
+ .col_vals_le(columns="c", value=5) # Validate values <= 5
129
+ .col_exists(columns=["date", "date_time"]) # Check columns exist
130
+ .interrogate() # Execute and collect results
131
+ )
132
+
133
+ # Get the validation report from the REPL with:
134
+ validation.get_tabular_report().show()
135
+
136
+ # From a notebook simply use:
137
+ validation
138
+ ```
139
+
140
+ <div align="center">
141
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-tabular-report.png" width="800px">
142
+ </div>
143
+
144
+ <br>
145
+
146
+ ## Why Choose Pointblank?
147
+
148
+ - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, PySpark, Snowflake, and more!
149
+ - **Beautiful, interactive reports** - Crystal-clear validation results that highlight issues and help communicate data quality
150
+ - **Composable validation pipeline** - Chain validation steps into a complete data quality workflow
151
+ - **Threshold-based alerts** - Set 'warning', 'error', and 'critical' thresholds with custom actions
152
+ - **Practical outputs** - Use validation results to filter tables, extract problematic data, or trigger downstream processes
153
+
154
+ ## Real-World Example
155
+
156
+ ```python
157
+ import pointblank as pb
158
+ import polars as pl
159
+
160
+ # Load your data
161
+ sales_data = pl.read_csv("sales_data.csv")
162
+
163
+ # Create a comprehensive validation
164
+ validation = (
165
+ pb.Validate(
166
+ data=sales_data,
167
+ tbl_name="sales_data", # Name of the table for reporting
168
+ label="Real-world example.", # Label for the validation, appears in reports
169
+ thresholds=(0.01, 0.02, 0.05), # Set thresholds for warnings, errors, and critical issues
170
+ actions=pb.Actions( # Define actions for any threshold exceedance
171
+ critical="Major data quality issue found in step {step} ({time})."
172
+ ),
173
+ final_actions=pb.FinalActions( # Define final actions for the entire validation
174
+ pb.send_slack_notification(
175
+ webhook_url="https://hooks.slack.com/services/your/webhook/url"
176
+ )
177
+ ),
178
+ brief=True, # Add automatically-generated briefs for each step
179
+ )
180
+ .col_vals_between( # Check numeric ranges with precision
181
+ columns=["price", "quantity"],
182
+ left=0, right=1000
183
+ )
184
+ .col_vals_not_null( # Ensure that columns ending with '_id' don't have null values
185
+ columns=pb.ends_with("_id")
186
+ )
187
+ .col_vals_regex( # Validate patterns with regex
188
+ columns="email",
189
+ pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
190
+ )
191
+ .col_vals_in_set( # Check categorical values
192
+ columns="status",
193
+ set=["pending", "shipped", "delivered", "returned"]
194
+ )
195
+ .conjointly( # Combine multiple conditions
196
+ lambda df: pb.expr_col("revenue") == pb.expr_col("price") * pb.expr_col("quantity"),
197
+ lambda df: pb.expr_col("tax") >= pb.expr_col("revenue") * 0.05
198
+ )
199
+ .interrogate()
200
+ )
201
+ ```
202
+
203
+ ```
204
+ Major data quality issue found in step 7 (2025-04-16 15:03:04.685612+00:00).
205
+ ```
206
+
207
+ ```python
208
+ # Get an HTML report you can share with your team
209
+ validation.get_tabular_report().show("browser")
210
+ ```
211
+
212
+ <div align="center">
213
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-sales-data.png" width="800px">
214
+ </div>
215
+
216
+ ```python
217
+ # Get a report of failing records from a specific step
218
+ validation.get_step_report(i=3).show("browser") # Get failing records from step 3
219
+ ```
220
+
221
+ <div align="center">
222
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-step-report.png" width="800px">
223
+ </div>
224
+
225
+ <br>
226
+
227
+ ## Features That Set Pointblank Apart
228
+
229
+ - **Complete validation workflow** - From data access to validation to reporting in a single pipeline
230
+ - **Built for collaboration** - Share results with colleagues through beautiful interactive reports
231
+ - **Practical outputs** - Get exactly what you need: counts, extracts, summaries, or full reports
232
+ - **Flexible deployment** - Use in notebooks, scripts, or data pipelines
233
+ - **Customizable** - Tailor validation steps and reporting to your specific needs
234
+ - **Internationalization** - Reports can be generated in over 20 languages, including English, Spanish, French, and German
235
+
236
+ ## Documentation and Examples
237
+
238
+ Visit our [documentation site](https://posit-dev.github.io/pointblank) for:
239
+
240
+ - [The User Guide](https://posit-dev.github.io/pointblank/user-guide/)
241
+ - [API reference](https://posit-dev.github.io/pointblank/reference/)
242
+ - [Example gallery](https://posit-dev.github.io/pointblank/demos/)
243
+ - [The Pointblog](https://posit-dev.github.io/pointblank/blog/)
244
+
245
+ ## Join the Community
246
+
247
+ We'd love to hear from you! Connect with us:
248
+
249
+ - [GitHub Issues](https://github.com/posit-dev/pointblank/issues) for bug reports and feature requests
250
+ - [_Discord server_](https://discord.com/invite/YH7CybCNCQ) for discussions and help
251
+ - [Contributing guidelines](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) if you'd like to help improve Pointblank
252
+
253
+ ## Installation
254
+
255
+ You can install Pointblank using pip:
256
+
257
+ ```bash
258
+ pip install pointblank
259
+ ```
260
+
261
+ You can also install Pointblank from Conda-Forge by using:
262
+
263
+ ```bash
264
+ conda install conda-forge::pointblank
265
+ ```
266
+
267
+ If you don't have Polars or Pandas installed, you'll need to install one of them to use Pointblank.
268
+
269
+ ```bash
270
+ pip install "pointblank[pl]" # Install Pointblank with Polars
271
+ pip install "pointblank[pd]" # Install Pointblank with Pandas
272
+ ```
273
+
274
+ To use Pointblank with DuckDB, MySQL, PostgreSQL, or SQLite, install Ibis with the appropriate backend:
275
+
276
+ ```bash
277
+ pip install "pointblank[duckdb]" # Install Pointblank with Ibis + DuckDB
278
+ pip install "pointblank[mysql]" # Install Pointblank with Ibis + MySQL
279
+ pip install "pointblank[postgres]" # Install Pointblank with Ibis + PostgreSQL
280
+ pip install "pointblank[sqlite]" # Install Pointblank with Ibis + SQLite
281
+ ```
282
+
283
+ ## Technical Details
284
+
285
+ 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.
286
+
287
+ ## Contributing to Pointblank
288
+
289
+ 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!
290
+
291
+ Please read over the [contributing guidelines](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) for
292
+ information on how to get started.
293
+
294
+ ## Roadmap
295
+
296
+ We're actively working on enhancing Pointblank with:
297
+
298
+ 1. Additional validation methods for comprehensive data quality checks
299
+ 2. Advanced logging capabilities
300
+ 3. Messaging actions (Slack, email) for threshold exceedances
301
+ 4. LLM-powered validation suggestions and data dictionary generation
302
+ 5. JSON/YAML configuration for pipeline portability
303
+ 6. CLI utility for validation from the command line
304
+ 7. Expanded backend support and certification
305
+ 8. High-quality documentation and examples
306
+
307
+ 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.
308
+
309
+ ## Code of Conduct
310
+
311
+ 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.
312
+
313
+ ## 📄 License
314
+
315
+ Pointblank is licensed under the MIT license.
316
+
317
+ © Posit Software, PBC.
318
+
319
+ ## 🏛️ Governance
320
+
321
+ This project is primarily maintained by
322
+ [Rich Iannone](https://bsky.app/profile/richmeister.bsky.social). Other authors may occasionally
323
+ assist with some of these duties.
@@ -0,0 +1,241 @@
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
+ <div align="right">
24
+ <a href="translations/README.fr.md">Français</a> |
25
+ <a href="translations/README.de.md">Deutsch</a> |
26
+ <a href="translations/README.it.md">Italiano</a> |
27
+ <a href="translations/README.es.md">Español</a> |
28
+ <a href="translations/README.pt-BR.md">Português</a> |
29
+ <a href="translations/README.zh-CN.md">简体中文</a>
30
+ </div>
31
+
32
+ ## What is Pointblank?
33
+
34
+ Pointblank is a powerful, yet elegant data validation framework for Python that transforms how you ensure data quality. With its intuitive, chainable API, you can quickly validate your data against comprehensive quality checks and visualize results through stunning, interactive reports that make data issues immediately actionable.
35
+
36
+ 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.
37
+
38
+ ## Getting Started in 30 Seconds
39
+
40
+ ```python
41
+ import pointblank as pb
42
+
43
+ validation = (
44
+ pb.Validate(data=pb.load_dataset(dataset="small_table"))
45
+ .col_vals_gt(columns="d", value=100) # Validate values > 100
46
+ .col_vals_le(columns="c", value=5) # Validate values <= 5
47
+ .col_exists(columns=["date", "date_time"]) # Check columns exist
48
+ .interrogate() # Execute and collect results
49
+ )
50
+
51
+ # Get the validation report from the REPL with:
52
+ validation.get_tabular_report().show()
53
+
54
+ # From a notebook simply use:
55
+ validation
56
+ ```
57
+
58
+ <div align="center">
59
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-tabular-report.png" width="800px">
60
+ </div>
61
+
62
+ <br>
63
+
64
+ ## Why Choose Pointblank?
65
+
66
+ - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, PySpark, Snowflake, and more!
67
+ - **Beautiful, interactive reports** - Crystal-clear validation results that highlight issues and help communicate data quality
68
+ - **Composable validation pipeline** - Chain validation steps into a complete data quality workflow
69
+ - **Threshold-based alerts** - Set 'warning', 'error', and 'critical' thresholds with custom actions
70
+ - **Practical outputs** - Use validation results to filter tables, extract problematic data, or trigger downstream processes
71
+
72
+ ## Real-World Example
73
+
74
+ ```python
75
+ import pointblank as pb
76
+ import polars as pl
77
+
78
+ # Load your data
79
+ sales_data = pl.read_csv("sales_data.csv")
80
+
81
+ # Create a comprehensive validation
82
+ validation = (
83
+ pb.Validate(
84
+ data=sales_data,
85
+ tbl_name="sales_data", # Name of the table for reporting
86
+ label="Real-world example.", # Label for the validation, appears in reports
87
+ thresholds=(0.01, 0.02, 0.05), # Set thresholds for warnings, errors, and critical issues
88
+ actions=pb.Actions( # Define actions for any threshold exceedance
89
+ critical="Major data quality issue found in step {step} ({time})."
90
+ ),
91
+ final_actions=pb.FinalActions( # Define final actions for the entire validation
92
+ pb.send_slack_notification(
93
+ webhook_url="https://hooks.slack.com/services/your/webhook/url"
94
+ )
95
+ ),
96
+ brief=True, # Add automatically-generated briefs for each step
97
+ )
98
+ .col_vals_between( # Check numeric ranges with precision
99
+ columns=["price", "quantity"],
100
+ left=0, right=1000
101
+ )
102
+ .col_vals_not_null( # Ensure that columns ending with '_id' don't have null values
103
+ columns=pb.ends_with("_id")
104
+ )
105
+ .col_vals_regex( # Validate patterns with regex
106
+ columns="email",
107
+ pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
108
+ )
109
+ .col_vals_in_set( # Check categorical values
110
+ columns="status",
111
+ set=["pending", "shipped", "delivered", "returned"]
112
+ )
113
+ .conjointly( # Combine multiple conditions
114
+ lambda df: pb.expr_col("revenue") == pb.expr_col("price") * pb.expr_col("quantity"),
115
+ lambda df: pb.expr_col("tax") >= pb.expr_col("revenue") * 0.05
116
+ )
117
+ .interrogate()
118
+ )
119
+ ```
120
+
121
+ ```
122
+ Major data quality issue found in step 7 (2025-04-16 15:03:04.685612+00:00).
123
+ ```
124
+
125
+ ```python
126
+ # Get an HTML report you can share with your team
127
+ validation.get_tabular_report().show("browser")
128
+ ```
129
+
130
+ <div align="center">
131
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-sales-data.png" width="800px">
132
+ </div>
133
+
134
+ ```python
135
+ # Get a report of failing records from a specific step
136
+ validation.get_step_report(i=3).show("browser") # Get failing records from step 3
137
+ ```
138
+
139
+ <div align="center">
140
+ <img src="https://posit-dev.github.io/pointblank/assets/pointblank-step-report.png" width="800px">
141
+ </div>
142
+
143
+ <br>
144
+
145
+ ## Features That Set Pointblank Apart
146
+
147
+ - **Complete validation workflow** - From data access to validation to reporting in a single pipeline
148
+ - **Built for collaboration** - Share results with colleagues through beautiful interactive reports
149
+ - **Practical outputs** - Get exactly what you need: counts, extracts, summaries, or full reports
150
+ - **Flexible deployment** - Use in notebooks, scripts, or data pipelines
151
+ - **Customizable** - Tailor validation steps and reporting to your specific needs
152
+ - **Internationalization** - Reports can be generated in over 20 languages, including English, Spanish, French, and German
153
+
154
+ ## Documentation and Examples
155
+
156
+ Visit our [documentation site](https://posit-dev.github.io/pointblank) for:
157
+
158
+ - [The User Guide](https://posit-dev.github.io/pointblank/user-guide/)
159
+ - [API reference](https://posit-dev.github.io/pointblank/reference/)
160
+ - [Example gallery](https://posit-dev.github.io/pointblank/demos/)
161
+ - [The Pointblog](https://posit-dev.github.io/pointblank/blog/)
162
+
163
+ ## Join the Community
164
+
165
+ We'd love to hear from you! Connect with us:
166
+
167
+ - [GitHub Issues](https://github.com/posit-dev/pointblank/issues) for bug reports and feature requests
168
+ - [_Discord server_](https://discord.com/invite/YH7CybCNCQ) for discussions and help
169
+ - [Contributing guidelines](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) if you'd like to help improve Pointblank
170
+
171
+ ## Installation
172
+
173
+ You can install Pointblank using pip:
174
+
175
+ ```bash
176
+ pip install pointblank
177
+ ```
178
+
179
+ You can also install Pointblank from Conda-Forge by using:
180
+
181
+ ```bash
182
+ conda install conda-forge::pointblank
183
+ ```
184
+
185
+ If you don't have Polars or Pandas installed, you'll need to install one of them to use Pointblank.
186
+
187
+ ```bash
188
+ pip install "pointblank[pl]" # Install Pointblank with Polars
189
+ pip install "pointblank[pd]" # Install Pointblank with Pandas
190
+ ```
191
+
192
+ To use Pointblank with DuckDB, MySQL, PostgreSQL, or SQLite, install Ibis with the appropriate backend:
193
+
194
+ ```bash
195
+ pip install "pointblank[duckdb]" # Install Pointblank with Ibis + DuckDB
196
+ pip install "pointblank[mysql]" # Install Pointblank with Ibis + MySQL
197
+ pip install "pointblank[postgres]" # Install Pointblank with Ibis + PostgreSQL
198
+ pip install "pointblank[sqlite]" # Install Pointblank with Ibis + SQLite
199
+ ```
200
+
201
+ ## Technical Details
202
+
203
+ 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.
204
+
205
+ ## Contributing to Pointblank
206
+
207
+ 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!
208
+
209
+ Please read over the [contributing guidelines](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) for
210
+ information on how to get started.
211
+
212
+ ## Roadmap
213
+
214
+ We're actively working on enhancing Pointblank with:
215
+
216
+ 1. Additional validation methods for comprehensive data quality checks
217
+ 2. Advanced logging capabilities
218
+ 3. Messaging actions (Slack, email) for threshold exceedances
219
+ 4. LLM-powered validation suggestions and data dictionary generation
220
+ 5. JSON/YAML configuration for pipeline portability
221
+ 6. CLI utility for validation from the command line
222
+ 7. Expanded backend support and certification
223
+ 8. High-quality documentation and examples
224
+
225
+ 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.
226
+
227
+ ## Code of Conduct
228
+
229
+ 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.
230
+
231
+ ## 📄 License
232
+
233
+ Pointblank is licensed under the MIT license.
234
+
235
+ © Posit Software, PBC.
236
+
237
+ ## 🏛️ Governance
238
+
239
+ This project is primarily maintained by
240
+ [Rich Iannone](https://bsky.app/profile/richmeister.bsky.social). Other authors may occasionally
241
+ 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
@@ -3,7 +3,7 @@ jupyter: python3
3
3
  html-table-processing: none
4
4
  title: "Introducing Pointblank"
5
5
  author: Rich Iannone
6
- date: 2024-04-04
6
+ date: 2025-04-04
7
7
  freeze: true
8
8
  ---
9
9