pointblank 0.11.5__tar.gz → 0.11.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pointblank-0.11.5 → pointblank-0.11.6}/PKG-INFO +2 -2
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/_quarto.yml +3 -0
- pointblank-0.11.6/docs/user-guide/yaml-reference.qmd +657 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/yaml-validation-workflows.qmd +70 -28
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/validate.py +3 -1
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/yaml.py +162 -19
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/PKG-INFO +2 -2
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/SOURCES.txt +1 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/requires.txt +1 -1
- {pointblank-0.11.5 → pointblank-0.11.6}/pyproject.toml +1 -1
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_yaml.py +630 -1
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/CODE_OF_CONDUCT.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/SECURITY.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/workflows/ci-docs.yaml +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/workflows/ci-tests.yaml +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.github/workflows/code-checks.yaml +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.gitignore +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.pre-commit-config.yaml +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/.vscode/settings.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/CITATION.cff +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/CONTRIBUTING.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/LICENSE +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/Makefile +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/README.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/game_revenue.csv +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/global_sales.csv +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/global_sales_dataset.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/nycflights.csv +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/small_table.csv +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/worldcities.csv +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/x-01-parquet.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/x-02-duckdb.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/data_raw/x-03-sqlite.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/.gitignore +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/_extensions/machow/interlinks/.gitignore +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/fav-logo.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-info-worldcities-csv.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-info-worldcities-github-csv.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-make-template.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-missing-worldcities-csv.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-game_revenue-all-columns.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-game_revenue-column-names.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-game_revenue-column-range.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-worldcities-csv-no-row-numbers.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-preview-worldcities-csv.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-run-worldcities_validation-extracts.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-run-worldcities_validation-fail-on-warning.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-run-worldcities_validation-output.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-run-worldcities_validation.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-scan-worldcities-csv.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-exit-code.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-multi-check.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-rows-complete-worldcities-csv.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-rows-distinct-worldcities-csv.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-show-extract.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-worldcities-gt-0-population.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-worldcities-not-null-city_name.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pb-validate-write-extract.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.de.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.es.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.fr.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.it.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.ja.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.ko.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.nl.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.pt-BR.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-sales-data.zh-CN.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-step-report.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank-tabular-report.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/pointblank_logo.svg +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/posit-logo-black.svg +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/validation-table-diagram.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/validation-test-units.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/.gitignore +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-cicd-workflows.gif +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-cicd-workflows.tape +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-complete-workflow.gif +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-complete-workflow.tape +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-data-exploration.gif +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-data-exploration.tape +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-essential-validations.gif +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-essential-validations.tape +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-getting-started.gif +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-getting-started.tape +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-using-polars.gif +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/cli-using-polars.tape +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/assets/vhs/validation.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/all-about-actions/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/step_report.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/lets-workshop-together/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/advanced-in-sidebar.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/breadth-and-depth.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/explanation-of-visual.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/links-in-guide.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/segments.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/step-report.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/overhauled-user-guide/validation-three-things.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/pointblank_blog_logo.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/blog/validation-libs-2025/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/01-starter/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/02-advanced/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/03-data-extracts/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/04-sundered-data/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/05-step-report-column-check/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/07-validation-with-actions/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/08-validation-with-final-actions/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/check-for-freshness/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/check-row-column-counts/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/checks-for-missing/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/cli-interactive/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/column-selector-functions/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/comparisons-across-columns/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/custom-validation-specially/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/data/game_revenue.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/expect-text-pattern/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/failure-thresholds/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/advanced_validation.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/data_extracts.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/starter_validation.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/step_report_column_schema.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/step_report_column_values.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/sundered_data.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/validation_with_actions.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/img/validation_with_final_actions.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/mutate-table-in-step/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/numeric-comparisons/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/schema-check/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/set-membership/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/demos/using-parquet-data/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/scripts/post-render.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/styles.css +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/actions.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/assertions.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/briefs.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/cli-data-inspection.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/cli-data-validation.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/col-summary-tbl.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/column-selection-patterns.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/draft-validation.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/expressions.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/extracts.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/index.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/installation.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/langs.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/missing-vals-tbl.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/preprocessing.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/preview.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/schema-validation.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/segmentation.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/step-reports.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/sundering.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/thresholds.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/validation-methods.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/docs/user-guide/validation-overview.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/images/pointblank-tabular-report.png +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/images/pointblank_logo.svg +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/__init__.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_constants.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_constants_docs.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_constants_translations.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_datascan_utils.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_interrogation.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_typing.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_utils.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_utils_check_args.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/_utils_html.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/actions.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/assistant.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/cli.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/column.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/compare.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/api-docs.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/game_revenue-duckdb.zip +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/game_revenue.zip +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/global_sales-duckdb.zip +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/global_sales.zip +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/nycflights-duckdb.zip +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/nycflights.zip +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/polars-api-docs.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/small_table-duckdb.zip +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/data/small_table.zip +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/datascan.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/draft.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/scan_profile.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/scan_profile_stats.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/schema.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/tf.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank/thresholds.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/dependency_links.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/entry_points.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/pointblank.egg-info/top_level.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/setup.cfg +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/__init__.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/manual_tests/schema_step_reports.qmd +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/polars/validation_report_segments_with_pre.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/validation_report_segments_with_pre.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_memtable_variable_names/selector_helper_functions_no_match.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pd_variable_names/selector_helper_functions_no_match.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/snapshots/test_validate/test_validation_with_selector_helper_functions_no_match_snap/tbl_pl_variable_names/selector_helper_functions_no_match.html +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/parquet_data/data_a.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/parquet_data/data_b.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/parquet_data/subdir/nested_data.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=cancelled/0.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=delivered/0.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=pending/0.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=returned/0.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_sales/status=shipped/0.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_small_table/f=high/0.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_small_table/f=low/0.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/partitioned_small_table/f=mid/0.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/taxi_part_01.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/taxi_part_02.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/taxi_part_03.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/taxi_sample.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz.ddb +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz.sqlite +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test__interrogation.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test__utils.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test__utils_check_args.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_actions.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_assistant.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_cli.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_column.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_compare.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_datascan.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_draft.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_meta.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_schema.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_tf.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_thresholds.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/tests/test_validate.py +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.ar.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.de.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.es.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.fr.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.hi.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.it.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.ja.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.ko.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.nl.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.pt-BR.md +0 -0
- {pointblank-0.11.5 → pointblank-0.11.6}/translations/README.zh-CN.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pointblank
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.6
|
|
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
|
|
@@ -43,7 +43,7 @@ License-File: LICENSE
|
|
|
43
43
|
Requires-Dist: commonmark>=0.9.1
|
|
44
44
|
Requires-Dist: importlib-metadata
|
|
45
45
|
Requires-Dist: great_tables>=0.17.0
|
|
46
|
-
Requires-Dist: narwhals>=1.
|
|
46
|
+
Requires-Dist: narwhals>=1.45.0
|
|
47
47
|
Requires-Dist: typing_extensions>=3.10.0.0
|
|
48
48
|
Requires-Dist: requests>=2.31.0
|
|
49
49
|
Requires-Dist: click>=8.0.0
|
|
@@ -79,7 +79,10 @@ website:
|
|
|
79
79
|
- user-guide/schema-validation.qmd
|
|
80
80
|
- user-guide/assertions.qmd
|
|
81
81
|
- user-guide/draft-validation.qmd
|
|
82
|
+
- section: "YAML"
|
|
83
|
+
contents:
|
|
82
84
|
- user-guide/yaml-validation-workflows.qmd
|
|
85
|
+
- user-guide/yaml-reference.qmd
|
|
83
86
|
- section: "Post Interrogation"
|
|
84
87
|
contents:
|
|
85
88
|
- user-guide/step-reports.qmd
|
|
@@ -0,0 +1,657 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: YAML Reference
|
|
3
|
+
jupyter: python3
|
|
4
|
+
toc-expand: 2
|
|
5
|
+
html-table-processing: none
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
This reference provides a comprehensive guide to all YAML keys and parameters supported by
|
|
9
|
+
Pointblank's YAML validation workflows. Use this document as a quick lookup when building validation
|
|
10
|
+
configurations.
|
|
11
|
+
|
|
12
|
+
## Global Configuration Keys
|
|
13
|
+
|
|
14
|
+
### Top-level Structure
|
|
15
|
+
|
|
16
|
+
```yaml
|
|
17
|
+
tbl: data_source # REQUIRED: Data source specification
|
|
18
|
+
df_library: "polars" # OPTIONAL: DataFrame library ("polars", "pandas", "duckdb")
|
|
19
|
+
tbl_name: "Custom Table Name" # OPTIONAL: Human-readable table name
|
|
20
|
+
label: "Validation Description" # OPTIONAL: Description for the validation workflow
|
|
21
|
+
lang: "en" # OPTIONAL: Language code (default: "en")
|
|
22
|
+
locale: "en" # OPTIONAL: Locale setting (default: "en")
|
|
23
|
+
brief: "Global brief: {auto}" # OPTIONAL: Global brief template
|
|
24
|
+
thresholds: # OPTIONAL: Global failure thresholds
|
|
25
|
+
warning: 0.1
|
|
26
|
+
error: 0.2
|
|
27
|
+
critical: 0.3
|
|
28
|
+
actions: # OPTIONAL: Global failure actions
|
|
29
|
+
warning: "Warning message template"
|
|
30
|
+
error: "Error message template"
|
|
31
|
+
critical: "Critical message template"
|
|
32
|
+
highest_only: false
|
|
33
|
+
steps: # REQUIRED: List of validation steps
|
|
34
|
+
- validation_method_name
|
|
35
|
+
- validation_method_name:
|
|
36
|
+
parameter: value
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Data Source (`tbl`)
|
|
40
|
+
|
|
41
|
+
The `tbl` key specifies the data source and supports multiple formats:
|
|
42
|
+
|
|
43
|
+
```yaml
|
|
44
|
+
# File paths
|
|
45
|
+
tbl: "data/file.csv"
|
|
46
|
+
tbl: "data/file.parquet"
|
|
47
|
+
|
|
48
|
+
# Built-in datasets
|
|
49
|
+
tbl: small_table
|
|
50
|
+
tbl: game_revenue
|
|
51
|
+
tbl: nycflights
|
|
52
|
+
|
|
53
|
+
# Python expressions for complex data loading
|
|
54
|
+
tbl:
|
|
55
|
+
python: |
|
|
56
|
+
pl.scan_csv("data.csv").filter(pl.col("date") >= "2024-01-01")
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### DataFrame Library (`df_library`)
|
|
60
|
+
|
|
61
|
+
The `df_library` key controls which DataFrame library is used to load data sources. This parameter
|
|
62
|
+
affects both built-in datasets and file loading:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
# Use Polars DataFrames (default)
|
|
66
|
+
df_library: polars
|
|
67
|
+
|
|
68
|
+
# Use Pandas DataFrames
|
|
69
|
+
df_library: pandas
|
|
70
|
+
|
|
71
|
+
# Use DuckDB tables (via Ibis)
|
|
72
|
+
df_library: duckdb
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Examples with different libraries:
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
# Load built-in dataset as Pandas DataFrame
|
|
79
|
+
tbl: small_table
|
|
80
|
+
df_library: pandas
|
|
81
|
+
steps:
|
|
82
|
+
- specially:
|
|
83
|
+
expr: "lambda df: df.assign(validation_result=df['a'] > 0)"
|
|
84
|
+
|
|
85
|
+
# Load CSV file as Polars DataFrame
|
|
86
|
+
tbl: "data/sales.csv"
|
|
87
|
+
df_library: polars
|
|
88
|
+
steps:
|
|
89
|
+
- col_vals_gt:
|
|
90
|
+
columns: amount
|
|
91
|
+
value: 0
|
|
92
|
+
|
|
93
|
+
# Load dataset as DuckDB table
|
|
94
|
+
tbl: nycflights
|
|
95
|
+
df_library: duckdb
|
|
96
|
+
steps:
|
|
97
|
+
- row_count_match:
|
|
98
|
+
count: 336776
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The `df_library` parameter is particularly useful when:
|
|
102
|
+
|
|
103
|
+
- using validation expressions that require specific DataFrame APIs (e.g., Pandas `.assign()`,
|
|
104
|
+
Polars `.select()`)
|
|
105
|
+
- integrating with existing pipelines that use a specific DataFrame library
|
|
106
|
+
- optimizing performance for different data sizes and operations
|
|
107
|
+
- ensuring compatibility with downstream processing steps
|
|
108
|
+
|
|
109
|
+
### Global Thresholds
|
|
110
|
+
|
|
111
|
+
Thresholds define when validation failures trigger different severity levels:
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
thresholds:
|
|
115
|
+
warning: 0.05 # 5% failure rate triggers warning
|
|
116
|
+
error: 0.10 # 10% failure rate triggers error
|
|
117
|
+
critical: 0.15 # 15% failure rate triggers critical
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
- values: numbers between 0 and 1 (percentages) or integers (row counts)
|
|
121
|
+
- levels: `warning`, `error`, `critical`
|
|
122
|
+
|
|
123
|
+
### Global Actions
|
|
124
|
+
|
|
125
|
+
Actions define responses when thresholds are exceeded. When supplying a string to a severity level
|
|
126
|
+
('warning', 'error', 'critical'), you can use template variables that will be automatically
|
|
127
|
+
substituted with contextual information:
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
actions:
|
|
131
|
+
warning: "Warning: {n_failed} failures in step {step}"
|
|
132
|
+
error:
|
|
133
|
+
python: |
|
|
134
|
+
lambda: print("Error detected!")
|
|
135
|
+
critical: "Critical failure at {time}"
|
|
136
|
+
highest_only: false # Execute all applicable actions vs. only highest severity
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Template variables available for action strings:
|
|
140
|
+
|
|
141
|
+
- `{step}`: current validation step number
|
|
142
|
+
- `{col}`: column name(s) being validated
|
|
143
|
+
- `{val}`: validation value or threshold
|
|
144
|
+
- `{n_failed}`: number of failing records
|
|
145
|
+
- `{n}`: total number of records
|
|
146
|
+
- `{type}`: validation method type
|
|
147
|
+
- `{level}`: severity level ('warning'/'error'/'critical')
|
|
148
|
+
- `{time}`: timestamp of validation
|
|
149
|
+
|
|
150
|
+
## Validation Methods Reference
|
|
151
|
+
|
|
152
|
+
### Column Value Validations
|
|
153
|
+
|
|
154
|
+
#### Comparison Methods
|
|
155
|
+
|
|
156
|
+
`col_vals_gt`: are column data greater than a fixed value or data in another column?
|
|
157
|
+
|
|
158
|
+
```yaml
|
|
159
|
+
- col_vals_gt:
|
|
160
|
+
columns: [column_name] # REQUIRED: Column(s) to validate
|
|
161
|
+
value: 100 # REQUIRED: Comparison value
|
|
162
|
+
na_pass: true # OPTIONAL: Pass NULL values (default: false)
|
|
163
|
+
pre: | # OPTIONAL: Data preprocessing
|
|
164
|
+
lambda df: df.filter(condition)
|
|
165
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
166
|
+
warning: 0.1
|
|
167
|
+
actions: # OPTIONAL: Step-level actions
|
|
168
|
+
warning: "Custom message"
|
|
169
|
+
brief: "Values must be > 100" # OPTIONAL: Step description
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
`col_vals_lt`: are column data less than a fixed value or data in another column?
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
- col_vals_lt:
|
|
176
|
+
columns: [column_name]
|
|
177
|
+
value: 100
|
|
178
|
+
na_pass: true
|
|
179
|
+
# ... (same parameters as col_vals_gt)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
`col_vals_ge`: are column data greater than or equal to a fixed value or data in another column?
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
- col_vals_ge:
|
|
186
|
+
columns: [column_name]
|
|
187
|
+
value: 100
|
|
188
|
+
na_pass: true
|
|
189
|
+
# ... (same parameters as col_vals_gt)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`col_vals_le`: are column data less than or equal to a fixed value or data in another column?
|
|
193
|
+
|
|
194
|
+
```yaml
|
|
195
|
+
- col_vals_le:
|
|
196
|
+
columns: [column_name]
|
|
197
|
+
value: 100
|
|
198
|
+
na_pass: true
|
|
199
|
+
# ... (same parameters as col_vals_gt)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
`col_vals_eq`: are column data equal to a fixed value or data in another column?
|
|
203
|
+
|
|
204
|
+
```yaml
|
|
205
|
+
- col_vals_eq:
|
|
206
|
+
columns: [column_name]
|
|
207
|
+
value: "expected_value"
|
|
208
|
+
na_pass: true
|
|
209
|
+
# ... (same parameters as col_vals_gt)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
`col_vals_ne`: are column data not equal to a fixed value or data in another column?
|
|
213
|
+
|
|
214
|
+
```yaml
|
|
215
|
+
- col_vals_ne:
|
|
216
|
+
columns: [column_name]
|
|
217
|
+
value: "forbidden_value"
|
|
218
|
+
na_pass: true
|
|
219
|
+
# ... (same parameters as col_vals_gt)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### Range Methods
|
|
223
|
+
|
|
224
|
+
`col_vals_between`: are column data between two specified values (inclusive)?
|
|
225
|
+
|
|
226
|
+
```yaml
|
|
227
|
+
- col_vals_between:
|
|
228
|
+
columns: [column_name] # REQUIRED: Column(s) to validate
|
|
229
|
+
left: 0 # REQUIRED: Lower bound
|
|
230
|
+
right: 100 # REQUIRED: Upper bound
|
|
231
|
+
inclusive: [true, true] # OPTIONAL: Include bounds [left, right]
|
|
232
|
+
na_pass: false # OPTIONAL: Pass NULL values
|
|
233
|
+
pre: | # OPTIONAL: Data preprocessing
|
|
234
|
+
lambda df: df.filter(condition)
|
|
235
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
236
|
+
warning: 0.1
|
|
237
|
+
actions: # OPTIONAL: Step-level actions
|
|
238
|
+
warning: "Custom message"
|
|
239
|
+
brief: "Values between 0 and 100" # OPTIONAL: Step description
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
`col_vals_outside`: are column data outside of two specified values?
|
|
243
|
+
|
|
244
|
+
```yaml
|
|
245
|
+
- col_vals_outside:
|
|
246
|
+
columns: [column_name]
|
|
247
|
+
left: 0
|
|
248
|
+
right: 100
|
|
249
|
+
inclusive: [false, false] # OPTIONAL: Exclude bounds [left, right]
|
|
250
|
+
na_pass: false
|
|
251
|
+
# ... (same parameters as col_vals_between)
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
#### Set Membership Methods
|
|
255
|
+
|
|
256
|
+
`col_vals_in_set`: are column data part of a specified set of values?
|
|
257
|
+
|
|
258
|
+
```yaml
|
|
259
|
+
- col_vals_in_set:
|
|
260
|
+
columns: [column_name] # REQUIRED: Column(s) to validate
|
|
261
|
+
set: [value1, value2, value3] # REQUIRED: Allowed values
|
|
262
|
+
na_pass: false # OPTIONAL: Pass NULL values
|
|
263
|
+
pre: | # OPTIONAL: Data preprocessing
|
|
264
|
+
lambda df: df.filter(condition)
|
|
265
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
266
|
+
warning: 0.1
|
|
267
|
+
actions: # OPTIONAL: Step-level actions
|
|
268
|
+
warning: "Custom message"
|
|
269
|
+
brief: "Values in allowed set" # OPTIONAL: Step description
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
`col_vals_not_in_set`: are column data not part of a specified set of values?
|
|
273
|
+
|
|
274
|
+
```yaml
|
|
275
|
+
- col_vals_not_in_set:
|
|
276
|
+
columns: [column_name]
|
|
277
|
+
set: [forbidden1, forbidden2] # REQUIRED: Forbidden values
|
|
278
|
+
na_pass: false
|
|
279
|
+
# ... (same parameters as col_vals_in_set)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
#### NULL Value Methods
|
|
283
|
+
|
|
284
|
+
`col_vals_null`: are column data null (missing)?
|
|
285
|
+
|
|
286
|
+
```yaml
|
|
287
|
+
- col_vals_null:
|
|
288
|
+
columns: [column_name] # REQUIRED: Column(s) to validate
|
|
289
|
+
pre: | # OPTIONAL: Data preprocessing
|
|
290
|
+
lambda df: df.filter(condition)
|
|
291
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
292
|
+
warning: 0.1
|
|
293
|
+
actions: # OPTIONAL: Step-level actions
|
|
294
|
+
warning: "Custom message"
|
|
295
|
+
brief: "Values must be NULL" # OPTIONAL: Step description
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
`col_vals_not_null`: are column data not null (not missing)?
|
|
299
|
+
|
|
300
|
+
```yaml
|
|
301
|
+
- col_vals_not_null:
|
|
302
|
+
columns: [column_name]
|
|
303
|
+
# ... (same parameters as col_vals_null)
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
#### Pattern Matching Methods
|
|
307
|
+
|
|
308
|
+
`col_vals_regex`: do string-based column data match a regular expression?
|
|
309
|
+
```yaml
|
|
310
|
+
- col_vals_regex:
|
|
311
|
+
columns: [column_name] # REQUIRED: Column(s) to validate
|
|
312
|
+
pattern: "^[A-Z]{2,3}$" # REQUIRED: Regular expression pattern
|
|
313
|
+
na_pass: false # OPTIONAL: Pass NULL values
|
|
314
|
+
pre: | # OPTIONAL: Data preprocessing
|
|
315
|
+
lambda df: df.filter(condition)
|
|
316
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
317
|
+
warning: 0.1
|
|
318
|
+
actions: # OPTIONAL: Step-level actions
|
|
319
|
+
warning: "Custom message"
|
|
320
|
+
brief: "Values match pattern" # OPTIONAL: Step description
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
#### Custom Expression Methods
|
|
324
|
+
|
|
325
|
+
`col_vals_expr`: do column data agree with a predicate expression?
|
|
326
|
+
|
|
327
|
+
```yaml
|
|
328
|
+
- col_vals_expr:
|
|
329
|
+
expr: # REQUIRED: Custom validation expression
|
|
330
|
+
python: |
|
|
331
|
+
pl.when(pl.col("status") == "active")
|
|
332
|
+
.then(pl.col("value") > 0)
|
|
333
|
+
.otherwise(pl.lit(True))
|
|
334
|
+
pre: | # OPTIONAL: Data preprocessing
|
|
335
|
+
lambda df: df.filter(condition)
|
|
336
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
337
|
+
warning: 0.1
|
|
338
|
+
actions: # OPTIONAL: Step-level actions
|
|
339
|
+
warning: "Custom message"
|
|
340
|
+
brief: "Custom validation rule" # OPTIONAL: Step description
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### Row-based Validations
|
|
344
|
+
|
|
345
|
+
`rows_distinct`: are row data distinct?
|
|
346
|
+
|
|
347
|
+
```yaml
|
|
348
|
+
- rows_distinct # Simple form
|
|
349
|
+
|
|
350
|
+
- rows_distinct: # With parameters
|
|
351
|
+
columns_subset: [col1, col2] # OPTIONAL: Check subset of columns
|
|
352
|
+
pre: | # OPTIONAL: Data preprocessing
|
|
353
|
+
lambda df: df.filter(condition)
|
|
354
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
355
|
+
warning: 0.1
|
|
356
|
+
actions: # OPTIONAL: Step-level actions
|
|
357
|
+
warning: "Custom message"
|
|
358
|
+
brief: "No duplicate rows" # OPTIONAL: Step description
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
`rows_complete`: are row data complete?
|
|
362
|
+
|
|
363
|
+
```yaml
|
|
364
|
+
- rows_complete # Simple form
|
|
365
|
+
|
|
366
|
+
- rows_complete: # With parameters
|
|
367
|
+
columns_subset: [col1, col2] # OPTIONAL: Check subset of columns
|
|
368
|
+
pre: | # OPTIONAL: Data preprocessing
|
|
369
|
+
lambda df: df.filter(condition)
|
|
370
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
371
|
+
warning: 0.1
|
|
372
|
+
actions: # OPTIONAL: Step-level actions
|
|
373
|
+
warning: "Custom message"
|
|
374
|
+
brief: "Complete rows only" # OPTIONAL: Step description
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Structure Validations
|
|
378
|
+
|
|
379
|
+
`col_exists`: does column exist in the table?
|
|
380
|
+
|
|
381
|
+
```yaml
|
|
382
|
+
- col_exists:
|
|
383
|
+
columns: [col1, col2, col3] # REQUIRED: Column(s) that must exist
|
|
384
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
385
|
+
warning: 0.1
|
|
386
|
+
actions: # OPTIONAL: Step-level actions
|
|
387
|
+
warning: "Custom message"
|
|
388
|
+
brief: "Required columns exist" # OPTIONAL: Step description
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
`col_schema_match`: does the table have expected column names and data types?
|
|
392
|
+
|
|
393
|
+
```yaml
|
|
394
|
+
- col_schema_match:
|
|
395
|
+
schema: # REQUIRED: Expected schema
|
|
396
|
+
columns:
|
|
397
|
+
- [column_name, "data_type"] # Column with type validation
|
|
398
|
+
- column_name # Column name only (no type check)
|
|
399
|
+
- [column_name] # Alternative syntax
|
|
400
|
+
complete: true # OPTIONAL: Require exact column set
|
|
401
|
+
in_order: true # OPTIONAL: Require exact column order
|
|
402
|
+
case_sensitive_colnames: true # OPTIONAL: Case-sensitive column names
|
|
403
|
+
case_sensitive_dtypes: true # OPTIONAL: Case-sensitive data types
|
|
404
|
+
full_match_dtypes: true # OPTIONAL: Exact type matching
|
|
405
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
406
|
+
warning: 0.1
|
|
407
|
+
actions: # OPTIONAL: Step-level actions
|
|
408
|
+
warning: "Custom message"
|
|
409
|
+
brief: "Schema validation" # OPTIONAL: Step description
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
`row_count_match`: does the table have n rows?
|
|
413
|
+
|
|
414
|
+
```yaml
|
|
415
|
+
- row_count_match:
|
|
416
|
+
count: 1000 # REQUIRED: Expected row count
|
|
417
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
418
|
+
warning: 0.1
|
|
419
|
+
actions: # OPTIONAL: Step-level actions
|
|
420
|
+
warning: "Custom message"
|
|
421
|
+
brief: "Expected row count" # OPTIONAL: Step description
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
`col_count_match`: does the table have n columns?
|
|
425
|
+
|
|
426
|
+
```yaml
|
|
427
|
+
- col_count_match:
|
|
428
|
+
count: 10 # REQUIRED: Expected column count
|
|
429
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
430
|
+
warning: 0.1
|
|
431
|
+
actions: # OPTIONAL: Step-level actions
|
|
432
|
+
warning: "Custom message"
|
|
433
|
+
brief: "Expected column count" # OPTIONAL: Step description
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Special Validation Methods
|
|
437
|
+
|
|
438
|
+
`conjointly`: are multiple validations having a joint dependency?
|
|
439
|
+
|
|
440
|
+
```yaml
|
|
441
|
+
- conjointly:
|
|
442
|
+
expressions: # REQUIRED: List of lambda expressions
|
|
443
|
+
- "lambda df: df['d'] > df['a']"
|
|
444
|
+
- "lambda df: df['a'] > 0"
|
|
445
|
+
- "lambda df: df['a'] + df['d'] < 12000"
|
|
446
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
447
|
+
warning: 0.1
|
|
448
|
+
actions: # OPTIONAL: Step-level actions
|
|
449
|
+
warning: "Custom message"
|
|
450
|
+
brief: "All conditions must pass" # OPTIONAL: Step description
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
`specially`: do table data pass a custom validation function?
|
|
454
|
+
|
|
455
|
+
```yaml
|
|
456
|
+
- specially:
|
|
457
|
+
expr: # REQUIRED: Custom validation function
|
|
458
|
+
"lambda df: df.select(pl.col('a') + pl.col('d') > 0)"
|
|
459
|
+
thresholds: # OPTIONAL: Step-level thresholds
|
|
460
|
+
warning: 0.1
|
|
461
|
+
actions: # OPTIONAL: Step-level actions
|
|
462
|
+
warning: "Custom message"
|
|
463
|
+
brief: "Custom validation" # OPTIONAL: Step description
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
Alternative syntax with Python expressions:
|
|
467
|
+
|
|
468
|
+
```yaml
|
|
469
|
+
- specially:
|
|
470
|
+
expr:
|
|
471
|
+
python: |
|
|
472
|
+
lambda df: df.select(pl.col('amount') > 0)
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
For Pandas DataFrames (when using `df_library: pandas`):
|
|
476
|
+
|
|
477
|
+
```yaml
|
|
478
|
+
- specially:
|
|
479
|
+
expr: "lambda df: df.assign(is_valid=df['a'] + df['d'] > 0)"
|
|
480
|
+
|
|
481
|
+
## Column Selection Patterns
|
|
482
|
+
|
|
483
|
+
All validation methods that accept a `columns` parameter support these selection patterns:
|
|
484
|
+
|
|
485
|
+
```yaml
|
|
486
|
+
# Single column
|
|
487
|
+
columns: column_name
|
|
488
|
+
|
|
489
|
+
# Multiple columns as list
|
|
490
|
+
columns: [col1, col2, col3]
|
|
491
|
+
|
|
492
|
+
# Column selector functions (when used in Python expressions)
|
|
493
|
+
columns:
|
|
494
|
+
python: |
|
|
495
|
+
starts_with("prefix_")
|
|
496
|
+
|
|
497
|
+
# Examples of common patterns
|
|
498
|
+
columns: [customer_id, order_id] # Specific columns
|
|
499
|
+
columns: user_email # Single column
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
## Parameter Details
|
|
503
|
+
|
|
504
|
+
### Common Parameters
|
|
505
|
+
|
|
506
|
+
These parameters are available for most validation methods:
|
|
507
|
+
|
|
508
|
+
- `columns`: column selection (string, list, or selector expression)
|
|
509
|
+
- `na_pass`: whether to pass NULL/missing values (boolean, default: false)
|
|
510
|
+
- `pre`: data preprocessing function (Python lambda expression)
|
|
511
|
+
- `thresholds`: step-level failure thresholds (dict)
|
|
512
|
+
- `actions`: step-level failure actions (dict)
|
|
513
|
+
- `brief`: step description (string, boolean, or template)
|
|
514
|
+
|
|
515
|
+
### Brief Parameter Options
|
|
516
|
+
|
|
517
|
+
The `brief` parameter supports several formats:
|
|
518
|
+
|
|
519
|
+
```yaml
|
|
520
|
+
brief: "Custom description" # Custom text
|
|
521
|
+
brief: true # Auto-generated description
|
|
522
|
+
brief: false # No description
|
|
523
|
+
brief: "Step {step}: {auto}" # Template with auto-generated text
|
|
524
|
+
brief: "Column '{col}' validation" # Template with variables
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
template variables: `{step}`, `{col}`, `{value}`, `{set}`, `{pattern}`, `{auto}`
|
|
528
|
+
|
|
529
|
+
### Python Expressions
|
|
530
|
+
|
|
531
|
+
Several parameters support Python expressions using the `python:` block syntax:
|
|
532
|
+
|
|
533
|
+
```yaml
|
|
534
|
+
# Data source loading
|
|
535
|
+
tbl:
|
|
536
|
+
python: |
|
|
537
|
+
pl.scan_csv("data.csv").filter(pl.col("active") == True)
|
|
538
|
+
|
|
539
|
+
# Preprocessing
|
|
540
|
+
pre:
|
|
541
|
+
python: |
|
|
542
|
+
lambda df: df.filter(pl.col("date") >= "2024-01-01")
|
|
543
|
+
|
|
544
|
+
# Custom expressions
|
|
545
|
+
expr:
|
|
546
|
+
python: |
|
|
547
|
+
pl.col("value").is_between(0, 100)
|
|
548
|
+
|
|
549
|
+
# Callable actions
|
|
550
|
+
actions:
|
|
551
|
+
error:
|
|
552
|
+
python: |
|
|
553
|
+
lambda: print("VALIDATION ERROR: Critical data quality issue detected!")
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
Note: The Python environment in YAML is restricted for security. Only built-in functions (`print`,
|
|
557
|
+
`len`, `str`, etc.), `Path` from pathlib, and available DataFrame libraries (`pl`, `pd`) are
|
|
558
|
+
accessible. You cannot import additional modules like `requests`, `logging`, or custom libraries.
|
|
559
|
+
|
|
560
|
+
You can also use the shortcut syntax for lambda expressions:
|
|
561
|
+
|
|
562
|
+
```yaml
|
|
563
|
+
# Shortcut syntax (equivalent to python: block)
|
|
564
|
+
pre: |
|
|
565
|
+
lambda df: df.filter(pl.col("status") == "active")
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
### Restricted Python Environment
|
|
569
|
+
|
|
570
|
+
For security reasons, the Python environment in YAML configurations is restricted to a safe subset
|
|
571
|
+
of functionality. The available namespace includes:
|
|
572
|
+
|
|
573
|
+
Built-in functions:
|
|
574
|
+
|
|
575
|
+
- basic types: `str`, `int`, `float`, `bool`, `list`, `dict`, `tuple`, `set`
|
|
576
|
+
- math functions: `sum`, `min`, `max`, `abs`, `round`, `len`
|
|
577
|
+
- iteration: `range`, `enumerate`, `zip`
|
|
578
|
+
- output: `print`
|
|
579
|
+
|
|
580
|
+
Available modules:
|
|
581
|
+
|
|
582
|
+
- `Path` from pathlib for file path operations
|
|
583
|
+
- `pb` (`pointblank`) for dataset loading and validation functions
|
|
584
|
+
- `pl` (`polars`) if available on the system
|
|
585
|
+
- `pd` (`pandas`) if available on the system
|
|
586
|
+
|
|
587
|
+
Restrictions:
|
|
588
|
+
|
|
589
|
+
- cannot import external libraries (`requests`, `logging`, `os`, `sys`, etc.)
|
|
590
|
+
- cannot use `__import__`, `exec`, `eval`, or other dynamic execution functions
|
|
591
|
+
- file operations are limited to `Path` functionality
|
|
592
|
+
|
|
593
|
+
**Examples of valid callable actions:**
|
|
594
|
+
|
|
595
|
+
```yaml
|
|
596
|
+
# Simple output with built-in functions
|
|
597
|
+
actions:
|
|
598
|
+
warning:
|
|
599
|
+
python: |
|
|
600
|
+
lambda: print(f"WARNING: {sum([1, 2, 3])} validation issues detected")
|
|
601
|
+
|
|
602
|
+
# Using available variables and string formatting
|
|
603
|
+
actions:
|
|
604
|
+
error:
|
|
605
|
+
python: |
|
|
606
|
+
lambda: print("ERROR: Data validation failed at " + str(len("validation")))
|
|
607
|
+
|
|
608
|
+
# Multiple statements in lambda (using parentheses)
|
|
609
|
+
actions:
|
|
610
|
+
critical:
|
|
611
|
+
python: |
|
|
612
|
+
lambda: (
|
|
613
|
+
print("CRITICAL ALERT:"),
|
|
614
|
+
print("Immediate attention required"),
|
|
615
|
+
print("Contact data team")
|
|
616
|
+
)[-1] # Return the last value
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
For complex alerting, logging, or external system integration, use string template actions instead
|
|
620
|
+
of callable actions, and handle the external communication in your application code after validation
|
|
621
|
+
completes.
|
|
622
|
+
|
|
623
|
+
## Best Practices
|
|
624
|
+
|
|
625
|
+
### Organization
|
|
626
|
+
|
|
627
|
+
- use descriptive `tbl_name` and `label` values
|
|
628
|
+
- add `brief` descriptions for complex validations
|
|
629
|
+
- group related validations logically
|
|
630
|
+
- use consistent indentation and formatting
|
|
631
|
+
|
|
632
|
+
### Performance
|
|
633
|
+
|
|
634
|
+
- apply `pre` filters early to reduce data volume
|
|
635
|
+
- order validations from fast to slow
|
|
636
|
+
- use `columns_subset` for row-based validations when appropriate
|
|
637
|
+
- consider data source location (local vs. remote)
|
|
638
|
+
- choose `df_library` based on data size and operations:
|
|
639
|
+
- `polars`: fastest for large datasets and analytical operations
|
|
640
|
+
- `pandas`: best for complex transformations and data science workflows
|
|
641
|
+
- `duckdb`: optimal for analytical queries on very large datasets
|
|
642
|
+
|
|
643
|
+
### Maintainability
|
|
644
|
+
|
|
645
|
+
- store YAML files in version control
|
|
646
|
+
- use template variables in actions and briefs
|
|
647
|
+
- document expected failures with comments
|
|
648
|
+
- test configurations with `validate_yaml()` before deployment
|
|
649
|
+
- specify `df_library` explicitly when using library-specific validation expressions
|
|
650
|
+
- keep DataFrame library choice consistent within related validation workflows
|
|
651
|
+
|
|
652
|
+
### Error Handling
|
|
653
|
+
|
|
654
|
+
- set appropriate thresholds based on data patterns
|
|
655
|
+
- use actions for monitoring and alerting
|
|
656
|
+
- start with conservative thresholds and adjust
|
|
657
|
+
- consider using `highest_only: false` for comprehensive reporting
|