pointblank 0.12.1__tar.gz → 0.12.2__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.12.1 → pointblank-0.12.2}/PKG-INFO +1 -1
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/_quarto.yml +1 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/yaml-reference.qmd +36 -1
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/yaml-validation-workflows.qmd +130 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/api-docs.txt +49 -4
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/validate.py +135 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/yaml.py +62 -5
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank.egg-info/PKG-INFO +1 -1
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_validate.py +433 -11
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_yaml.py +656 -1
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/CODE_OF_CONDUCT.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/SECURITY.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/workflows/ci-docs.yaml +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/workflows/ci-tests.yaml +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.github/workflows/code-checks.yaml +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.gitignore +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.pre-commit-config.yaml +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/.vscode/settings.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/CITATION.cff +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/CONTRIBUTING.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/LICENSE +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/Makefile +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/README.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/game_revenue.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/global_sales.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/global_sales_dataset.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/nycflights.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/small_table.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/worldcities.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/x-01-parquet.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/x-02-duckdb.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/data_raw/x-03-sqlite.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/.gitignore +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/_extensions/machow/interlinks/.gitignore +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/fav-logo.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-info-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-info-worldcities-github-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-make-template.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-missing-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-preview-game_revenue-all-columns.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-preview-game_revenue-column-names.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-preview-game_revenue-column-range.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-preview-worldcities-csv-no-row-numbers.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-preview-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-run-worldcities_validation-extracts.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-run-worldcities_validation-fail-on-warning.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-run-worldcities_validation-output.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-run-worldcities_validation.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-scan-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-validate-exit-code.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-validate-multi-check.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-validate-rows-complete-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-validate-rows-distinct-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-validate-show-extract.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-validate-worldcities-gt-0-population.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-validate-worldcities-not-null-city_name.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pb-validate-write-extract.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.de.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.es.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.fr.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.it.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.ja.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.ko.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.nl.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.pt-BR.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-sales-data.zh-CN.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-step-report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank-tabular-report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/pointblank_logo.svg +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/posit-logo-black.svg +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/validation-table-diagram.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/validation-test-units.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/.gitignore +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-cicd-workflows.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-cicd-workflows.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-complete-workflow.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-complete-workflow.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-data-exploration.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-data-exploration.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-essential-validations.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-essential-validations.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-getting-started.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-getting-started.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-using-polars.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/cli-using-polars.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/assets/vhs/validation.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/all-about-actions/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/intro-pointblank/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/intro-pointblank/step_report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/lets-workshop-together/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/overhauled-user-guide/advanced-in-sidebar.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/overhauled-user-guide/breadth-and-depth.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/overhauled-user-guide/explanation-of-visual.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/overhauled-user-guide/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/overhauled-user-guide/links-in-guide.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/overhauled-user-guide/segments.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/overhauled-user-guide/step-report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/overhauled-user-guide/validation-three-things.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/pointblank_blog_logo.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/blog/validation-libs-2025/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/01-starter/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/02-advanced/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/03-data-extracts/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/04-sundered-data/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/05-step-report-column-check/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/07-validation-with-actions/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/08-validation-with-final-actions/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/check-for-freshness/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/check-row-column-counts/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/checks-for-missing/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/cli-interactive/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/column-selector-functions/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/comparisons-across-columns/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/custom-validation-specially/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/data/game_revenue.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/expect-text-pattern/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/failure-thresholds/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/img/advanced_validation.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/img/data_extracts.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/img/starter_validation.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/img/step_report_column_schema.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/img/step_report_column_values.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/img/sundered_data.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/img/validation_with_actions.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/img/validation_with_final_actions.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/mutate-table-in-step/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/numeric-comparisons/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/schema-check/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/set-membership/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/demos/using-parquet-data/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/scripts/post-render.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/styles.css +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/actions.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/assertions.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/briefs.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/cli-data-inspection.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/cli-data-validation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/cli-reference.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/col-summary-tbl.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/column-selection-patterns.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/draft-validation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/expressions.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/extracts.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/installation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/langs.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/missing-vals-tbl.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/preprocessing.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/preview.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/schema-validation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/segmentation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/step-reports.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/sundering.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/thresholds.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/validation-methods.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/docs/user-guide/validation-overview.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/images/pointblank-tabular-report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/images/pointblank_logo.svg +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/__init__.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_constants.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_constants_docs.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_constants_translations.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_datascan_utils.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_interrogation.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_typing.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_utils.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_utils_check_args.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/_utils_html.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/actions.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/assistant.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/cli.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/column.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/compare.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/game_revenue-duckdb.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/game_revenue.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/global_sales-duckdb.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/global_sales.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/nycflights-duckdb.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/nycflights.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/polars-api-docs.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/small_table-duckdb.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/data/small_table.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/datascan.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/draft.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/scan_profile.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/scan_profile_stats.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/schema.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/segments.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/tf.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank/thresholds.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank.egg-info/SOURCES.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank.egg-info/dependency_links.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank.egg-info/entry_points.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank.egg-info/requires.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pointblank.egg-info/top_level.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/pyproject.toml +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/setup.cfg +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/__init__.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/manual_tests/schema_step_reports.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_01_1/schema_step_report_01-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_01_2/schema_step_report_01-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_01_3/schema_step_report_01-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_02_1/schema_step_report_02-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_02_2/schema_step_report_02-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_02_3/schema_step_report_02-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_03_1/schema_step_report_03-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_03_2/schema_step_report_03-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_03_3/schema_step_report_03-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_14_1/schema_step_report_14-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_15_1/schema_step_report_15-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_16_1/schema_step_report_16-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_17_1/schema_step_report_17-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_18_1/schema_step_report_18-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_19_1/schema_step_report_19-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_20_1/schema_step_report_20-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_21_1/schema_step_report_21-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_21_2/schema_step_report_21-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_21_3/schema_step_report_21-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_22_1/schema_step_report_22-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_23_1/schema_step_report_23-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_24_1/schema_step_report_24-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_24_2/schema_step_report_24-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_24_3/schema_step_report_24-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_25_1/schema_step_report_25-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_25_2/schema_step_report_25-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_25_3/schema_step_report_25-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_25_4/schema_step_report_25-4.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_step_report_25_5/schema_step_report_25-5.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_briefs_global_local_html/validation_report_briefs_global_local.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pyspark/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pyspark/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/polars/validation_report_segments_with_pre.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_segments_with_pre_html/validation_report_segments_with_pre.html +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pyspark/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/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.12.1 → pointblank-0.12.2}/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.12.1 → pointblank-0.12.2}/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.12.1 → pointblank-0.12.2}/tests/tbl_files/parquet_data/data_a.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/parquet_data/data_b.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/parquet_data/subdir/nested_data.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/partitioned_sales/status=cancelled/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/partitioned_sales/status=delivered/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/partitioned_sales/status=pending/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/partitioned_sales/status=returned/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/partitioned_sales/status=shipped/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/partitioned_small_table/f=high/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/partitioned_small_table/f=low/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/partitioned_small_table/f=mid/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/taxi_part_01.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/taxi_part_02.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/taxi_part_03.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/taxi_sample.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_xyz.ddb +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_xyz.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_xyz.sqlite +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test__interrogation.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test__utils.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test__utils_check_args.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_actions.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_assistant.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_cli.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_column.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_compare.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_datascan.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_draft.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_meta.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_schema.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_segments.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_tf.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/tests/test_thresholds.py +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.ar.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.de.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.es.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.fr.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.hi.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.it.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.ja.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.ko.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.nl.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.pt-BR.md +0 -0
- {pointblank-0.12.1 → pointblank-0.12.2}/translations/README.zh-CN.md +0 -0
|
@@ -194,6 +194,7 @@ quartodoc:
|
|
|
194
194
|
can split the data based on the validation results (with `get_sundered_data()`).
|
|
195
195
|
contents:
|
|
196
196
|
- name: Validate.interrogate
|
|
197
|
+
- name: Validate.set_tbl
|
|
197
198
|
- name: Validate.get_tabular_report
|
|
198
199
|
- name: Validate.get_step_report
|
|
199
200
|
- name: Validate.get_json_report
|
|
@@ -56,6 +56,40 @@ tbl:
|
|
|
56
56
|
pl.scan_csv("data.csv").filter(pl.col("date") >= "2024-01-01")
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
+
#### Using Templates with `set_tbl=`
|
|
60
|
+
|
|
61
|
+
For reusable validation templates that will always use a custom data source via the `set_tbl=`
|
|
62
|
+
parameter in `yaml_interrogate()`, the `tbl` field is still required but its value doesn't matter
|
|
63
|
+
since it will be overridden. Recommended approaches:
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
# Option 1: Use a valid dataset name (gets overridden anyway)
|
|
67
|
+
tbl: small_table # Will be ignored when `set_tbl=` is used
|
|
68
|
+
|
|
69
|
+
# Option 2: Use YAML null (clearest semantic intent)
|
|
70
|
+
tbl: null # Indicates table will be provided via `set_tbl=`
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
When using `yaml_interrogate()` with `set_tbl=`, the validation template becomes fully reusable:
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
# Define reusable template
|
|
77
|
+
template = """
|
|
78
|
+
tbl: null # Will be overridden
|
|
79
|
+
tbl_name: "Sales Validation"
|
|
80
|
+
steps:
|
|
81
|
+
- col_exists:
|
|
82
|
+
columns: [customer_id, revenue, region]
|
|
83
|
+
- col_vals_gt:
|
|
84
|
+
columns: [revenue]
|
|
85
|
+
value: 0
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
# Apply to different datasets
|
|
89
|
+
q1_result = pb.yaml_interrogate(template, set_tbl=q1_data)
|
|
90
|
+
q2_result = pb.yaml_interrogate(template, set_tbl=q2_data)
|
|
91
|
+
```
|
|
92
|
+
|
|
59
93
|
### DataFrame Library (`df_library`)
|
|
60
94
|
|
|
61
95
|
The `df_library` key controls which DataFrame library is used to load data sources. This parameter
|
|
@@ -117,7 +151,7 @@ thresholds:
|
|
|
117
151
|
critical: 0.15 # 15% failure rate triggers critical
|
|
118
152
|
```
|
|
119
153
|
|
|
120
|
-
- values: numbers between 0 and 1 (percentages) or integers (row counts)
|
|
154
|
+
- values: numbers between `0` and `1` (percentages) or integers (row counts)
|
|
121
155
|
- levels: `warning`, `error`, `critical`
|
|
122
156
|
|
|
123
157
|
### Global Actions
|
|
@@ -477,6 +511,7 @@ For Pandas DataFrames (when using `df_library: pandas`):
|
|
|
477
511
|
```yaml
|
|
478
512
|
- specially:
|
|
479
513
|
expr: "lambda df: df.assign(is_valid=df['a'] + df['d'] > 0)"
|
|
514
|
+
```
|
|
480
515
|
|
|
481
516
|
## Column Selection Patterns
|
|
482
517
|
|
|
@@ -167,6 +167,136 @@ tbl:
|
|
|
167
167
|
)
|
|
168
168
|
```
|
|
169
169
|
|
|
170
|
+
## Reusable Templates with `set_tbl=`
|
|
171
|
+
|
|
172
|
+
One of the most powerful features of YAML validation workflows is the ability to create reusable
|
|
173
|
+
templates that can be applied to different datasets. Using the `set_tbl=` parameter with
|
|
174
|
+
`yaml_interrogate()`, you can define validation logic once and apply it to multiple data sources.
|
|
175
|
+
|
|
176
|
+
### Creating Validation Templates
|
|
177
|
+
|
|
178
|
+
When creating templates for use with `set_tbl=`, the `tbl` field is still required but its value
|
|
179
|
+
will be overridden. The recommended approach is to use `tbl: null`:
|
|
180
|
+
|
|
181
|
+
```yaml
|
|
182
|
+
tbl: null
|
|
183
|
+
tbl_name: "Sales Data Validation Template"
|
|
184
|
+
label: "Standard validation checks for sales data"
|
|
185
|
+
steps:
|
|
186
|
+
- col_exists:
|
|
187
|
+
columns: [customer_id, revenue, region, date]
|
|
188
|
+
- col_vals_not_null:
|
|
189
|
+
columns: [customer_id, revenue]
|
|
190
|
+
- col_vals_gt:
|
|
191
|
+
columns: [revenue]
|
|
192
|
+
value: 0
|
|
193
|
+
- col_vals_in_set:
|
|
194
|
+
columns: [region]
|
|
195
|
+
set: [North, South, East, West]
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Applying Templates to Multiple Datasets
|
|
199
|
+
|
|
200
|
+
Here's a practical example showing how to apply the same validation template to multiple quarterly
|
|
201
|
+
datasets, demonstrating the power of reusable YAML configurations:
|
|
202
|
+
|
|
203
|
+
```{python}
|
|
204
|
+
import pointblank as pb
|
|
205
|
+
import polars as pl
|
|
206
|
+
|
|
207
|
+
# Define the template once
|
|
208
|
+
sales_template = """
|
|
209
|
+
tbl: null # Will be overridden
|
|
210
|
+
tbl_name: "Sales Data Validation"
|
|
211
|
+
label: "Standard sales validation checks"
|
|
212
|
+
thresholds:
|
|
213
|
+
warning: 0.05
|
|
214
|
+
error: 0.1
|
|
215
|
+
steps:
|
|
216
|
+
- col_exists:
|
|
217
|
+
columns: [customer_id, revenue, region]
|
|
218
|
+
- col_vals_not_null:
|
|
219
|
+
columns: [customer_id, revenue]
|
|
220
|
+
- col_vals_gt:
|
|
221
|
+
columns: [revenue]
|
|
222
|
+
value: 0
|
|
223
|
+
- col_vals_in_set:
|
|
224
|
+
columns: [region]
|
|
225
|
+
set: [North, South, East, West]
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
# Create different datasets
|
|
229
|
+
q1_data = pl.DataFrame({
|
|
230
|
+
"customer_id": [1, 2, 3, 4],
|
|
231
|
+
"revenue": [100, 200, 150, 300],
|
|
232
|
+
"region": ["North", "South", "East", "West"]
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
q2_data = pl.DataFrame({
|
|
236
|
+
"customer_id": [5, 6, 7, 8],
|
|
237
|
+
"revenue": [250, 180, 220, 350],
|
|
238
|
+
"region": ["South", "North", "West", "East"]
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
# Apply the same template to both datasets
|
|
242
|
+
q1_result = pb.yaml_interrogate(sales_template, set_tbl=q1_data)
|
|
243
|
+
q2_result = pb.yaml_interrogate(sales_template, set_tbl=q2_data)
|
|
244
|
+
|
|
245
|
+
print(f"Q1 validation: {all(v.all_passed for v in q1_result.validation_info)}")
|
|
246
|
+
print(f"Q2 validation: {all(v.all_passed for v in q2_result.validation_info)}")
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Template Best Practices
|
|
250
|
+
|
|
251
|
+
1. **Use `tbl: null`**: this clearly indicates the template expects a data source to be provided
|
|
252
|
+
2. **Include comprehensive metadata**: use `tbl_name`, `label`, and `brief` to make results
|
|
253
|
+
self-documenting
|
|
254
|
+
3. **Set appropriate thresholds**: define warning/error levels that make sense for your use case
|
|
255
|
+
4. **Version control templates**: store templates in your repository alongside your data processing
|
|
256
|
+
code
|
|
257
|
+
5. **Test with sample data**: validate your templates work with representative datasets
|
|
258
|
+
|
|
259
|
+
### Common Template Patterns
|
|
260
|
+
|
|
261
|
+
For API response validation, you can ensure that responses have the expected structure and valid
|
|
262
|
+
status codes:
|
|
263
|
+
|
|
264
|
+
```yaml
|
|
265
|
+
tbl: null
|
|
266
|
+
tbl_name: "API Response Validation"
|
|
267
|
+
brief: "Standard checks for API response data"
|
|
268
|
+
steps:
|
|
269
|
+
- col_exists:
|
|
270
|
+
columns: [user_id, status, timestamp]
|
|
271
|
+
- col_vals_in_set:
|
|
272
|
+
columns: [status]
|
|
273
|
+
set: [success, error, pending]
|
|
274
|
+
- col_vals_not_null:
|
|
275
|
+
columns: [user_id, timestamp]
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
For file upload validation, you can check file sizes and formats to ensure they meet your
|
|
279
|
+
requirements:
|
|
280
|
+
|
|
281
|
+
```yaml
|
|
282
|
+
tbl: null
|
|
283
|
+
tbl_name: "File Upload Validation"
|
|
284
|
+
steps:
|
|
285
|
+
- col_vals_gt:
|
|
286
|
+
columns: [file_size]
|
|
287
|
+
value: 0
|
|
288
|
+
- col_vals_lt:
|
|
289
|
+
columns: [file_size]
|
|
290
|
+
value: 10485760 # 10MB limit
|
|
291
|
+
- col_vals_in_set:
|
|
292
|
+
columns: [file_type]
|
|
293
|
+
set: [csv, json, xlsx, parquet]
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
This template approach is particularly valuable in data pipelines, ETL processes, and automated
|
|
297
|
+
testing scenarios where you need to apply consistent validation logic across multiple similar
|
|
298
|
+
datasets.
|
|
299
|
+
|
|
170
300
|
## Validation Steps
|
|
171
301
|
|
|
172
302
|
YAML supports all of Pointblank's validation methods. Here are some common patterns:
|
|
@@ -9798,7 +9798,7 @@ validation workflows. The `yaml_interrogate()` function can be used to run a val
|
|
|
9798
9798
|
YAML strings or files. The `validate_yaml()` function checks if the YAML configuration
|
|
9799
9799
|
passes its own validity checks.
|
|
9800
9800
|
|
|
9801
|
-
yaml_interrogate(yaml: 'Union[str, Path]') -> 'Validate'
|
|
9801
|
+
yaml_interrogate(yaml: 'Union[str, Path]', set_tbl: 'Union[FrameT, Any, None]' = None) -> 'Validate'
|
|
9802
9802
|
Execute a YAML-based validation workflow.
|
|
9803
9803
|
|
|
9804
9804
|
This is the main entry point for YAML-based validation workflows. It takes YAML configuration
|
|
@@ -9813,13 +9813,20 @@ Execute a YAML-based validation workflow.
|
|
|
9813
9813
|
yaml
|
|
9814
9814
|
YAML configuration as string or file path. Can be: (1) a YAML string containing the
|
|
9815
9815
|
validation configuration, or (2) a Path object or string path to a YAML file.
|
|
9816
|
+
set_tbl
|
|
9817
|
+
An optional table to override the table specified in the YAML configuration. This allows you
|
|
9818
|
+
to apply a YAML-defined validation workflow to a different table than what's specified in
|
|
9819
|
+
the configuration. If provided, this table will replace the table defined in the YAML's
|
|
9820
|
+
`tbl` field before executing the validation workflow. This can be any supported table type
|
|
9821
|
+
including DataFrame objects, Ibis table objects, CSV file paths, Parquet file paths, GitHub
|
|
9822
|
+
URLs, or database connection strings.
|
|
9816
9823
|
|
|
9817
9824
|
Returns
|
|
9818
9825
|
-------
|
|
9819
9826
|
Validate
|
|
9820
|
-
An instance of the `Validate` class that has been configured based on the YAML input.
|
|
9821
|
-
|
|
9822
|
-
|
|
9827
|
+
An instance of the `Validate` class that has been configured based on the YAML input. This
|
|
9828
|
+
object contains the results of the validation steps defined in the YAML configuration. It
|
|
9829
|
+
includes metadata like table name, label, language, and thresholds if specified.
|
|
9823
9830
|
|
|
9824
9831
|
Raises
|
|
9825
9832
|
------
|
|
@@ -9918,6 +9925,44 @@ Execute a YAML-based validation workflow.
|
|
|
9918
9925
|
This approach is particularly useful for storing validation configurations as part of your data
|
|
9919
9926
|
pipeline or version control system, allowing you to maintain validation rules alongside your
|
|
9920
9927
|
code.
|
|
9928
|
+
|
|
9929
|
+
### Using `set_tbl=` to Override the Table
|
|
9930
|
+
|
|
9931
|
+
The `set_tbl=` parameter allows you to override the table specified in the YAML configuration.
|
|
9932
|
+
This is useful when you have a template validation workflow but want to apply it to different
|
|
9933
|
+
tables:
|
|
9934
|
+
|
|
9935
|
+
```python
|
|
9936
|
+
import polars as pl
|
|
9937
|
+
|
|
9938
|
+
# Create a test table with similar structure to small_table
|
|
9939
|
+
test_table = pl.DataFrame({
|
|
9940
|
+
"date": ["2023-01-01", "2023-01-02", "2023-01-03"],
|
|
9941
|
+
"a": [1, 2, 3],
|
|
9942
|
+
"b": ["1-abc-123", "2-def-456", "3-ghi-789"],
|
|
9943
|
+
"d": [150, 200, 250]
|
|
9944
|
+
})
|
|
9945
|
+
|
|
9946
|
+
# Use the same YAML config but apply it to our test table
|
|
9947
|
+
yaml_config = '''
|
|
9948
|
+
tbl: small_table # This will be overridden
|
|
9949
|
+
tbl_name: Test Table # This name will be used
|
|
9950
|
+
steps:
|
|
9951
|
+
- col_exists:
|
|
9952
|
+
columns: [date, a, b, d]
|
|
9953
|
+
- col_vals_gt:
|
|
9954
|
+
columns: [d]
|
|
9955
|
+
value: 100
|
|
9956
|
+
'''
|
|
9957
|
+
|
|
9958
|
+
# Execute with table override
|
|
9959
|
+
result = pb.yaml_interrogate(yaml_config, set_tbl=test_table)
|
|
9960
|
+
print(f"Validation applied to: {result.tbl_name}")
|
|
9961
|
+
result
|
|
9962
|
+
```
|
|
9963
|
+
|
|
9964
|
+
This feature makes YAML configurations more reusable and flexible, allowing you to define
|
|
9965
|
+
validation logic once and apply it to multiple similar tables.
|
|
9921
9966
|
|
|
9922
9967
|
|
|
9923
9968
|
validate_yaml(yaml: 'Union[str, Path]') -> 'None'
|
|
@@ -3758,6 +3758,141 @@ class Validate:
|
|
|
3758
3758
|
|
|
3759
3759
|
self.validation_info = []
|
|
3760
3760
|
|
|
3761
|
+
def set_tbl(
|
|
3762
|
+
self,
|
|
3763
|
+
tbl: FrameT | Any,
|
|
3764
|
+
tbl_name: str | None = None,
|
|
3765
|
+
label: str | None = None,
|
|
3766
|
+
) -> Validate:
|
|
3767
|
+
"""
|
|
3768
|
+
Set or replace the table associated with the Validate object.
|
|
3769
|
+
|
|
3770
|
+
This method allows you to replace the table associated with a Validate object with a
|
|
3771
|
+
different (but presumably similar) table. This is useful when you want to apply the same
|
|
3772
|
+
validation plan to multiple tables or when you have a validation workflow defined but want
|
|
3773
|
+
to swap in a different data source.
|
|
3774
|
+
|
|
3775
|
+
Parameters
|
|
3776
|
+
----------
|
|
3777
|
+
tbl
|
|
3778
|
+
The table to replace the existing table with. This can be any supported table type
|
|
3779
|
+
including DataFrame objects, Ibis table objects, CSV file paths, Parquet file paths,
|
|
3780
|
+
GitHub URLs, or database connection strings. The same table type constraints apply as in
|
|
3781
|
+
the `Validate` constructor.
|
|
3782
|
+
tbl_name
|
|
3783
|
+
An optional name to assign to the new input table object. If no value is provided, the
|
|
3784
|
+
existing table name will be retained.
|
|
3785
|
+
label
|
|
3786
|
+
An optional label for the validation plan. If no value is provided, the existing label
|
|
3787
|
+
will be retained.
|
|
3788
|
+
|
|
3789
|
+
Returns
|
|
3790
|
+
-------
|
|
3791
|
+
Validate
|
|
3792
|
+
A new `Validate` object with the replacement table.
|
|
3793
|
+
|
|
3794
|
+
When to Use
|
|
3795
|
+
-----------
|
|
3796
|
+
The `set_tbl()` method is particularly useful in scenarios where you have:
|
|
3797
|
+
|
|
3798
|
+
- multiple similar tables that need the same validation checks
|
|
3799
|
+
- a template validation workflow that should be applied to different data sources
|
|
3800
|
+
- YAML-defined validations where you want to override the table specified in the YAML
|
|
3801
|
+
|
|
3802
|
+
The `set_tbl()` method creates a copy of the validation object with the new table, so the
|
|
3803
|
+
original validation object remains unchanged. This allows you to reuse validation plans
|
|
3804
|
+
across multiple tables without interference.
|
|
3805
|
+
|
|
3806
|
+
Examples
|
|
3807
|
+
--------
|
|
3808
|
+
```{python}
|
|
3809
|
+
#| echo: false
|
|
3810
|
+
#| output: false
|
|
3811
|
+
import pointblank as pb
|
|
3812
|
+
pb.config(report_incl_header=False, report_incl_footer=False, preview_incl_header=False)
|
|
3813
|
+
```
|
|
3814
|
+
We will first create two similar tables for our future validation plans.
|
|
3815
|
+
|
|
3816
|
+
```{python}
|
|
3817
|
+
import pointblank as pb
|
|
3818
|
+
import polars as pl
|
|
3819
|
+
|
|
3820
|
+
# Create two similar tables
|
|
3821
|
+
table_1 = pl.DataFrame({
|
|
3822
|
+
"x": [1, 2, 3, 4, 5],
|
|
3823
|
+
"y": [5, 4, 3, 2, 1],
|
|
3824
|
+
"z": ["a", "b", "c", "d", "e"]
|
|
3825
|
+
})
|
|
3826
|
+
|
|
3827
|
+
table_2 = pl.DataFrame({
|
|
3828
|
+
"x": [2, 4, 6, 8, 10],
|
|
3829
|
+
"y": [10, 8, 6, 4, 2],
|
|
3830
|
+
"z": ["f", "g", "h", "i", "j"]
|
|
3831
|
+
})
|
|
3832
|
+
```
|
|
3833
|
+
|
|
3834
|
+
Create a validation plan with the first table.
|
|
3835
|
+
|
|
3836
|
+
```{python}
|
|
3837
|
+
validation_table_1 = (
|
|
3838
|
+
pb.Validate(
|
|
3839
|
+
data=table_1,
|
|
3840
|
+
tbl_name="Table 1",
|
|
3841
|
+
label="Validation applied to the first table"
|
|
3842
|
+
)
|
|
3843
|
+
.col_vals_gt(columns="x", value=0)
|
|
3844
|
+
.col_vals_lt(columns="y", value=10)
|
|
3845
|
+
)
|
|
3846
|
+
```
|
|
3847
|
+
|
|
3848
|
+
Now apply the same validation plan to the second table.
|
|
3849
|
+
|
|
3850
|
+
```{python}
|
|
3851
|
+
validation_table_2 = (
|
|
3852
|
+
validation_table_1
|
|
3853
|
+
.set_tbl(
|
|
3854
|
+
tbl=table_2,
|
|
3855
|
+
tbl_name="Table 2",
|
|
3856
|
+
label="Validation applied to the second table"
|
|
3857
|
+
)
|
|
3858
|
+
)
|
|
3859
|
+
```
|
|
3860
|
+
|
|
3861
|
+
Here is the interrogation of the first table:
|
|
3862
|
+
|
|
3863
|
+
```{python}
|
|
3864
|
+
validation_table_1.interrogate()
|
|
3865
|
+
```
|
|
3866
|
+
|
|
3867
|
+
And the second table:
|
|
3868
|
+
|
|
3869
|
+
```{python}
|
|
3870
|
+
validation_table_2.interrogate()
|
|
3871
|
+
```
|
|
3872
|
+
"""
|
|
3873
|
+
from copy import deepcopy
|
|
3874
|
+
|
|
3875
|
+
# Create a deep copy of the current Validate object
|
|
3876
|
+
new_validate = deepcopy(self)
|
|
3877
|
+
|
|
3878
|
+
# Process the new table through the centralized data processing pipeline
|
|
3879
|
+
new_validate.data = _process_data(tbl)
|
|
3880
|
+
|
|
3881
|
+
# Update table name if provided, otherwise keep existing
|
|
3882
|
+
if tbl_name is not None:
|
|
3883
|
+
new_validate.tbl_name = tbl_name
|
|
3884
|
+
|
|
3885
|
+
# Update label if provided, otherwise keep existing
|
|
3886
|
+
if label is not None:
|
|
3887
|
+
new_validate.label = label
|
|
3888
|
+
|
|
3889
|
+
# Reset interrogation state since we have a new table, but preserve validation steps
|
|
3890
|
+
new_validate.time_start = None
|
|
3891
|
+
new_validate.time_end = None
|
|
3892
|
+
# Note: We keep validation_info as it contains the defined validation steps
|
|
3893
|
+
|
|
3894
|
+
return new_validate
|
|
3895
|
+
|
|
3761
3896
|
def _repr_html_(self) -> str:
|
|
3762
3897
|
return self.get_tabular_report()._repr_html_() # pragma: no cover
|
|
3763
3898
|
|
|
@@ -4,6 +4,7 @@ from pathlib import Path
|
|
|
4
4
|
from typing import Any, Union
|
|
5
5
|
|
|
6
6
|
import yaml
|
|
7
|
+
from narwhals.typing import FrameT
|
|
7
8
|
|
|
8
9
|
from pointblank._utils import _is_lib_present
|
|
9
10
|
from pointblank.thresholds import Actions
|
|
@@ -749,7 +750,7 @@ class YAMLValidator:
|
|
|
749
750
|
return validation
|
|
750
751
|
|
|
751
752
|
|
|
752
|
-
def yaml_interrogate(yaml: Union[str, Path]) -> Validate:
|
|
753
|
+
def yaml_interrogate(yaml: Union[str, Path], set_tbl: Union[FrameT, Any, None] = None) -> Validate:
|
|
753
754
|
"""Execute a YAML-based validation workflow.
|
|
754
755
|
|
|
755
756
|
This is the main entry point for YAML-based validation workflows. It takes YAML configuration
|
|
@@ -764,13 +765,20 @@ def yaml_interrogate(yaml: Union[str, Path]) -> Validate:
|
|
|
764
765
|
yaml
|
|
765
766
|
YAML configuration as string or file path. Can be: (1) a YAML string containing the
|
|
766
767
|
validation configuration, or (2) a Path object or string path to a YAML file.
|
|
768
|
+
set_tbl
|
|
769
|
+
An optional table to override the table specified in the YAML configuration. This allows you
|
|
770
|
+
to apply a YAML-defined validation workflow to a different table than what's specified in
|
|
771
|
+
the configuration. If provided, this table will replace the table defined in the YAML's
|
|
772
|
+
`tbl` field before executing the validation workflow. This can be any supported table type
|
|
773
|
+
including DataFrame objects, Ibis table objects, CSV file paths, Parquet file paths, GitHub
|
|
774
|
+
URLs, or database connection strings.
|
|
767
775
|
|
|
768
776
|
Returns
|
|
769
777
|
-------
|
|
770
778
|
Validate
|
|
771
|
-
An instance of the `Validate` class that has been configured based on the YAML input.
|
|
772
|
-
|
|
773
|
-
|
|
779
|
+
An instance of the `Validate` class that has been configured based on the YAML input. This
|
|
780
|
+
object contains the results of the validation steps defined in the YAML configuration. It
|
|
781
|
+
includes metadata like table name, label, language, and thresholds if specified.
|
|
774
782
|
|
|
775
783
|
Raises
|
|
776
784
|
------
|
|
@@ -875,10 +883,59 @@ def yaml_interrogate(yaml: Union[str, Path]) -> Validate:
|
|
|
875
883
|
This approach is particularly useful for storing validation configurations as part of your data
|
|
876
884
|
pipeline or version control system, allowing you to maintain validation rules alongside your
|
|
877
885
|
code.
|
|
886
|
+
|
|
887
|
+
### Using `set_tbl=` to Override the Table
|
|
888
|
+
|
|
889
|
+
The `set_tbl=` parameter allows you to override the table specified in the YAML configuration.
|
|
890
|
+
This is useful when you have a template validation workflow but want to apply it to different
|
|
891
|
+
tables:
|
|
892
|
+
|
|
893
|
+
```{python}
|
|
894
|
+
import polars as pl
|
|
895
|
+
|
|
896
|
+
# Create a test table with similar structure to small_table
|
|
897
|
+
test_table = pl.DataFrame({
|
|
898
|
+
"date": ["2023-01-01", "2023-01-02", "2023-01-03"],
|
|
899
|
+
"a": [1, 2, 3],
|
|
900
|
+
"b": ["1-abc-123", "2-def-456", "3-ghi-789"],
|
|
901
|
+
"d": [150, 200, 250]
|
|
902
|
+
})
|
|
903
|
+
|
|
904
|
+
# Use the same YAML config but apply it to our test table
|
|
905
|
+
yaml_config = '''
|
|
906
|
+
tbl: small_table # This will be overridden
|
|
907
|
+
tbl_name: Test Table # This name will be used
|
|
908
|
+
steps:
|
|
909
|
+
- col_exists:
|
|
910
|
+
columns: [date, a, b, d]
|
|
911
|
+
- col_vals_gt:
|
|
912
|
+
columns: [d]
|
|
913
|
+
value: 100
|
|
914
|
+
'''
|
|
915
|
+
|
|
916
|
+
# Execute with table override
|
|
917
|
+
result = pb.yaml_interrogate(yaml_config, set_tbl=test_table)
|
|
918
|
+
print(f"Validation applied to: {result.tbl_name}")
|
|
919
|
+
result
|
|
920
|
+
```
|
|
921
|
+
|
|
922
|
+
This feature makes YAML configurations more reusable and flexible, allowing you to define
|
|
923
|
+
validation logic once and apply it to multiple similar tables.
|
|
878
924
|
"""
|
|
879
925
|
validator = YAMLValidator()
|
|
880
926
|
config = validator.load_config(yaml)
|
|
881
|
-
|
|
927
|
+
|
|
928
|
+
# If `set_tbl=` is provided, we need to build the validation workflow and then use `set_tbl()`
|
|
929
|
+
if set_tbl is not None:
|
|
930
|
+
# First build the validation object without interrogation
|
|
931
|
+
validation = validator.build_validation(config)
|
|
932
|
+
# Then replace the table using set_tbl method
|
|
933
|
+
validation = validation.set_tbl(tbl=set_tbl)
|
|
934
|
+
# Finally interrogate with the new table
|
|
935
|
+
return validation.interrogate()
|
|
936
|
+
else:
|
|
937
|
+
# Standard execution without table override (includes interrogation)
|
|
938
|
+
return validator.execute_workflow(config)
|
|
882
939
|
|
|
883
940
|
|
|
884
941
|
def load_yaml_config(file_path: Union[str, Path]) -> dict:
|