pointblank 0.8.6__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 (276) hide show
  1. {pointblank-0.8.6 → pointblank-0.8.7}/PKG-INFO +15 -4
  2. {pointblank-0.8.6 → pointblank-0.8.7}/README.md +14 -3
  3. {pointblank-0.8.6 → pointblank-0.8.7}/docs/blog/intro-pointblank/index.qmd +1 -1
  4. {pointblank-0.8.6 → pointblank-0.8.7}/docs/index.qmd +1 -1
  5. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/_interrogation.py +10 -4
  6. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/validate.py +10 -2
  7. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank.egg-info/PKG-INFO +15 -4
  8. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank.egg-info/SOURCES.txt +7 -1
  9. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_validate.py +25 -0
  10. pointblank-0.8.7/translations/README.de.md +240 -0
  11. pointblank-0.8.7/translations/README.es.md +238 -0
  12. pointblank-0.8.7/translations/README.fr.md +238 -0
  13. pointblank-0.8.7/translations/README.it.md +240 -0
  14. pointblank-0.8.7/translations/README.pt-BR.md +240 -0
  15. pointblank-0.8.7/translations/README.zh-CN.md +233 -0
  16. {pointblank-0.8.6 → pointblank-0.8.7}/.github/CODE_OF_CONDUCT.md +0 -0
  17. {pointblank-0.8.6 → pointblank-0.8.7}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  18. {pointblank-0.8.6 → pointblank-0.8.7}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  19. {pointblank-0.8.6 → pointblank-0.8.7}/.github/ISSUE_TEMPLATE/question.md +0 -0
  20. {pointblank-0.8.6 → pointblank-0.8.7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  21. {pointblank-0.8.6 → pointblank-0.8.7}/.github/SECURITY.md +0 -0
  22. {pointblank-0.8.6 → pointblank-0.8.7}/.github/workflows/ci-docs.yaml +0 -0
  23. {pointblank-0.8.6 → pointblank-0.8.7}/.github/workflows/ci-tests.yaml +0 -0
  24. {pointblank-0.8.6 → pointblank-0.8.7}/.github/workflows/code-checks.yaml +0 -0
  25. {pointblank-0.8.6 → pointblank-0.8.7}/.gitignore +0 -0
  26. {pointblank-0.8.6 → pointblank-0.8.7}/.pre-commit-config.yaml +0 -0
  27. {pointblank-0.8.6 → pointblank-0.8.7}/.vscode/settings.json +0 -0
  28. {pointblank-0.8.6 → pointblank-0.8.7}/CITATION.cff +0 -0
  29. {pointblank-0.8.6 → pointblank-0.8.7}/CONTRIBUTING.md +0 -0
  30. {pointblank-0.8.6 → pointblank-0.8.7}/LICENSE +0 -0
  31. {pointblank-0.8.6 → pointblank-0.8.7}/Makefile +0 -0
  32. {pointblank-0.8.6 → pointblank-0.8.7}/data_raw/game_revenue.csv +0 -0
  33. {pointblank-0.8.6 → pointblank-0.8.7}/data_raw/nycflights.csv +0 -0
  34. {pointblank-0.8.6 → pointblank-0.8.7}/data_raw/nycflights.ddb +0 -0
  35. {pointblank-0.8.6 → pointblank-0.8.7}/data_raw/small_table.csv +0 -0
  36. {pointblank-0.8.6 → pointblank-0.8.7}/data_raw/x-01-parquet.qmd +0 -0
  37. {pointblank-0.8.6 → pointblank-0.8.7}/data_raw/x-02-duckdb.qmd +0 -0
  38. {pointblank-0.8.6 → pointblank-0.8.7}/data_raw/x-03-sqlite.qmd +0 -0
  39. {pointblank-0.8.6 → pointblank-0.8.7}/docs/.gitignore +0 -0
  40. {pointblank-0.8.6 → pointblank-0.8.7}/docs/_extensions/machow/interlinks/.gitignore +0 -0
  41. {pointblank-0.8.6 → pointblank-0.8.7}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
  42. {pointblank-0.8.6 → pointblank-0.8.7}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
  43. {pointblank-0.8.6 → pointblank-0.8.7}/docs/_quarto.yml +0 -0
  44. {pointblank-0.8.6 → pointblank-0.8.7}/docs/assets/fav-logo.png +0 -0
  45. {pointblank-0.8.6 → pointblank-0.8.7}/docs/assets/pointblank-sales-data.png +0 -0
  46. {pointblank-0.8.6 → pointblank-0.8.7}/docs/assets/pointblank-step-report.png +0 -0
  47. {pointblank-0.8.6 → pointblank-0.8.7}/docs/assets/pointblank-tabular-report.png +0 -0
  48. {pointblank-0.8.6 → pointblank-0.8.7}/docs/assets/pointblank_logo.svg +0 -0
  49. {pointblank-0.8.6 → pointblank-0.8.7}/docs/assets/validation-table-diagram.png +0 -0
  50. {pointblank-0.8.6 → pointblank-0.8.7}/docs/blog/index.qmd +0 -0
  51. {pointblank-0.8.6 → pointblank-0.8.7}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
  52. {pointblank-0.8.6 → pointblank-0.8.7}/docs/blog/intro-pointblank/step_report.png +0 -0
  53. {pointblank-0.8.6 → pointblank-0.8.7}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
  54. {pointblank-0.8.6 → pointblank-0.8.7}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
  55. {pointblank-0.8.6 → pointblank-0.8.7}/docs/blog/pointblank_blog_logo.png +0 -0
  56. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/01-starter/index.qmd +0 -0
  57. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/02-advanced/index.qmd +0 -0
  58. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/03-data-extracts/index.qmd +0 -0
  59. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/04-sundered-data/index.qmd +0 -0
  60. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/05-step-report-column-check/index.qmd +0 -0
  61. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
  62. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
  63. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/check-row-column-counts/index.qmd +0 -0
  64. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/checks-for-missing/index.qmd +0 -0
  65. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
  66. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/column-selector-functions/index.qmd +0 -0
  67. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/comparisons-across-columns/index.qmd +0 -0
  68. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/data/game_revenue.parquet +0 -0
  69. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
  70. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
  71. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/expect-text-pattern/index.qmd +0 -0
  72. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/failure-thresholds/index.qmd +0 -0
  73. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/img/advanced_validation.png +0 -0
  74. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/img/data_extracts.png +0 -0
  75. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/img/starter_validation.png +0 -0
  76. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/img/step_report_column_schema.png +0 -0
  77. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/img/step_report_column_values.png +0 -0
  78. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/img/sundered_data.png +0 -0
  79. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/index.qmd +0 -0
  80. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/mutate-table-in-step/index.qmd +0 -0
  81. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/numeric-comparisons/index.qmd +0 -0
  82. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/schema-check/index.qmd +0 -0
  83. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/set-membership/index.qmd +0 -0
  84. {pointblank-0.8.6 → pointblank-0.8.7}/docs/demos/using-parquet-data/index.qmd +0 -0
  85. {pointblank-0.8.6 → pointblank-0.8.7}/docs/styles.css +0 -0
  86. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/across.qmd +0 -0
  87. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/actions.qmd +0 -0
  88. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/col-summary-tbl.qmd +0 -0
  89. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/columns.qmd +0 -0
  90. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/extracts.qmd +0 -0
  91. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/index.qmd +0 -0
  92. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/missing-vals-tbl.qmd +0 -0
  93. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/preprocessing.qmd +0 -0
  94. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/preview.qmd +0 -0
  95. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/sundering.qmd +0 -0
  96. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/thresholds.qmd +0 -0
  97. {pointblank-0.8.6 → pointblank-0.8.7}/docs/user-guide/types.qmd +0 -0
  98. {pointblank-0.8.6 → pointblank-0.8.7}/images/pointblank-tabular-report.png +0 -0
  99. {pointblank-0.8.6 → pointblank-0.8.7}/images/pointblank_logo.svg +0 -0
  100. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/__init__.py +0 -0
  101. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/_constants.py +0 -0
  102. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/_constants_docs.py +0 -0
  103. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/_constants_translations.py +0 -0
  104. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/_typing.py +0 -0
  105. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/_utils.py +0 -0
  106. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/_utils_check_args.py +0 -0
  107. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/_utils_html.py +0 -0
  108. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/actions.py +0 -0
  109. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/assistant.py +0 -0
  110. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/column.py +0 -0
  111. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/data/api-docs.txt +0 -0
  112. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/data/game_revenue-duckdb.zip +0 -0
  113. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/data/game_revenue.zip +0 -0
  114. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/data/nycflights-duckdb.zip +0 -0
  115. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/data/nycflights.zip +0 -0
  116. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/data/polars-api-docs.txt +0 -0
  117. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/data/small_table-duckdb.zip +0 -0
  118. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/data/small_table.zip +0 -0
  119. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/datascan.py +0 -0
  120. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/draft.py +0 -0
  121. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/schema.py +0 -0
  122. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/tf.py +0 -0
  123. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank/thresholds.py +0 -0
  124. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank.egg-info/dependency_links.txt +0 -0
  125. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank.egg-info/requires.txt +0 -0
  126. {pointblank-0.8.6 → pointblank-0.8.7}/pointblank.egg-info/top_level.txt +0 -0
  127. {pointblank-0.8.6 → pointblank-0.8.7}/pyproject.toml +0 -0
  128. {pointblank-0.8.6 → pointblank-0.8.7}/setup.cfg +0 -0
  129. {pointblank-0.8.6 → pointblank-0.8.7}/tests/__init__.py +0 -0
  130. {pointblank-0.8.6 → pointblank-0.8.7}/tests/manual_tests/schema_step_reports.qmd +0 -0
  131. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
  132. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
  133. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
  134. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +0 -0
  135. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
  136. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
  137. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
  138. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
  139. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
  140. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
  141. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
  142. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
  143. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
  144. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
  145. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
  146. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
  147. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
  148. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
  149. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
  150. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
  151. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
  152. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
  153. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
  154. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
  155. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
  156. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
  157. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
  158. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
  159. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
  160. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
  161. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
  162. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
  163. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
  164. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
  165. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
  166. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
  167. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
  168. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
  169. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
  170. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
  171. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
  172. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
  173. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
  174. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
  175. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
  176. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
  177. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
  178. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
  179. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
  180. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
  181. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
  182. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
  183. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
  184. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
  185. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
  186. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
  187. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
  188. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
  189. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
  190. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
  191. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
  192. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
  193. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
  194. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
  195. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
  196. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
  197. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
  198. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
  199. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
  200. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
  201. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
  202. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
  203. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
  204. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
  205. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
  206. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
  207. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
  208. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
  209. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
  210. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
  211. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
  212. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
  213. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
  214. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
  215. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
  216. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
  217. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
  218. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
  219. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
  220. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
  221. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
  222. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
  223. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
  224. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
  225. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
  226. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
  227. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
  228. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
  229. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
  230. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
  231. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
  232. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
  233. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
  234. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
  235. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
  236. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +0 -0
  237. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +0 -0
  238. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  239. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  240. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
  241. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
  242. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  243. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
  244. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
  245. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
  246. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
  247. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
  248. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
  249. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
  250. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
  251. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
  252. {pointblank-0.8.6 → pointblank-0.8.7}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
  253. {pointblank-0.8.6 → 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
  254. {pointblank-0.8.6 → 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
  255. {pointblank-0.8.6 → 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
  256. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
  257. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
  258. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
  259. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
  260. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz.ddb +0 -0
  261. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz.parquet +0 -0
  262. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz.sqlite +0 -0
  263. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
  264. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
  265. {pointblank-0.8.6 → pointblank-0.8.7}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
  266. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test__interrogation.py +0 -0
  267. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test__utils.py +0 -0
  268. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test__utils_check_args.py +0 -0
  269. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_actions.py +0 -0
  270. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_assistant.py +0 -0
  271. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_column.py +0 -0
  272. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_datascan.py +0 -0
  273. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_draft.py +0 -0
  274. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_schema.py +0 -0
  275. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_tf.py +0 -0
  276. {pointblank-0.8.6 → pointblank-0.8.7}/tests/test_thresholds.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pointblank
3
- Version: 0.8.6
3
+ Version: 0.8.7
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
@@ -102,9 +102,18 @@ _Data validation made beautiful and powerful_
102
102
 
103
103
  </div>
104
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
+
105
114
  ## What is Pointblank?
106
115
 
107
- Pointblank is a modern data validation framework for Python that helps you trust your data with confidence. It provides a fluent, expressive API to validate your data against a wide range of constraints and presents results in beautiful, interactive reports.
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.
108
117
 
109
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.
110
119
 
@@ -134,9 +143,9 @@ validation
134
143
 
135
144
  <br>
136
145
 
137
- Why Choose Pointblank?
146
+ ## Why Choose Pointblank?
138
147
 
139
- - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, and more!
148
+ - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, PySpark, Snowflake, and more!
140
149
  - **Beautiful, interactive reports** - Crystal-clear validation results that highlight issues and help communicate data quality
141
150
  - **Composable validation pipeline** - Chain validation steps into a complete data quality workflow
142
151
  - **Threshold-based alerts** - Set 'warning', 'error', and 'critical' thresholds with custom actions
@@ -213,6 +222,8 @@ validation.get_step_report(i=3).show("browser") # Get failing records from step
213
222
  <img src="https://posit-dev.github.io/pointblank/assets/pointblank-step-report.png" width="800px">
214
223
  </div>
215
224
 
225
+ <br>
226
+
216
227
  ## Features That Set Pointblank Apart
217
228
 
218
229
  - **Complete validation workflow** - From data access to validation to reporting in a single pipeline
@@ -20,9 +20,18 @@ _Data validation made beautiful and powerful_
20
20
 
21
21
  </div>
22
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
+
23
32
  ## What is Pointblank?
24
33
 
25
- Pointblank is a modern data validation framework for Python that helps you trust your data with confidence. It provides a fluent, expressive API to validate your data against a wide range of constraints and presents results in beautiful, interactive reports.
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.
26
35
 
27
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.
28
37
 
@@ -52,9 +61,9 @@ validation
52
61
 
53
62
  <br>
54
63
 
55
- Why Choose Pointblank?
64
+ ## Why Choose Pointblank?
56
65
 
57
- - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, and more!
66
+ - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, PySpark, Snowflake, and more!
58
67
  - **Beautiful, interactive reports** - Crystal-clear validation results that highlight issues and help communicate data quality
59
68
  - **Composable validation pipeline** - Chain validation steps into a complete data quality workflow
60
69
  - **Threshold-based alerts** - Set 'warning', 'error', and 'critical' thresholds with custom actions
@@ -131,6 +140,8 @@ validation.get_step_report(i=3).show("browser") # Get failing records from step
131
140
  <img src="https://posit-dev.github.io/pointblank/assets/pointblank-step-report.png" width="800px">
132
141
  </div>
133
142
 
143
+ <br>
144
+
134
145
  ## Features That Set Pointblank Apart
135
146
 
136
147
  - **Complete validation workflow** - From data access to validation to reporting in a single pipeline
@@ -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
 
@@ -11,7 +11,7 @@ _Data validation made beautiful and powerful_
11
11
 
12
12
  </div>
13
13
 
14
- Pointblank is a modern data validation framework for Python that helps you trust your data with confidence. It provides a fluent, expressive API to validate your data against a wide range of constraints and presents results in beautiful, interactive reports.
14
+ 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.
15
15
 
16
16
  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.
17
17
 
@@ -1089,14 +1089,20 @@ class Interrogator:
1089
1089
  def isin(self) -> FrameT | Any:
1090
1090
  # Ibis backends ---------------------------------------------
1091
1091
 
1092
+ can_be_null: bool = None in self.set
1093
+
1092
1094
  if self.tbl_type in IBIS_BACKENDS:
1093
- return self.x.mutate(pb_is_good_=self.x[self.column].isin(self.set))
1095
+ base_expr = self.x[self.column].isin(self.set)
1096
+ if can_be_null:
1097
+ base_expr = base_expr | self.x[self.column].isnull()
1098
+ return self.x.mutate(pb_is_good_=base_expr)
1094
1099
 
1095
1100
  # Local backends (Narwhals) ---------------------------------
1101
+ base_expr: nw.Expr = nw.col(self.column).is_in(self.set)
1102
+ if can_be_null:
1103
+ base_expr = base_expr | nw.col(self.column).is_null()
1096
1104
 
1097
- return self.x.with_columns(
1098
- pb_is_good_=nw.col(self.column).is_in(self.set),
1099
- ).to_native()
1105
+ return self.x.with_columns(pb_is_good_=base_expr).to_native()
1100
1106
 
1101
1107
  def notin(self) -> FrameT | Any:
1102
1108
  # Ibis backends ---------------------------------------------
@@ -87,6 +87,8 @@ from pointblank.thresholds import (
87
87
  )
88
88
 
89
89
  if TYPE_CHECKING:
90
+ from collections.abc import Collection
91
+
90
92
  from pointblank._typing import AbsoluteBounds, Tolerance
91
93
 
92
94
  __all__ = [
@@ -4311,7 +4313,7 @@ class Validate:
4311
4313
  def col_vals_in_set(
4312
4314
  self,
4313
4315
  columns: str | list[str] | Column | ColumnSelector | ColumnSelectorNarwhals,
4314
- set: list[float | int],
4316
+ set: Collection[Any],
4315
4317
  pre: Callable | None = None,
4316
4318
  thresholds: int | float | bool | tuple | dict | Thresholds = None,
4317
4319
  actions: Actions | None = None,
@@ -4471,7 +4473,13 @@ class Validate:
4471
4473
  assertion_type = _get_fn_name()
4472
4474
 
4473
4475
  _check_column(column=columns)
4474
- _check_set_types(set=set)
4476
+
4477
+ for val in set:
4478
+ if val is None:
4479
+ continue
4480
+ if not isinstance(val, (float, int, str)):
4481
+ raise ValueError("`set=` must be a list of floats, integers, or strings.")
4482
+
4475
4483
  _check_pre(pre=pre)
4476
4484
  _check_thresholds(thresholds=thresholds)
4477
4485
  _check_boolean_input(param=active, param_name="active")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pointblank
3
- Version: 0.8.6
3
+ Version: 0.8.7
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
@@ -102,9 +102,18 @@ _Data validation made beautiful and powerful_
102
102
 
103
103
  </div>
104
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
+
105
114
  ## What is Pointblank?
106
115
 
107
- Pointblank is a modern data validation framework for Python that helps you trust your data with confidence. It provides a fluent, expressive API to validate your data against a wide range of constraints and presents results in beautiful, interactive reports.
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.
108
117
 
109
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.
110
119
 
@@ -134,9 +143,9 @@ validation
134
143
 
135
144
  <br>
136
145
 
137
- Why Choose Pointblank?
146
+ ## Why Choose Pointblank?
138
147
 
139
- - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, and more!
148
+ - **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, PySpark, Snowflake, and more!
140
149
  - **Beautiful, interactive reports** - Crystal-clear validation results that highlight issues and help communicate data quality
141
150
  - **Composable validation pipeline** - Chain validation steps into a complete data quality workflow
142
151
  - **Threshold-based alerts** - Set 'warning', 'error', and 'critical' thresholds with custom actions
@@ -213,6 +222,8 @@ validation.get_step_report(i=3).show("browser") # Get failing records from step
213
222
  <img src="https://posit-dev.github.io/pointblank/assets/pointblank-step-report.png" width="800px">
214
223
  </div>
215
224
 
225
+ <br>
226
+
216
227
  ## Features That Set Pointblank Apart
217
228
 
218
229
  - **Complete validation workflow** - From data access to validation to reporting in a single pipeline
@@ -265,4 +265,10 @@ tests/tbl_files/tbl_xyz.parquet
265
265
  tests/tbl_files/tbl_xyz.sqlite
266
266
  tests/tbl_files/tbl_xyz_missing.ddb
267
267
  tests/tbl_files/tbl_xyz_missing.parquet
268
- tests/tbl_files/tbl_xyz_missing.sqlite
268
+ tests/tbl_files/tbl_xyz_missing.sqlite
269
+ translations/README.de.md
270
+ translations/README.es.md
271
+ translations/README.fr.md
272
+ translations/README.it.md
273
+ translations/README.pt-BR.md
274
+ translations/README.zh-CN.md
@@ -14,6 +14,7 @@ import contextlib
14
14
  import datetime
15
15
 
16
16
  import pandas as pd
17
+
17
18
  import polars as pl
18
19
  import ibis
19
20
 
@@ -347,6 +348,30 @@ def test_validate_class_lang_locale():
347
348
  Validate(tbl_pd, lang="invalid")
348
349
 
349
350
 
351
+ @pytest.mark.parametrize(
352
+ "data",
353
+ (
354
+ pl.from_dict({"foo": [1, 2, None], "bar": ["winston", "cat", None]}).to_pandas(),
355
+ pl.from_dict({"foo": [1, 2, None], "bar": ["winston", "cat", None]}),
356
+ ibis.memtable(pl.from_dict({"foo": [1, 2, None], "bar": ["winston", "cat", None]})),
357
+ ),
358
+ )
359
+ def test_null_vals_in_set(data: Any) -> None:
360
+ validate = (
361
+ Validate(data)
362
+ .col_vals_in_set(["foo"], set=[1, 2, None])
363
+ .col_vals_in_set(["bar"], set=["winston", "cat", None])
364
+ .interrogate()
365
+ )
366
+
367
+ validate.assert_passing()
368
+
369
+ validate = Validate(data).col_vals_in_set("foo", [1, 2]).interrogate()
370
+
371
+ with pytest.raises(AssertionError):
372
+ validate.assert_passing()
373
+
374
+
350
375
  def test_validation_info():
351
376
  v = _ValidationInfo(
352
377
  i=1,
@@ -0,0 +1,240 @@
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
+ _Datenvalidierung, schön und leistungsstark_
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="../README.md">English</a> |
25
+ <a href="README.fr.md">Français</a> |
26
+ <a href="README.it.md">Italiano</a> |
27
+ <a href="README.es.md">Español</a> |
28
+ <a href="README.pt-BR.md">Português</a> |
29
+ <a href="README.zh-CN.md">简体中文</a>
30
+ </div>
31
+
32
+ ## Was ist Pointblank?
33
+
34
+ Pointblank ist ein leistungsstarkes und zugleich elegantes Datenvalidierungsframework für Python, das die Art und Weise verändert, wie Sie Datenqualität sicherstellen. Mit seiner intuitiven, verkettbaren API können Sie Ihre Daten schnell gegen umfassende Qualitätsprüfungen validieren und die Ergebnisse durch beeindruckende, interaktive Berichte visualisieren, die Datenprobleme sofort handhabbar machen.
35
+
36
+ Ob Sie Data Scientist, Data Engineer oder Analyst sind - Pointblank hilft Ihnen dabei, Datenqualitätsprobleme zu erkennen, bevor sie Ihre Analysen oder nachgelagerte Systeme beeinträchtigen.
37
+
38
+ ## In 30 Sekunden loslegen
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) # Validiere Werte > 100
46
+ .col_vals_le(columns="c", value=5) # Validiere Werte <= 5
47
+ .col_exists(columns=["date", "date_time"]) # Prüfe, ob Spalten existieren
48
+ .interrogate() # Ausführen und Ergebnisse sammeln
49
+ )
50
+
51
+ # Validierungsbericht im REPL mit:
52
+ validation.get_tabular_report().show()
53
+
54
+ # In einem Notebook einfach:
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
+ ## Warum Pointblank wählen?
65
+
66
+ - **Funktioniert mit Ihrem bestehenden Stack** - Nahtlose Integration mit Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, PySpark, Snowflake und mehr!
67
+ - **Schöne, interaktive Berichte** - Kristallklare Validierungsergebnisse, die Probleme hervorheben und die Kommunikation der Datenqualität unterstützen
68
+ - **Komponierbare Validierungs-Pipeline** - Verketten Sie Validierungsschritte zu einem vollständigen Datenqualitäts-Workflow
69
+ - **Schwellenwertbasierte Warnungen** - Setzen Sie 'Warnung', 'Fehler' und 'Kritisch'-Schwellenwerte mit benutzerdefinierten Aktionen
70
+ - **Praktische Ausgaben** - Nutzen Sie Validierungsergebnisse, um Tabellen zu filtern, problematische Daten zu extrahieren oder nachgelagerte Prozesse auszulösen
71
+
72
+ ## Praxisbeispiel
73
+
74
+ ```python
75
+ import pointblank as pb
76
+ import polars as pl
77
+
78
+ # Laden Sie Ihre Daten
79
+ sales_data = pl.read_csv("sales_data.csv")
80
+
81
+ # Erstellen Sie eine umfassende Validierung
82
+ validation = (
83
+ pb.Validate(
84
+ data=sales_data,
85
+ tbl_name="sales_data", # Name der Tabelle für Berichte
86
+ label="Praxisbeispiel", # Label für die Validierung, erscheint in Berichten
87
+ thresholds=(0.01, 0.02, 0.05), # Schwellenwerte für Warnungen, Fehler und kritische Probleme festlegen
88
+ actions=pb.Actions( # Aktionen für Schwellenwertüberschreitungen definieren
89
+ critical="Schwerwiegendes Datenqualitätsproblem in Schritt {step} gefunden ({time})."
90
+ ),
91
+ final_actions=pb.FinalActions( # Abschlussaktionen für die gesamte Validierung definieren
92
+ pb.send_slack_notification(
93
+ webhook_url="https://hooks.slack.com/services/your/webhook/url"
94
+ )
95
+ ),
96
+ brief=True, # Automatisch generierte Kurzbeschreibungen für jeden Schritt hinzufügen
97
+ )
98
+ .col_vals_between( # Zahlenbereiche mit Präzision prüfen
99
+ columns=["price", "quantity"],
100
+ left=0, right=1000
101
+ )
102
+ .col_vals_not_null( # Sicherstellen, dass Spalten mit '_id' am Ende keine Null-Werte haben
103
+ columns=pb.ends_with("_id")
104
+ )
105
+ .col_vals_regex( # Muster mit Regex validieren
106
+ columns="email",
107
+ pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
108
+ )
109
+ .col_vals_in_set( # Kategorische Werte prüfen
110
+ columns="status",
111
+ set=["pending", "shipped", "delivered", "returned"]
112
+ )
113
+ .conjointly( # Mehrere Bedingungen kombinieren
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
+ Schwerwiegendes Datenqualitätsproblem in Schritt 7 gefunden (2025-04-16 15:03:04.685612+00:00).
123
+ ```
124
+
125
+ ```python
126
+ # HTML-Bericht erhalten, den Sie mit Ihrem Team teilen können
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
+ # Bericht über fehlgeschlagene Datensätze aus einem bestimmten Schritt abrufen
136
+ validation.get_step_report(i=3).show("browser") # Fehlgeschlagene Datensätze aus Schritt 3 abrufen
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
+ ## Funktionen, die Pointblank auszeichnen
146
+
147
+ - **Vollständiger Validierungs-Workflow** - Von Datenzugriff über Validierung bis hin zur Berichterstattung in einer einzigen Pipeline
148
+ - **Für die Zusammenarbeit konzipiert** - Teilen Sie Ergebnisse mit Kollegen durch schöne interaktive Berichte
149
+ - **Praktische Ausgaben** - Erhalten Sie genau das, was Sie brauchen: Zählungen, Auszüge, Zusammenfassungen oder vollständige Berichte
150
+ - **Flexible Einsatzmöglichkeiten** - Verwenden Sie es in Notebooks, Skripten oder Datenpipelines
151
+ - **Anpassbar** - Passen Sie Validierungsschritte und Berichterstattung an Ihre spezifischen Anforderungen an
152
+ - **Internationalisierung** - Berichte können in über 20 Sprachen generiert werden, darunter Englisch, Spanisch, Französisch und Deutsch
153
+
154
+ ## Dokumentation und Beispiele
155
+
156
+ Besuchen Sie unsere [Dokumentationswebsite](https://posit-dev.github.io/pointblank) für:
157
+
158
+ - [Das Benutzerhandbuch](https://posit-dev.github.io/pointblank/user-guide/)
159
+ - [API-Referenz](https://posit-dev.github.io/pointblank/reference/)
160
+ - [Beispielgalerie](https://posit-dev.github.io/pointblank/demos/)
161
+ - [Der Pointblog](https://posit-dev.github.io/pointblank/blog/)
162
+
163
+ ## Werden Sie Teil der Community
164
+
165
+ Wir freuen uns, von Ihnen zu hören! Verbinden Sie sich mit uns:
166
+
167
+ - [GitHub Issues](https://github.com/posit-dev/pointblank/issues) für Fehlerberichte und Feature-Anfragen
168
+ - [_Discord-Server_](https://discord.com/invite/YH7CybCNCQ) für Diskussionen und Hilfe
169
+ - [Richtlinien für Mitwirkende](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md), wenn Sie bei der Verbesserung von Pointblank helfen möchten
170
+
171
+ ## Installation
172
+
173
+ Sie können Pointblank mit pip installieren:
174
+
175
+ ```bash
176
+ pip install pointblank
177
+ ```
178
+
179
+ Sie können Pointblank auch von Conda-Forge installieren:
180
+
181
+ ```bash
182
+ conda install conda-forge::pointblank
183
+ ```
184
+
185
+ Wenn Sie Polars oder Pandas nicht installiert haben, müssen Sie eines davon installieren, um Pointblank zu verwenden.
186
+
187
+ ```bash
188
+ pip install "pointblank[pl]" # Pointblank mit Polars installieren
189
+ pip install "pointblank[pd]" # Pointblank mit Pandas installieren
190
+ ```
191
+
192
+ Um Pointblank mit DuckDB, MySQL, PostgreSQL oder SQLite zu verwenden, installieren Sie Ibis mit dem entsprechenden Backend:
193
+
194
+ ```bash
195
+ pip install "pointblank[duckdb]" # Pointblank mit Ibis + DuckDB installieren
196
+ pip install "pointblank[mysql]" # Pointblank mit Ibis + MySQL installieren
197
+ pip install "pointblank[postgres]" # Pointblank mit Ibis + PostgreSQL installieren
198
+ pip install "pointblank[sqlite]" # Pointblank mit Ibis + SQLite installieren
199
+ ```
200
+
201
+ ## Technische Details
202
+
203
+ Pointblank verwendet [Narwhals](https://github.com/narwhals-dev/narwhals) für die Arbeit mit Polars- und Pandas-DataFrames und integriert sich mit [Ibis](https://github.com/ibis-project/ibis) für Datenbank- und Dateiformatunterstützung. Diese Architektur bietet eine konsistente API zur Validierung von Tabellendaten aus verschiedenen Quellen.
204
+
205
+ ## Beitrag zu Pointblank
206
+
207
+ Es gibt viele Möglichkeiten, zur kontinuierlichen Entwicklung von Pointblank beizutragen. Einige Beiträge können einfach sein (wie die Korrektur von Tippfehlern, die Verbesserung der Dokumentation, das Einreichen von Problemen für Feature-Anfragen oder Probleme usw.), während andere mehr Zeit und Sorgfalt erfordern können (wie das Beantworten von Fragen und das Einreichen von PRs mit Codeänderungen). Wissen Sie einfach, dass alles, was Sie zur Unterstützung beitragen können, sehr geschätzt wird!
208
+
209
+ Bitte lesen Sie die [Beitragsrichtlinien](https://github.com/posit-dev/pointblank/blob/main/CONTRIBUTING.md) für Informationen darüber, wie Sie beginnen können.
210
+
211
+ ## Roadmap
212
+
213
+ Wir arbeiten aktiv daran, Pointblank mit folgenden Funktionen zu verbessern:
214
+
215
+ 1. Zusätzliche Validierungsmethoden für umfassende Datenqualitätsprüfungen
216
+ 2. Erweiterte Protokollierungsfunktionen
217
+ 3. Benachrichtigungsaktionen (Slack, E-Mail) für Schwellenwertüberschreitungen
218
+ 4. LLM-gestützte Validierungsvorschläge und Datenwörterbucherstellung
219
+ 5. JSON/YAML-Konfiguration für Pipeline-Portabilität
220
+ 6. CLI-Tool für Validierung über die Kommandozeile
221
+ 7. Erweiterte Backend-Unterstützung und -Zertifizierung
222
+ 8. Hochwertige Dokumentation und Beispiele
223
+
224
+ Wenn Sie Ideen für Funktionen oder Verbesserungen haben, zögern Sie nicht, diese mit uns zu teilen! Wir sind immer auf der Suche nach Möglichkeiten, Pointblank zu verbessern.
225
+
226
+ ## Verhaltenskodex
227
+
228
+ Bitte beachten Sie, dass das Pointblank-Projekt mit einem [Verhaltenskodex für Mitwirkende](https://www.contributor-covenant.org/version/2/1/code_of_conduct/) veröffentlicht wird. <br>Durch die Teilnahme an diesem Projekt erklären Sie sich mit dessen Bedingungen einverstanden.
229
+
230
+ ## 📄 Lizenz
231
+
232
+ Pointblank ist unter der MIT-Lizenz lizenziert.
233
+
234
+ © Posit Software, PBC.
235
+
236
+ ## 🏛️ Verwaltung
237
+
238
+ Dieses Projekt wird hauptsächlich von
239
+ [Rich Iannone](https://bsky.app/profile/richmeister.bsky.social) gepflegt. Andere Autoren können gelegentlich
240
+ bei einigen dieser Aufgaben unterstützen.