pointblank 0.8.7__tar.gz → 0.9.0__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.
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/workflows/ci-tests.yaml +1 -1
- {pointblank-0.8.7 → pointblank-0.9.0}/Makefile +8 -3
- {pointblank-0.8.7 → pointblank-0.9.0}/PKG-INFO +6 -2
- {pointblank-0.8.7 → pointblank-0.9.0}/README.md +5 -1
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/02-advanced/index.qmd +0 -2
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/styles.css +11 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/actions.qmd +169 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/_constants.py +11 -10
- pointblank-0.9.0/pointblank/_typing.py +26 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/data/api-docs.txt +716 -49
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/datascan.py +4 -4
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/draft.py +1 -1
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/thresholds.py +10 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/validate.py +1061 -48
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank.egg-info/PKG-INFO +6 -2
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank.egg-info/SOURCES.txt +8 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pyproject.toml +4 -2
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +14 -14
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +14 -14
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +6 -6
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +6 -6
- {pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl → pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb}/validation_report.json +1 -0
- {pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd → pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet}/validation_report.json +1 -0
- {pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb → pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd}/validation_report.json +1 -0
- {pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet → pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl}/validation_report.json +1 -0
- pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +26 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +1 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +1 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +1 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +1 -0
- pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +26 -0
- pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +608 -0
- pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +608 -0
- pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +608 -0
- pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/polars/validation_report_segments_with_pre.html +185 -0
- pointblank-0.9.0/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/validation_report_segments_with_pre.html +185 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_memtable_variable_names/selector_helper_functions_no_match.html +2 -2
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pd_variable_names/selector_helper_functions_no_match.html +2 -2
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pl_variable_names/selector_helper_functions_no_match.html +2 -2
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test__utils.py +4 -11
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_validate.py +134 -28
- {pointblank-0.8.7 → pointblank-0.9.0}/translations/README.de.md +5 -1
- {pointblank-0.8.7 → pointblank-0.9.0}/translations/README.es.md +5 -1
- {pointblank-0.8.7 → pointblank-0.9.0}/translations/README.fr.md +5 -1
- {pointblank-0.8.7 → pointblank-0.9.0}/translations/README.it.md +5 -1
- pointblank-0.9.0/translations/README.ja.md +244 -0
- pointblank-0.9.0/translations/README.ko.md +244 -0
- pointblank-0.9.0/translations/README.nl.md +244 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/translations/README.pt-BR.md +5 -1
- {pointblank-0.8.7 → pointblank-0.9.0}/translations/README.zh-CN.md +5 -1
- pointblank-0.8.7/pointblank/_typing.py +0 -10
- pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -25
- pointblank-0.8.7/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -25
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/SECURITY.md +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/workflows/ci-docs.yaml +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.github/workflows/code-checks.yaml +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.gitignore +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.pre-commit-config.yaml +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/.vscode/settings.json +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/CITATION.cff +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/CONTRIBUTING.md +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/LICENSE +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/data_raw/game_revenue.csv +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/data_raw/nycflights.csv +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/data_raw/nycflights.ddb +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/data_raw/small_table.csv +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/data_raw/x-01-parquet.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/data_raw/x-02-duckdb.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/data_raw/x-03-sqlite.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/.gitignore +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/_extensions/machow/interlinks/.gitignore +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/_quarto.yml +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/assets/fav-logo.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/assets/pointblank-sales-data.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/assets/pointblank-step-report.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/assets/pointblank-tabular-report.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/assets/pointblank_logo.svg +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/assets/validation-table-diagram.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/blog/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/blog/intro-pointblank/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/blog/intro-pointblank/step_report.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/blog/pointblank_blog_logo.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/01-starter/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/03-data-extracts/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/04-sundered-data/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/05-step-report-column-check/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/check-row-column-counts/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/checks-for-missing/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/column-selector-functions/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/comparisons-across-columns/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/data/game_revenue.parquet +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/expect-text-pattern/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/failure-thresholds/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/img/advanced_validation.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/img/data_extracts.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/img/starter_validation.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/img/step_report_column_schema.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/img/step_report_column_values.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/img/sundered_data.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/mutate-table-in-step/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/numeric-comparisons/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/schema-check/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/set-membership/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/demos/using-parquet-data/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/across.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/col-summary-tbl.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/columns.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/extracts.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/index.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/missing-vals-tbl.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/preprocessing.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/preview.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/sundering.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/thresholds.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/docs/user-guide/types.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/images/pointblank-tabular-report.png +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/images/pointblank_logo.svg +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/__init__.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/_constants_docs.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/_constants_translations.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/_interrogation.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/_utils.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/_utils_check_args.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/_utils_html.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/actions.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/assistant.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/column.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/data/game_revenue-duckdb.zip +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/data/game_revenue.zip +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/data/nycflights-duckdb.zip +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/data/nycflights.zip +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/data/polars-api-docs.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/data/small_table-duckdb.zip +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/data/small_table.zip +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/schema.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank/tf.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank.egg-info/dependency_links.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank.egg-info/requires.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/pointblank.egg-info/top_level.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/setup.cfg +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/__init__.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/manual_tests/schema_step_reports.qmd +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_xyz.ddb +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_xyz.parquet +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_xyz.sqlite +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test__interrogation.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test__utils_check_args.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_actions.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_assistant.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_column.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_datascan.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_draft.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_schema.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_tf.py +0 -0
- {pointblank-0.8.7 → pointblank-0.9.0}/tests/test_thresholds.py +0 -0
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
pip install -e '.[dev]'
|
|
30
30
|
- name: Install test dependencies
|
|
31
31
|
run: |
|
|
32
|
-
pip install pytest pytest-cov pytest-snapshot pandas polars ibis-framework[duckdb,mysql,postgres,sqlite]>=9.5.0 chatlas requests shiny
|
|
32
|
+
pip install pytest pytest-rerunfailures pytest-randomly pytest-xdist pytest-cov pytest-snapshot pandas polars ibis-framework[duckdb,mysql,postgres,sqlite]>=9.5.0 chatlas requests shiny
|
|
33
33
|
- name: pytest unit tests
|
|
34
34
|
run: |
|
|
35
35
|
make test
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
.PHONY: check
|
|
2
2
|
|
|
3
|
+
.PHONY: test
|
|
3
4
|
test:
|
|
4
|
-
pytest
|
|
5
|
+
@pytest \
|
|
6
|
+
--cov=pointblank \
|
|
7
|
+
--cov-report=term-missing \
|
|
8
|
+
--randomly-seed 123 \
|
|
9
|
+
-n auto \
|
|
10
|
+
--reruns 3 \
|
|
11
|
+
--reruns-delay 1
|
|
5
12
|
|
|
6
13
|
test-update:
|
|
7
14
|
pytest --snapshot-update
|
|
8
15
|
|
|
9
|
-
test-coverage:
|
|
10
|
-
pytest --cov=pointblank --cov-report=term-missing
|
|
11
16
|
|
|
12
17
|
lint: ## Run ruff formatter and linter
|
|
13
18
|
@uv run ruff format
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pointblank
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Find out if your data is what you think it is.
|
|
5
5
|
Author-email: Richard Iannone <riannone@me.com>
|
|
6
6
|
License: MIT License
|
|
@@ -89,6 +89,7 @@ _Data validation made beautiful and powerful_
|
|
|
89
89
|
[](https://pypi.python.org/pypi/pointblank)
|
|
90
90
|
[](https://pypi.org/project/pointblank/#history)
|
|
91
91
|
[](https://pypistats.org/packages/pointblank)
|
|
92
|
+
[](https://anaconda.org/conda-forge/pointblank)
|
|
92
93
|
[](https://img.shields.io/github/license/posit-dev/pointblank)
|
|
93
94
|
|
|
94
95
|
[](https://github.com/posit-dev/pointblank/actions/workflows/ci-tests.yaml)
|
|
@@ -108,7 +109,10 @@ _Data validation made beautiful and powerful_
|
|
|
108
109
|
<a href="translations/README.it.md">Italiano</a> |
|
|
109
110
|
<a href="translations/README.es.md">Español</a> |
|
|
110
111
|
<a href="translations/README.pt-BR.md">Português</a> |
|
|
111
|
-
<a href="translations/README.
|
|
112
|
+
<a href="translations/README.nl.md">Nederlands</a> |
|
|
113
|
+
<a href="translations/README.zh-CN.md">简体中文</a> |
|
|
114
|
+
<a href="translations/README.ja.md">日本語</a> |
|
|
115
|
+
<a href="translations/README.ko.md">한국어</a>
|
|
112
116
|
</div>
|
|
113
117
|
|
|
114
118
|
## What is Pointblank?
|
|
@@ -7,6 +7,7 @@ _Data validation made beautiful and powerful_
|
|
|
7
7
|
[](https://pypi.python.org/pypi/pointblank)
|
|
8
8
|
[](https://pypi.org/project/pointblank/#history)
|
|
9
9
|
[](https://pypistats.org/packages/pointblank)
|
|
10
|
+
[](https://anaconda.org/conda-forge/pointblank)
|
|
10
11
|
[](https://img.shields.io/github/license/posit-dev/pointblank)
|
|
11
12
|
|
|
12
13
|
[](https://github.com/posit-dev/pointblank/actions/workflows/ci-tests.yaml)
|
|
@@ -26,7 +27,10 @@ _Data validation made beautiful and powerful_
|
|
|
26
27
|
<a href="translations/README.it.md">Italiano</a> |
|
|
27
28
|
<a href="translations/README.es.md">Español</a> |
|
|
28
29
|
<a href="translations/README.pt-BR.md">Português</a> |
|
|
29
|
-
<a href="translations/README.
|
|
30
|
+
<a href="translations/README.nl.md">Nederlands</a> |
|
|
31
|
+
<a href="translations/README.zh-CN.md">简体中文</a> |
|
|
32
|
+
<a href="translations/README.ja.md">日本語</a> |
|
|
33
|
+
<a href="translations/README.ko.md">한국어</a>
|
|
30
34
|
</div>
|
|
31
35
|
|
|
32
36
|
## What is Pointblank?
|
|
@@ -15,7 +15,6 @@ A validation with a comprehensive set of rules.
|
|
|
15
15
|
|
|
16
16
|
import pointblank as pb
|
|
17
17
|
import polars as pl
|
|
18
|
-
import narwhals as nw
|
|
19
18
|
|
|
20
19
|
validation = (
|
|
21
20
|
pb.Validate(
|
|
@@ -52,7 +51,6 @@ validation
|
|
|
52
51
|
```python
|
|
53
52
|
import pointblank as pb
|
|
54
53
|
import polars as pl
|
|
55
|
-
import narwhals as nw
|
|
56
54
|
|
|
57
55
|
validation = (
|
|
58
56
|
pb.Validate(
|
|
@@ -222,3 +222,172 @@ The metadata dictionary contains the following fields for a given validation ste
|
|
|
222
222
|
- `level_num`: The severity level as a numeric value (`30`, `40`, or `50`).
|
|
223
223
|
- `autobrief`: A localized and brief statement of the expectation for the step.
|
|
224
224
|
- `failure_text`: Localized text that explains how the validation step failed.
|
|
225
|
+
|
|
226
|
+
## Final Actions with `FinalActions`
|
|
227
|
+
|
|
228
|
+
When you need to execute actions after all validation steps are complete, Pointblank provides the
|
|
229
|
+
[`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html) class. Unlike
|
|
230
|
+
[`Actions`](https://posit-dev.github.io/pointblank/reference/Actions.html) which triggers on a
|
|
231
|
+
per-step basis during the validation process,
|
|
232
|
+
[`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html) executes after
|
|
233
|
+
the entire validation is complete, giving you a way to respond to the overall validation results.
|
|
234
|
+
|
|
235
|
+
Here's how to use
|
|
236
|
+
[`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html):
|
|
237
|
+
|
|
238
|
+
```{python}
|
|
239
|
+
import pointblank as pb
|
|
240
|
+
|
|
241
|
+
def send_alert():
|
|
242
|
+
summary = pb.get_validation_summary()
|
|
243
|
+
if summary["highest_severity"] == "critical":
|
|
244
|
+
print(f"ALERT: Critical validation failures found in `{summary['tbl_name']}`")
|
|
245
|
+
|
|
246
|
+
validation_with_final = (
|
|
247
|
+
pb.Validate(
|
|
248
|
+
data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
|
|
249
|
+
tbl_name="game_revenue",
|
|
250
|
+
thresholds=pb.Thresholds(warning=0.05, error=0.10, critical=0.15),
|
|
251
|
+
final_actions=pb.FinalActions(
|
|
252
|
+
"Validation complete.", # a string message
|
|
253
|
+
send_alert # a callable function
|
|
254
|
+
)
|
|
255
|
+
)
|
|
256
|
+
.col_vals_regex(columns="player_id", pattern=r"[A-Z]{12}\d{3}")
|
|
257
|
+
.col_vals_gt(columns="item_revenue", value=0.10)
|
|
258
|
+
.interrogate()
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
validation_with_final
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
In this example:
|
|
265
|
+
|
|
266
|
+
- We define the function `send_alert()` that checks the validation summary for critical failures
|
|
267
|
+
- We provide a simple string message `"Validation complete."` that will print to the console
|
|
268
|
+
- Both actions will execute in order after all validation steps have completed
|
|
269
|
+
|
|
270
|
+
Because the 'critical' threshold was exceeded in Step 2, we see the printed alert of `send_alert()`
|
|
271
|
+
after the simple string message.
|
|
272
|
+
|
|
273
|
+
### Creating Final Actions
|
|
274
|
+
|
|
275
|
+
[`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html) accepts any
|
|
276
|
+
number of actions as positional arguments. Each argument can be:
|
|
277
|
+
|
|
278
|
+
1. **String**: A message to be displayed in the console
|
|
279
|
+
2. **Callable**: A function to be called with no arguments
|
|
280
|
+
3. **List of Strings/Callables**: Multiple actions to execute in sequence
|
|
281
|
+
|
|
282
|
+
All actions will be executed in the order they are provided after all validation steps have
|
|
283
|
+
completed.
|
|
284
|
+
|
|
285
|
+
### Using `get_validation_summary()` in Final Actions
|
|
286
|
+
|
|
287
|
+
When creating a callable function to use with
|
|
288
|
+
[`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html), you can access
|
|
289
|
+
information about the overall validation results using the
|
|
290
|
+
[`get_validation_summary()`](https://posit-dev.github.io/pointblank/reference/get_validation_summary.html)
|
|
291
|
+
function. This gives you a dictionary with comprehensive information about the validation:
|
|
292
|
+
|
|
293
|
+
```python
|
|
294
|
+
def comprehensive_report():
|
|
295
|
+
summary = pb.get_validation_summary()
|
|
296
|
+
print(f"Validation Report for {summary['tbl_name']}:")
|
|
297
|
+
print(f"- Steps: {summary['n_steps']}")
|
|
298
|
+
print(f"- Passing steps: {summary['n_passing_steps']}")
|
|
299
|
+
print(f"- Failing steps: {summary['n_failing_steps']}")
|
|
300
|
+
|
|
301
|
+
# Take additional actions based on results
|
|
302
|
+
if summary["n_failing_steps"] > 0:
|
|
303
|
+
# Create and execute a Slack notification
|
|
304
|
+
notify = pb.send_slack_notification(
|
|
305
|
+
webhook_url="https://hooks.slack.com/services/your/webhook/url",
|
|
306
|
+
summary_msg="""
|
|
307
|
+
🚨 *Validation Failure Alert*
|
|
308
|
+
• Table: {tbl_name}
|
|
309
|
+
• Failed Steps: {n_failing_steps} of {n_steps}
|
|
310
|
+
• Highest Severity: {highest_severity}
|
|
311
|
+
• Time: {time}
|
|
312
|
+
""",
|
|
313
|
+
)
|
|
314
|
+
notify() # Execute the notification function
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
validation = (
|
|
318
|
+
pb.Validate(
|
|
319
|
+
data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
|
|
320
|
+
tbl_name="game_revenue",
|
|
321
|
+
final_actions=pb.FinalActions(comprehensive_report),
|
|
322
|
+
)
|
|
323
|
+
.col_vals_regex(columns="player_id", pattern=r"[A-Z]{12}\d{3}")
|
|
324
|
+
.col_vals_gt(columns="item_revenue", value=0.05)
|
|
325
|
+
.interrogate()
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
validation
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
```{python}
|
|
332
|
+
# | echo: false
|
|
333
|
+
|
|
334
|
+
validation = (
|
|
335
|
+
pb.Validate(
|
|
336
|
+
data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
|
|
337
|
+
tbl_name="game_revenue",
|
|
338
|
+
)
|
|
339
|
+
.col_vals_regex(columns="player_id", pattern=r"[A-Z]{12}\d{3}")
|
|
340
|
+
.col_vals_gt(columns="item_revenue", value=0.05)
|
|
341
|
+
.interrogate()
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
validation
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Here we used the [`send_slack_notification()`](https://posit-dev.github.io/pointblank/reference/send_slack_notification.html)
|
|
348
|
+
function, which is available in Pointblank as a pre-built action. It can be used by itself in
|
|
349
|
+
`final_actions=` but here it's integrated into the user's `comprehensive_report()` function.
|
|
350
|
+
|
|
351
|
+
### Combining the Two Types of Actions
|
|
352
|
+
|
|
353
|
+
You can use both [`Actions`](https://posit-dev.github.io/pointblank/reference/Actions.html) and
|
|
354
|
+
[`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html) together for
|
|
355
|
+
comprehensive validation control:
|
|
356
|
+
|
|
357
|
+
```{python}
|
|
358
|
+
def log_step_failure():
|
|
359
|
+
m = pb.get_action_metadata()
|
|
360
|
+
print(f"Step {m['step']} failed with {m['level']}")
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def generate_summary():
|
|
364
|
+
summary = pb.get_validation_summary()
|
|
365
|
+
# Sum up total failed test units across all steps
|
|
366
|
+
total_failed = sum(summary["dict_n_failed"].values())
|
|
367
|
+
# Sum up total test units across all steps
|
|
368
|
+
total_units = sum(summary["dict_n"].values())
|
|
369
|
+
print(f"Validation complete: {total_failed} failures out of {total_units} tests")
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
validation_combined = (
|
|
373
|
+
pb.Validate(
|
|
374
|
+
data=pb.load_dataset(dataset="game_revenue", tbl_type="duckdb"),
|
|
375
|
+
thresholds=pb.Thresholds(warning=0.05, error=0.10),
|
|
376
|
+
actions=pb.Actions(default=log_step_failure),
|
|
377
|
+
final_actions=pb.FinalActions(generate_summary),
|
|
378
|
+
)
|
|
379
|
+
.col_vals_regex(columns="player_id", pattern=r"[A-Z]{12}\d{3}")
|
|
380
|
+
.col_vals_gt(columns="item_revenue", value=0.05)
|
|
381
|
+
.interrogate()
|
|
382
|
+
)
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
This approach allows you to:
|
|
386
|
+
|
|
387
|
+
1. Log individual step failures during the validation process using
|
|
388
|
+
[`Actions`](https://posit-dev.github.io/pointblank/reference/Actions.html)
|
|
389
|
+
2. Generate a comprehensive report after all validation steps are complete using
|
|
390
|
+
[`FinalActions`](https://posit-dev.github.io/pointblank/reference/FinalActions.html)
|
|
391
|
+
|
|
392
|
+
Using both action types gives you fine-grained control over when and how notifications and other
|
|
393
|
+
actions are triggered in your validation workflow.
|
|
@@ -126,6 +126,7 @@ VALIDATION_REPORT_FIELDS = [
|
|
|
126
126
|
"inclusive",
|
|
127
127
|
"na_pass",
|
|
128
128
|
"pre",
|
|
129
|
+
"segments",
|
|
129
130
|
"thresholds",
|
|
130
131
|
"label",
|
|
131
132
|
"brief",
|
|
@@ -231,9 +232,9 @@ SVG_ICONS_FOR_ASSERTION_TYPES = {
|
|
|
231
232
|
</svg>""",
|
|
232
233
|
"col_vals_eq": """<?xml version="1.0" encoding="UTF-8"?>
|
|
233
234
|
<svg width="67px" height="67px" viewBox="0 0 67 67" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
234
|
-
<title>
|
|
235
|
+
<title>col_vals_eq</title>
|
|
235
236
|
<g id="All-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
236
|
-
<g id="
|
|
237
|
+
<g id="col_vals_eq" transform="translate(0.000000, 0.275862)">
|
|
237
238
|
<path d="M56.712234,1 C59.1975153,1 61.4475153,2.00735931 63.076195,3.63603897 C64.7048747,5.26471863 65.712234,7.51471863 65.712234,10 L65.712234,10 L65.712234,65 L10.712234,65 C8.22695259,65 5.97695259,63.9926407 4.34827294,62.363961 C2.71959328,60.7352814 1.71223397,58.4852814 1.71223397,56 L1.71223397,56 L1.71223397,10 C1.71223397,7.51471863 2.71959328,5.26471863 4.34827294,3.63603897 C5.97695259,2.00735931 8.22695259,1 10.712234,1 L10.712234,1 Z" id="rectangle" stroke="#000000" stroke-width="2" fill="#FFFFFF"></path>
|
|
238
239
|
<path d="M52.712234,11 L14.712234,11 C13.05989,11 11.712234,12.347656 11.712234,14 L11.712234,52 C11.712234,53.652344 13.05989,55 14.712234,55 L52.712234,55 C54.364578,55 55.712234,53.652344 55.712234,52 L55.712234,14 C55.712234,12.347656 54.364578,11 52.712234,11 Z M46.712234,38 L20.712234,38 L20.712234,36 L46.712234,36 L46.712234,38 Z M46.712234,30 L20.712234,30 L20.712234,28 L46.712234,28 L46.712234,30 Z" id="equals" fill="#000000" fill-rule="nonzero"></path>
|
|
239
240
|
</g>
|
|
@@ -241,9 +242,9 @@ SVG_ICONS_FOR_ASSERTION_TYPES = {
|
|
|
241
242
|
</svg>""",
|
|
242
243
|
"col_vals_ne": """<?xml version="1.0" encoding="UTF-8"?>
|
|
243
244
|
<svg width="67px" height="67px" viewBox="0 0 67 67" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
244
|
-
<title>
|
|
245
|
+
<title>col_vals_ne</title>
|
|
245
246
|
<g id="All-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
246
|
-
<g id="
|
|
247
|
+
<g id="col_vals_ne" transform="translate(0.000000, 0.758621)">
|
|
247
248
|
<path d="M56.712234,1 C59.1975153,1 61.4475153,2.00735931 63.076195,3.63603897 C64.7048747,5.26471863 65.712234,7.51471863 65.712234,10 L65.712234,10 L65.712234,65 L10.712234,65 C8.22695259,65 5.97695259,63.9926407 4.34827294,62.363961 C2.71959328,60.7352814 1.71223397,58.4852814 1.71223397,56 L1.71223397,56 L1.71223397,10 C1.71223397,7.51471863 2.71959328,5.26471863 4.34827294,3.63603897 C5.97695259,2.00735931 8.22695259,1 10.712234,1 L10.712234,1 Z" id="rectangle" stroke="#000000" stroke-width="2" fill="#FFFFFF"></path>
|
|
248
249
|
<path d="M53.712234,12 L13.712234,12 C13.161453,12 12.712234,12.449219 12.712234,13 L12.712234,53 C12.712234,53.550781 13.161453,54 13.712234,54 L53.712234,54 C54.263015,54 54.712234,53.550781 54.712234,53 L54.712234,13 C54.712234,12.449219 54.263015,12 53.712234,12 Z M46.712234,30 L32.989578,30 L36.805984,36 L46.712234,36 L46.712234,38 L38.079422,38 L43.169265,46 L40.798172,46 L35.708328,38 L20.712234,38 L20.712234,36 L34.43489,36 L30.618484,30 L20.712234,30 L20.712234,28 L29.345047,28 L24.251297,20 L26.62239,20 L31.71614,28 L46.712234,28 L46.712234,30 Z" id="not_equal" fill="#000000" fill-rule="nonzero"></path>
|
|
249
250
|
</g>
|
|
@@ -251,9 +252,9 @@ SVG_ICONS_FOR_ASSERTION_TYPES = {
|
|
|
251
252
|
</svg>""",
|
|
252
253
|
"col_vals_ge": """<?xml version="1.0" encoding="UTF-8"?>
|
|
253
254
|
<svg width="67px" height="67px" viewBox="0 0 67 67" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
254
|
-
<title>
|
|
255
|
+
<title>col_vals_ge</title>
|
|
255
256
|
<g id="All-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
256
|
-
<g id="
|
|
257
|
+
<g id="col_vals_ge" transform="translate(0.000000, 0.241379)">
|
|
257
258
|
<path d="M56.712234,1 C59.1975153,1 61.4475153,2.00735931 63.076195,3.63603897 C64.7048747,5.26471863 65.712234,7.51471863 65.712234,10 L65.712234,10 L65.712234,65 L10.712234,65 C8.22695259,65 5.97695259,63.9926407 4.34827294,62.363961 C2.71959328,60.7352814 1.71223397,58.4852814 1.71223397,56 L1.71223397,56 L1.71223397,10 C1.71223397,7.51471863 2.71959328,5.26471863 4.34827294,3.63603897 C5.97695259,2.00735931 8.22695259,1 10.712234,1 L10.712234,1 Z" id="rectangle" stroke="#000000" stroke-width="2" fill="#FFFFFF"></path>
|
|
258
259
|
<path d="M49.712234,12 L17.712234,12 C14.952234,12 12.712234,14.24 12.712234,17 L12.712234,49 C12.712234,51.76 14.952234,54 17.712234,54 L49.712234,54 C52.472234,54 54.712234,51.76 54.712234,49 L54.712234,17 C54.712234,14.24 52.472234,12 49.712234,12 Z M44.712234,47 L22.712234,47 L22.712234,45 L44.712234,45 L44.712234,47 Z M24.182234,40.88 L23.242234,39.12 L40.562234,30 L23.242234,20.88 L24.182234,19.12 L44.862234,30 L24.182234,40.88 Z" id="greater_than_equal" fill="#000000" fill-rule="nonzero"></path>
|
|
259
260
|
</g>
|
|
@@ -261,9 +262,9 @@ SVG_ICONS_FOR_ASSERTION_TYPES = {
|
|
|
261
262
|
</svg>""",
|
|
262
263
|
"col_vals_le": """<?xml version="1.0" encoding="UTF-8"?>
|
|
263
264
|
<svg width="67px" height="67px" viewBox="0 0 67 67" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
264
|
-
<title>
|
|
265
|
+
<title>col_vals_le</title>
|
|
265
266
|
<g id="All-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
266
|
-
<g id="
|
|
267
|
+
<g id="col_vals_le" transform="translate(0.000000, 0.793103)">
|
|
267
268
|
<path d="M56.712234,1 C59.1975153,1 61.4475153,2.00735931 63.076195,3.63603897 C64.7048747,5.26471863 65.712234,7.51471863 65.712234,10 L65.712234,10 L65.712234,65 L10.712234,65 C8.22695259,65 5.97695259,63.9926407 4.34827294,62.363961 C2.71959328,60.7352814 1.71223397,58.4852814 1.71223397,56 L1.71223397,56 L1.71223397,10 C1.71223397,7.51471863 2.71959328,5.26471863 4.34827294,3.63603897 C5.97695259,2.00735931 8.22695259,1 10.712234,1 L10.712234,1 Z" id="rectangle" stroke="#000000" stroke-width="2" fill="#FFFFFF"></path>
|
|
268
269
|
<path d="M53.712234,12 L13.712234,12 C13.157547,12 12.712234,12.449219 12.712234,13 L12.712234,53 C12.712234,53.550781 13.157547,54 13.712234,54 L53.712234,54 C54.266922,54 54.712234,53.550781 54.712234,53 L54.712234,13 C54.712234,12.449219 54.266922,12 53.712234,12 Z M42.227859,19.125 L43.196609,20.875 L26.770828,30 L43.196609,39.125 L42.227859,40.875 L22.65364,30 L42.227859,19.125 Z M44.712234,47 L22.712234,47 L22.712234,45 L44.712234,45 L44.712234,47 Z" id="less_than_equal" fill="#000000" fill-rule="nonzero"></path>
|
|
269
270
|
</g>
|
|
@@ -281,9 +282,9 @@ SVG_ICONS_FOR_ASSERTION_TYPES = {
|
|
|
281
282
|
</svg>""",
|
|
282
283
|
"col_vals_outside": """<?xml version="1.0" encoding="UTF-8"?>
|
|
283
284
|
<svg width="67px" height="67px" viewBox="0 0 67 67" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
284
|
-
<title>
|
|
285
|
+
<title>col_vals_outside</title>
|
|
285
286
|
<g id="All-Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
286
|
-
<g id="
|
|
287
|
+
<g id="col_vals_outside" transform="translate(0.000000, 0.689655)">
|
|
287
288
|
<path d="M56.712234,1 C59.1975153,1 61.4475153,2.00735931 63.076195,3.63603897 C64.7048747,5.26471863 65.712234,7.51471863 65.712234,10 L65.712234,10 L65.712234,65 L10.712234,65 C8.22695259,65 5.97695259,63.9926407 4.34827294,62.363961 C2.71959328,60.7352814 1.71223397,58.4852814 1.71223397,56 L1.71223397,56 L1.71223397,10 C1.71223397,7.51471863 2.71959328,5.26471863 4.34827294,3.63603897 C5.97695259,2.00735931 8.22695259,1 10.712234,1 L10.712234,1 Z" id="rectangle" stroke="#000000" stroke-width="2" fill="#FFFFFF"></path>
|
|
288
289
|
<g id="outside_range" transform="translate(11.000000, 21.000000)" fill="#000000">
|
|
289
290
|
<path d="M12.993484,0.96875 C11.962234,1.082031 11.188797,1.964844 11.212234,3 L11.212234,21 C11.200515,21.722656 11.579422,22.390625 12.204422,22.753906 C12.825515,23.121094 13.598953,23.121094 14.220047,22.753906 C14.845047,22.390625 15.223953,21.722656 15.212234,21 L15.212234,3 C15.220047,2.457031 15.009109,1.9375 14.626297,1.554688 C14.243484,1.171875 13.723953,0.960938 13.180984,0.96875 C13.118484,0.964844 13.055984,0.964844 12.993484,0.96875 Z M32.993484,0.96875 C31.962234,1.082031 31.188797,1.964844 31.212234,3 L31.212234,21 C31.200515,21.722656 31.579422,22.390625 32.204422,22.753906 C32.825515,23.121094 33.598953,23.121094 34.220047,22.753906 C34.845047,22.390625 35.223953,21.722656 35.212234,21 L35.212234,3 C35.220047,2.457031 35.009109,1.9375 34.626297,1.554688 C34.243484,1.171875 33.723953,0.960938 33.180984,0.96875 C33.118484,0.964844 33.055984,0.964844 32.993484,0.96875 Z M17.212234,1 C16.661453,1 16.212234,1.449219 16.212234,2 C16.212234,2.550781 16.661453,3 17.212234,3 C17.763015,3 18.212234,2.550781 18.212234,2 C18.212234,1.449219 17.763015,1 17.212234,1 Z M21.212234,1 C20.661453,1 20.212234,1.449219 20.212234,2 C20.212234,2.550781 20.661453,3 21.212234,3 C21.763015,3 22.212234,2.550781 22.212234,2 C22.212234,1.449219 21.763015,1 21.212234,1 Z M25.212234,1 C24.661453,1 24.212234,1.449219 24.212234,2 C24.212234,2.550781 24.661453,3 25.212234,3 C25.763015,3 26.212234,2.550781 26.212234,2 C26.212234,1.449219 25.763015,1 25.212234,1 Z M29.212234,1 C28.661453,1 28.212234,1.449219 28.212234,2 C28.212234,2.550781 28.661453,3 29.212234,3 C29.763015,3 30.212234,2.550781 30.212234,2 C30.212234,1.449219 29.763015,1 29.212234,1 Z M17.212234,21 C16.661453,21 16.212234,21.449219 16.212234,22 C16.212234,22.550781 16.661453,23 17.212234,23 C17.763015,23 18.212234,22.550781 18.212234,22 C18.212234,21.449219 17.763015,21 17.212234,21 Z M21.212234,21 C20.661453,21 20.212234,21.449219 20.212234,22 C20.212234,22.550781 20.661453,23 21.212234,23 C21.763015,23 22.212234,22.550781 22.212234,22 C22.212234,21.449219 21.763015,21 21.212234,21 Z M25.212234,21 C24.661453,21 24.212234,21.449219 24.212234,22 C24.212234,22.550781 24.661453,23 25.212234,23 C25.763015,23 26.212234,22.550781 26.212234,22 C26.212234,21.449219 25.763015,21 25.212234,21 Z M29.212234,21 C28.661453,21 28.212234,21.449219 28.212234,22 C28.212234,22.550781 28.661453,23 29.212234,23 C29.763015,23 30.212234,22.550781 30.212234,22 C30.212234,21.449219 29.763015,21 29.212234,21 Z" id="small_range" fill-rule="nonzero"></path>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TypeAlias
|
|
4
|
+
|
|
5
|
+
## Absolute bounds, ie. plus or minus
|
|
6
|
+
AbsoluteBounds: TypeAlias = tuple[int, int]
|
|
7
|
+
|
|
8
|
+
## Relative bounds, ie. plus or minus some percent
|
|
9
|
+
RelativeBounds: TypeAlias = tuple[float, float]
|
|
10
|
+
|
|
11
|
+
## Tolerance afforded to some check
|
|
12
|
+
Tolerance: TypeAlias = int | float | AbsoluteBounds | RelativeBounds
|
|
13
|
+
|
|
14
|
+
## Types for data segmentation
|
|
15
|
+
|
|
16
|
+
## Value(s) that can be used in a segment tuple
|
|
17
|
+
SegmentValue: TypeAlias = str | list[str]
|
|
18
|
+
|
|
19
|
+
## (column, value(s)) format for segments
|
|
20
|
+
SegmentTuple: TypeAlias = tuple[str, SegmentValue]
|
|
21
|
+
|
|
22
|
+
## Individual segment item (string or tuple)
|
|
23
|
+
SegmentItem: TypeAlias = str | SegmentTuple
|
|
24
|
+
|
|
25
|
+
## Full segment specification options
|
|
26
|
+
SegmentSpec: TypeAlias = str | SegmentTuple | list[SegmentItem]
|