pointblank 0.12.1__tar.gz → 0.13.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pointblank-0.12.1 → pointblank-0.13.0}/.gitignore +1 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/CITATION.cff +1 -1
- {pointblank-0.12.1 → pointblank-0.13.0}/Makefile +9 -1
- {pointblank-0.12.1 → pointblank-0.13.0}/PKG-INFO +8 -1
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/_quarto.yml +4 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/installation.qmd +26 -0
- pointblank-0.13.0/docs/user-guide/mcp-quick-start.qmd +248 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/thresholds.qmd +14 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/yaml-reference.qmd +36 -1
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/yaml-validation-workflows.qmd +130 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_interrogation.py +11 -17
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/api-docs.txt +49 -4
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/validate.py +245 -139
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/yaml.py +62 -25
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank.egg-info/PKG-INFO +8 -1
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank.egg-info/SOURCES.txt +5 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank.egg-info/requires.txt +9 -0
- pointblank-0.13.0/pointblank_mcp_server/pointblank_server.py +2077 -0
- pointblank-0.13.0/pointblank_mcp_server/readme.md +218 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pyproject.toml +18 -1
- pointblank-0.13.0/tests/test__interrogation.py +540 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test__utils.py +248 -0
- pointblank-0.13.0/tests/test_mcp_integration.py +251 -0
- pointblank-0.13.0/tests/test_mcp_server.py +162 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_segments.py +10 -5
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_validate.py +930 -276
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_yaml.py +1589 -20
- pointblank-0.12.1/tests/test__interrogation.py +0 -272
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/SECURITY.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/workflows/ci-docs.yaml +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/workflows/ci-tests.yaml +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.github/workflows/code-checks.yaml +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.pre-commit-config.yaml +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/.vscode/settings.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/CONTRIBUTING.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/LICENSE +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/README.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/game_revenue.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/global_sales.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/global_sales_dataset.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/nycflights.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/small_table.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/worldcities.csv +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/x-01-parquet.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/x-02-duckdb.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/data_raw/x-03-sqlite.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/.gitignore +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/_extensions/machow/interlinks/.gitignore +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/fav-logo.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-info-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-info-worldcities-github-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-make-template.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-missing-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-preview-game_revenue-all-columns.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-preview-game_revenue-column-names.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-preview-game_revenue-column-range.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-preview-worldcities-csv-no-row-numbers.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-preview-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-run-worldcities_validation-extracts.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-run-worldcities_validation-fail-on-warning.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-run-worldcities_validation-output.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-run-worldcities_validation.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-scan-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-validate-exit-code.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-validate-multi-check.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-validate-rows-complete-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-validate-rows-distinct-worldcities-csv.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-validate-show-extract.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-validate-worldcities-gt-0-population.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-validate-worldcities-not-null-city_name.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pb-validate-write-extract.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.de.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.es.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.fr.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.it.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.ja.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.ko.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.nl.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.pt-BR.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-sales-data.zh-CN.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-step-report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank-tabular-report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/pointblank_logo.svg +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/posit-logo-black.svg +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/validation-table-diagram.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/validation-test-units.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/.gitignore +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-cicd-workflows.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-cicd-workflows.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-complete-workflow.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-complete-workflow.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-data-exploration.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-data-exploration.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-essential-validations.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-essential-validations.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-getting-started.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-getting-started.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-using-polars.gif +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/cli-using-polars.tape +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/assets/vhs/validation.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/all-about-actions/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/intro-pointblank/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/intro-pointblank/pointblank-localized.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/intro-pointblank/step_report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/intro-pointblank/validation-table-diagram.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/intro-pointblank/validation-test-units.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/lets-workshop-together/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/overhauled-user-guide/advanced-in-sidebar.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/overhauled-user-guide/breadth-and-depth.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/overhauled-user-guide/explanation-of-visual.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/overhauled-user-guide/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/overhauled-user-guide/links-in-guide.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/overhauled-user-guide/segments.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/overhauled-user-guide/step-report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/overhauled-user-guide/validation-three-things.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/pointblank_blog_logo.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/blog/validation-libs-2025/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/01-starter/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/02-advanced/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/03-data-extracts/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/04-sundered-data/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/05-step-report-column-check/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/06-step-report-schema-check/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/07-validation-with-actions/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/08-validation-with-final-actions/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/apply-checks-to-several-columns/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/check-for-freshness/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/check-row-column-counts/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/checks-for-missing/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/cli-interactive/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/col-vals-custom-expr/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/column-selector-functions/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/comparisons-across-columns/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/custom-validation-specially/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/data/game_revenue.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/expect-no-duplicate-rows/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/expect-no-duplicate-values/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/expect-text-pattern/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/failure-thresholds/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/img/advanced_validation.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/img/data_extracts.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/img/starter_validation.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/img/step_report_column_schema.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/img/step_report_column_values.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/img/sundered_data.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/img/validation_with_actions.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/img/validation_with_final_actions.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/mutate-table-in-step/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/numeric-comparisons/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/schema-check/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/set-membership/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/demos/using-parquet-data/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/scripts/post-render.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/styles.css +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/actions.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/assertions.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/briefs.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/cli-data-inspection.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/cli-data-validation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/cli-reference.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/col-summary-tbl.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/column-selection-patterns.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/draft-validation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/expressions.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/extracts.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/index.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/langs.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/missing-vals-tbl.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/preprocessing.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/preview.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/schema-validation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/segmentation.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/step-reports.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/sundering.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/validation-methods.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/docs/user-guide/validation-overview.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/images/pointblank-tabular-report.png +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/images/pointblank_logo.svg +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/__init__.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_constants.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_constants_docs.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_constants_translations.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_datascan_utils.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_typing.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_utils.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_utils_check_args.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/_utils_html.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/actions.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/assistant.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/cli.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/column.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/compare.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/game_revenue-duckdb.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/game_revenue.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/global_sales-duckdb.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/global_sales.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/nycflights-duckdb.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/nycflights.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/polars-api-docs.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/small_table-duckdb.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/data/small_table.zip +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/datascan.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/draft.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/scan_profile.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/scan_profile_stats.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/schema.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/segments.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/tf.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank/thresholds.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank.egg-info/dependency_links.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank.egg-info/entry_points.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/pointblank.egg-info/top_level.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/setup.cfg +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/__init__.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/manual_tests/schema_step_reports.qmd +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_datascan/test_col_summary_tbl_duckdb_snap/col_summary_html_duckdb.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_datascan/test_col_summary_tbl_pandas_snap/col_summary_html_pandas.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_datascan/test_col_summary_tbl_polars_snap/col_summary_html_polars.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_comprehensive_validation_report_html_snap/comprehensive_validation_report.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_01/schema_step_report_01-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/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.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_02/schema_step_report_02-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/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.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_03/schema_step_report_03-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/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.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_04/schema_step_report_04-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_05/schema_step_report_05-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_06/schema_step_report_06-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_07/schema_step_report_07-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_08/schema_step_report_08-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_09/schema_step_report_09-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_10/schema_step_report_10-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_11/schema_step_report_11-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_12/schema_step_report_12-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_13/schema_step_report_13-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_14/schema_step_report_14-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_15/schema_step_report_15-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_16/schema_step_report_16-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_17/schema_step_report_17-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_18/schema_step_report_18-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_19/schema_step_report_19-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_20/schema_step_report_20-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_21/schema_step_report_21-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/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.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_22/schema_step_report_22-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_23/schema_step_report_23-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_24/schema_step_report_24-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/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.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_step_report_25/schema_step_report_25-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/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.13.0}/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.13.0}/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.13.0}/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.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_01-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_02-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_03-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_04-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_05-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_06-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_07-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_08-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_09-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_10-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_11-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_12-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_13-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_14-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_15-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_16-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_17-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_18-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_19-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_20-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_21-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_22-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_23-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_24-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-0.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-1.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-2.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-3.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-4.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_get_schema_validation_info/schema_info_25-5.txt +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_no_interrogation_validation_report_html_snap/no_interrogation_validation_report.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_no_steps_validation_report_html_snap/no_steps_validation_report.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/tests/snapshots/test_validate/test_validation_report_briefs_html/validation_report_with_briefs.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_pyspark/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_pyspark/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_no_interrogate_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_segments_html/duckdb/validation_report_segments.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_segments_html/pandas/validation_report_segments.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_segments_html/polars/validation_report_segments.html +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/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.13.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_duckdb/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_parquet/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pd/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pl/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_pyspark/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/snapshots/test_validate/test_validation_report_use_fields_snap/tbl_sqlite/validation_report.json +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/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.13.0}/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.13.0}/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.13.0}/tests/tbl_files/parquet_data/data_a.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/parquet_data/data_b.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/parquet_data/subdir/nested_data.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/partitioned_sales/status=cancelled/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/partitioned_sales/status=delivered/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/partitioned_sales/status=pending/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/partitioned_sales/status=returned/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/partitioned_sales/status=shipped/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/partitioned_small_table/f=high/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/partitioned_small_table/f=low/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/partitioned_small_table/f=mid/0.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/taxi_part_01.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/taxi_part_02.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/taxi_part_03.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/taxi_sample.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_dates_times_text.ddb +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_dates_times_text.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_dates_times_text.sqlite +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_true_dates_times.ddb +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_xyz.ddb +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_xyz.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_xyz.sqlite +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_xyz_missing.ddb +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_xyz_missing.parquet +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/tbl_files/tbl_xyz_missing.sqlite +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test__utils_check_args.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_actions.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_assistant.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_cli.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_column.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_compare.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_datascan.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_draft.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_meta.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_schema.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_tf.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/tests/test_thresholds.py +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.ar.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.de.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.es.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.fr.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.hi.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.it.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.ja.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.ko.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.nl.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.pt-BR.md +0 -0
- {pointblank-0.12.1 → pointblank-0.13.0}/translations/README.zh-CN.md +0 -0
|
@@ -3,7 +3,7 @@ message: 'If you wish to cite the "Pointblank" package use:'
|
|
|
3
3
|
type: software
|
|
4
4
|
license: MIT
|
|
5
5
|
title: "Pointblank: Find out if your data is what you think it is"
|
|
6
|
-
version: 0.
|
|
6
|
+
version: 0.12.2
|
|
7
7
|
abstract: Validate data in Polars and Pandas DataFrames and database tables.
|
|
8
8
|
Validation pipelines can be made using easily-readable, consecutive validation
|
|
9
9
|
steps. Upon execution of the validation plan, several reporting options are available.
|
|
@@ -13,11 +13,19 @@ test:
|
|
|
13
13
|
test-update:
|
|
14
14
|
pytest --snapshot-update
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
.PHONY: lint
|
|
17
17
|
lint: ## Run ruff formatter and linter
|
|
18
18
|
@uv run ruff format
|
|
19
19
|
@uv run ruff check --fix
|
|
20
20
|
|
|
21
|
+
.PHONY: install-pre-commit
|
|
22
|
+
install-pre-commit: # Install pre-commit hooks
|
|
23
|
+
@uvx pre-commit install
|
|
24
|
+
|
|
25
|
+
.PHONY: run-pre-commit
|
|
26
|
+
run-pre-commit: # Run pre-commit hooks
|
|
27
|
+
@uvx pre-commit run --all-files
|
|
28
|
+
|
|
21
29
|
check:
|
|
22
30
|
pyright --pythonversion 3.8 pointblank
|
|
23
31
|
pyright --pythonversion 3.9 pointblank
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pointblank
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.0
|
|
4
4
|
Summary: Find out if your data is what you think it is.
|
|
5
5
|
Author-email: Richard Iannone <riannone@me.com>
|
|
6
6
|
License: MIT License
|
|
@@ -60,6 +60,12 @@ Requires-Dist: chatlas>=0.3.0; extra == "generate"
|
|
|
60
60
|
Requires-Dist: anthropic[bedrock]>=0.45.2; extra == "generate"
|
|
61
61
|
Requires-Dist: openai>=1.63.0; extra == "generate"
|
|
62
62
|
Requires-Dist: shiny>=1.3.0; extra == "generate"
|
|
63
|
+
Provides-Extra: mcp
|
|
64
|
+
Requires-Dist: mcp[cli]>=1.10.1; extra == "mcp"
|
|
65
|
+
Requires-Dist: fastmcp>=2.11.3; extra == "mcp"
|
|
66
|
+
Requires-Dist: pytest-asyncio>=1.0.0; extra == "mcp"
|
|
67
|
+
Provides-Extra: excel
|
|
68
|
+
Requires-Dist: openpyxl>=3.0.0; extra == "excel"
|
|
63
69
|
Provides-Extra: bigquery
|
|
64
70
|
Requires-Dist: ibis-framework[bigquery]>=9.5.0; extra == "bigquery"
|
|
65
71
|
Provides-Extra: databricks
|
|
@@ -84,6 +90,7 @@ Requires-Dist: quartodoc>=0.8.1; python_version >= "3.9" and extra == "docs"
|
|
|
84
90
|
Requires-Dist: pandas>=2.2.3; extra == "docs"
|
|
85
91
|
Requires-Dist: polars>=1.17.1; extra == "docs"
|
|
86
92
|
Requires-Dist: pyspark==3.5.6; extra == "docs"
|
|
93
|
+
Requires-Dist: openpyxl>=3.0.0; extra == "docs"
|
|
87
94
|
Dynamic: license-file
|
|
88
95
|
|
|
89
96
|
<div align="center">
|
|
@@ -98,6 +98,9 @@ website:
|
|
|
98
98
|
- user-guide/cli-data-inspection.qmd
|
|
99
99
|
- user-guide/cli-data-validation.qmd
|
|
100
100
|
- user-guide/cli-reference.qmd
|
|
101
|
+
- section: "MCP Server"
|
|
102
|
+
contents:
|
|
103
|
+
- user-guide/mcp-quick-start.qmd
|
|
101
104
|
|
|
102
105
|
page-footer:
|
|
103
106
|
left: 'Proudly supported by <a href="https://www.posit.co/" class="no-icon"><img src="/assets/posit-logo-black.svg" alt="Posit" width="80" style="padding-left: 3px;vertical-align:text-top;"></a>'
|
|
@@ -194,6 +197,7 @@ quartodoc:
|
|
|
194
197
|
can split the data based on the validation results (with `get_sundered_data()`).
|
|
195
198
|
contents:
|
|
196
199
|
- name: Validate.interrogate
|
|
200
|
+
- name: Validate.set_tbl
|
|
197
201
|
- name: Validate.get_tabular_report
|
|
198
202
|
- name: Validate.get_step_report
|
|
199
203
|
- name: Validate.get_json_report
|
|
@@ -32,6 +32,15 @@ uv pip install pointblank
|
|
|
32
32
|
```bash
|
|
33
33
|
conda install -c conda-forge pointblank
|
|
34
34
|
```
|
|
35
|
+
|
|
36
|
+
## pixi
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# add pointblank to project
|
|
40
|
+
pixi init name-of-project
|
|
41
|
+
cd name-of-project
|
|
42
|
+
pixi add pointblank
|
|
43
|
+
```
|
|
35
44
|
:::
|
|
36
45
|
|
|
37
46
|
## DataFrame Libraries
|
|
@@ -122,6 +131,23 @@ conda install -c conda-forge pointblank-snowflake # Snowflake
|
|
|
122
131
|
# Example of installing multiple backends
|
|
123
132
|
conda install -c conda-forge pointblank-duckdb pointblank-postgres pointblank-sqlite
|
|
124
133
|
```
|
|
134
|
+
|
|
135
|
+
## pixi
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
pixi add pointblank-sqlite # SQLite
|
|
139
|
+
pixi add pointblank-duckdb # DuckDB
|
|
140
|
+
pixi add pointblank-postgres # PostgreSQL
|
|
141
|
+
pixi add pointblank-mysql # MySQL
|
|
142
|
+
pixi add pointblank-mssql # Microsoft SQL Server
|
|
143
|
+
pixi add pointblank-bigquery # BigQuery
|
|
144
|
+
pixi add pointblank-pyspark # Apache Spark
|
|
145
|
+
pixi add pointblank-databricks # Databricks
|
|
146
|
+
pixi add pointblank-snowflake # Snowflake
|
|
147
|
+
|
|
148
|
+
# Example of installing multiple backends
|
|
149
|
+
pixi add pointblank-duckdb pointblank-postgres pointblank-sqlite
|
|
150
|
+
```
|
|
125
151
|
:::
|
|
126
152
|
|
|
127
153
|
::: {.callout-note}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "MCP Quick Start"
|
|
3
|
+
jupyter: python3
|
|
4
|
+
toc-expand: 2
|
|
5
|
+
html-table-processing: none
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Getting Started in 5 Minutes
|
|
9
|
+
|
|
10
|
+
Transform your data validation workflow with conversational AI in VS Code or Positron IDE. Here are three simple steps to start validating data through conversation (and no complex configuration required).
|
|
11
|
+
|
|
12
|
+
### 1. Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pip install pointblank[mcp,pd,excel]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**What this installs:**
|
|
19
|
+
|
|
20
|
+
- `mcp` - Model Context Protocol server dependencies
|
|
21
|
+
- `pd` - pandas backend for data processing
|
|
22
|
+
- `excel` - Excel file support (`openpyxl`)
|
|
23
|
+
|
|
24
|
+
**Alternative installs based on your needs:**
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Minimal MCP server only
|
|
28
|
+
pip install pointblank[mcp]
|
|
29
|
+
|
|
30
|
+
# Add Polars for faster data processing
|
|
31
|
+
pip install pointblank[mcp,pd,pl]
|
|
32
|
+
|
|
33
|
+
# Full installation with all backends
|
|
34
|
+
pip install pointblank[mcp,pd,pl,excel]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 2. Configure Your IDE
|
|
38
|
+
|
|
39
|
+
**For VS Code**:
|
|
40
|
+
|
|
41
|
+
**Option 1: Workspace Configuration (Recommended for teams)**
|
|
42
|
+
|
|
43
|
+
1. Create a `.vscode/mcp.json` file in your project folder
|
|
44
|
+
2. Add this configuration:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"servers": {
|
|
49
|
+
"pointblank": {
|
|
50
|
+
"command": "python",
|
|
51
|
+
"args": ["-m", "pointblank_mcp_server.pointblank_server"]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Option 2: User Configuration (Personal use)**
|
|
58
|
+
|
|
59
|
+
1. Run command: `MCP: Open User Configuration` (Cmd/Ctrl + Shift + P)
|
|
60
|
+
2. Add the same JSON configuration above
|
|
61
|
+
|
|
62
|
+
> ⚠️ **Security Note**: Only add MCP servers from trusted sources. VS Code will ask you to confirm trust when starting the server for the first time.
|
|
63
|
+
|
|
64
|
+
**For Positron**:
|
|
65
|
+
|
|
66
|
+
1. Open Positron Settings
|
|
67
|
+
2. Navigate to MCP Server configuration
|
|
68
|
+
3. Add the configuration (format may vary)
|
|
69
|
+
|
|
70
|
+
> **Note**: If you don't see MCP settings, you may need to install an MCP extension first. Search for "MCP" in the Extensions marketplace.
|
|
71
|
+
|
|
72
|
+
### 3. Start Chatting
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
"Load my sales data and check its quality"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
That's basically how you get started.
|
|
79
|
+
|
|
80
|
+
## Essential Commands
|
|
81
|
+
|
|
82
|
+
Master these four command patterns and you'll be able to handle most data validation scenarios. Think of these as your fundamental vocabulary for talking to Pointblank.
|
|
83
|
+
|
|
84
|
+
### Load Data
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
"Load the file /path/to/data.csv"
|
|
88
|
+
"Open my customer data from Downloads"
|
|
89
|
+
"Load the Excel file with sales metrics"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Check Quality
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
"Analyze the data quality"
|
|
96
|
+
"What issues should I worry about?"
|
|
97
|
+
"Check for missing values and duplicates"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Create Data Validations
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
"Set up validation rules for this data"
|
|
104
|
+
"Check that all emails are valid"
|
|
105
|
+
"Make sure amounts are positive"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Run and Export
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
"Run the validation"
|
|
112
|
+
"Show me what failed"
|
|
113
|
+
"Export problem rows to CSV"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Top Three Use Cases
|
|
119
|
+
|
|
120
|
+
Once you have Pointblank set up, these scenarios show the most common and powerful ways to use natural language data validation. Each example demonstrates the conversational flow and immediate value you'll experience.
|
|
121
|
+
|
|
122
|
+
### 1. 📊 Quick Data Check
|
|
123
|
+
|
|
124
|
+
**When**: You get a new dataset
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
👤 "I just got customer_data.csv. Is it clean?"
|
|
128
|
+
🤖 "Loading... Found 15K customers. Issues:
|
|
129
|
+
- ✅ No duplicate IDs
|
|
130
|
+
- ⚠️ 2% missing phones
|
|
131
|
+
- ❌ 234 invalid emails
|
|
132
|
+
Want me to fix the emails?"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 2. 🔄 Daily Validation
|
|
136
|
+
|
|
137
|
+
**When**: Regular data quality checks
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
👤 "Run our standard sales validation"
|
|
141
|
+
🤖 "Running daily_sales template...
|
|
142
|
+
✅ All checks passed!
|
|
143
|
+
3,247 transactions validated
|
|
144
|
+
Ready for dashboard update"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 3. 🚨 Issue Investigation
|
|
148
|
+
|
|
149
|
+
**When**: Something looks wrong
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
👤 "Conversion rates jumped to 95%. That's impossible"
|
|
153
|
+
🤖 "Found the problem! Test data contamination:
|
|
154
|
+
- 1,247 test emails with 100% conversion
|
|
155
|
+
- Real rate is 4.2% (normal)
|
|
156
|
+
Should I clean the data?"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
These examples show how natural conversation can quickly identify and resolve data quality issues that might take hours to diagnose manually.
|
|
160
|
+
|
|
161
|
+
## Common Validation Rules
|
|
162
|
+
|
|
163
|
+
Understanding what validation rules to ask for will help you quickly build comprehensive data quality checks. These examples cover the most frequent validation scenarios across different industries and data types.
|
|
164
|
+
|
|
165
|
+
### Data Integrity
|
|
166
|
+
|
|
167
|
+
- "Check for duplicate IDs"
|
|
168
|
+
- "Ensure no missing required fields"
|
|
169
|
+
- "Validate that dates are reasonable"
|
|
170
|
+
|
|
171
|
+
### Business Logic
|
|
172
|
+
|
|
173
|
+
- "Amounts must be positive"
|
|
174
|
+
- "Email addresses must be valid format"
|
|
175
|
+
- "Status must be active, inactive, or pending"
|
|
176
|
+
|
|
177
|
+
### Cross-Field Validation
|
|
178
|
+
|
|
179
|
+
- "End date must be after start date"
|
|
180
|
+
- "Discount percentage between 0 and 100"
|
|
181
|
+
- "Age must match birth date"
|
|
182
|
+
|
|
183
|
+
These rule patterns can be combined and customized for your specific data and business requirements. The natural language interface makes it easy to express complex validation logic without learning technical syntax.
|
|
184
|
+
|
|
185
|
+
## Some Tips and Tricks
|
|
186
|
+
|
|
187
|
+
These recommendations will help you get more value from your Pointblank MCP server and avoid some common pitfalls.
|
|
188
|
+
|
|
189
|
+
### Talk Naturally
|
|
190
|
+
|
|
191
|
+
✅ **Good:** "Check if customer emails look valid"
|
|
192
|
+
|
|
193
|
+
❌ **Avoid:** "Execute col_vals_regex on email column"
|
|
194
|
+
|
|
195
|
+
### Provide Context
|
|
196
|
+
|
|
197
|
+
✅ **Good:** "This is for the board presentation"
|
|
198
|
+
|
|
199
|
+
❌ **Avoid:** Just asking for validation without explanation
|
|
200
|
+
|
|
201
|
+
### Build Incrementally
|
|
202
|
+
|
|
203
|
+
1. Start with data profiling
|
|
204
|
+
2. Add basic validation rules
|
|
205
|
+
3. Create templates for reuse
|
|
206
|
+
4. Set up automated checks
|
|
207
|
+
|
|
208
|
+
### Save Templates
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
"Save these rules as 'customer_validation'"
|
|
212
|
+
"Apply the financial_data template"
|
|
213
|
+
"Use our standard survey validation"
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
These practices help you build data quality workflows that scale with your needs while remaining accessible to those with varying technical backgrounds.
|
|
217
|
+
|
|
218
|
+
## File Support
|
|
219
|
+
|
|
220
|
+
Pointblank works with many major data file formats, making it easy to validate data regardless of how it's stored. This support means you can maintain consistent validation practices across your entire data ecosystem.
|
|
221
|
+
|
|
222
|
+
| Type | Extensions | Example |
|
|
223
|
+
|------|------------|---------|
|
|
224
|
+
| **CSV** | `.csv` | `sales_data.csv` |
|
|
225
|
+
| **Excel** | `.xlsx`, `.xls` | `monthly_report.xlsx` |
|
|
226
|
+
| **Parquet** | `.parquet` | `big_data.parquet` |
|
|
227
|
+
| **JSON** | `.json`, `.jsonl` | `api_response.json` |
|
|
228
|
+
|
|
229
|
+
The consistent natural language interface works the same regardless of file format, so you can focus on validation logic rather than technical details.
|
|
230
|
+
|
|
231
|
+
## Quick Troubleshooting
|
|
232
|
+
|
|
233
|
+
When you encounter issues, these quick fixes resolve the most common problems. Furthermore, the natural language interface means you can always ask for help and explanations.
|
|
234
|
+
|
|
235
|
+
| Problem | Quick Fix |
|
|
236
|
+
|---------|-----------|
|
|
237
|
+
| "File not found" | Use full file path: `/Users/name/data.csv` |
|
|
238
|
+
| Validation too slow | "Use a sample for testing" |
|
|
239
|
+
| Don't understand error | "Explain why validation failed" |
|
|
240
|
+
| Need help | "Show me examples of data quality checks" |
|
|
241
|
+
|
|
242
|
+
Remember, you can always ask the AI to explain what's happening or suggest solutions when you run into problems.
|
|
243
|
+
|
|
244
|
+
## Now You're Ready!
|
|
245
|
+
|
|
246
|
+
You now have everything needed to start validating data through conversation. The beauty of Pointblank's MCP server is that it grows with your expertise: start simple and gradually build more sophisticated validation workflows as you become comfortable with the interface.
|
|
247
|
+
|
|
248
|
+
Start with simple commands and build up to more complex validation workflows. The AI will guide you through the process and help you create robust data quality checks!
|
|
@@ -86,6 +86,20 @@ thresholds_proportional = pb.Thresholds(error=0.1)
|
|
|
86
86
|
With this configuration, the 'error' threshold would be triggered if 10% or more of the test units
|
|
87
87
|
fail.
|
|
88
88
|
|
|
89
|
+
### Boolean Shorthand
|
|
90
|
+
|
|
91
|
+
For cases where you want to allow exactly 1 failing test unit, you can use `True` as a convenient
|
|
92
|
+
shorthand:
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
# Critical threshold of exactly 1 failing test unit
|
|
96
|
+
thresholds_boolean = pb.Thresholds(critical=True)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
This is equivalent to setting `critical=1` but provides a more intuitive way to express "allow at
|
|
100
|
+
most one failure". This shorthand is particularly useful for strict validations where any failure
|
|
101
|
+
beyond a single edge case should trigger immediate attention.
|
|
102
|
+
|
|
89
103
|
## Understanding Severity Levels
|
|
90
104
|
|
|
91
105
|
The three threshold levels in Pointblank ('warning', 'error', and 'critical') are inspired by
|
|
@@ -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:
|
|
@@ -1388,6 +1388,17 @@ class RowsDistinct:
|
|
|
1388
1388
|
def get_test_results(self):
|
|
1389
1389
|
return self.test_unit_res
|
|
1390
1390
|
|
|
1391
|
+
def test(self):
|
|
1392
|
+
# Get the number of failing test units by counting instances of `False` in the `pb_is_good_`
|
|
1393
|
+
# column and then determine if the test passes overall by comparing the number of failing
|
|
1394
|
+
# test units to the threshold for failing test units
|
|
1395
|
+
|
|
1396
|
+
results_list = nw.from_native(self.test_unit_res)["pb_is_good_"].to_list()
|
|
1397
|
+
|
|
1398
|
+
return _threshold_check(
|
|
1399
|
+
failing_test_units=results_list.count(False), threshold=self.threshold
|
|
1400
|
+
)
|
|
1401
|
+
|
|
1391
1402
|
|
|
1392
1403
|
@dataclass
|
|
1393
1404
|
class RowsComplete:
|
|
@@ -2029,23 +2040,6 @@ def _column_has_null_values(table: FrameT, column: str) -> bool:
|
|
|
2029
2040
|
return True
|
|
2030
2041
|
|
|
2031
2042
|
|
|
2032
|
-
def _check_nulls_across_columns_ibis(table, columns_subset):
|
|
2033
|
-
# Get all column names from the table
|
|
2034
|
-
column_names = columns_subset if columns_subset else table.columns
|
|
2035
|
-
|
|
2036
|
-
# Build the expression by combining each column's isnull() with OR operations
|
|
2037
|
-
null_expr = functools.reduce(
|
|
2038
|
-
lambda acc, col: acc | table[col].isnull() if acc is not None else table[col].isnull(),
|
|
2039
|
-
column_names,
|
|
2040
|
-
None,
|
|
2041
|
-
)
|
|
2042
|
-
|
|
2043
|
-
# Add the expression as a new column to the table
|
|
2044
|
-
result = table.mutate(_any_is_null_=null_expr)
|
|
2045
|
-
|
|
2046
|
-
return result
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
2043
|
def _check_nulls_across_columns_nw(table, columns_subset):
|
|
2050
2044
|
# Get all column names from the table
|
|
2051
2045
|
column_names = columns_subset if columns_subset else table.columns
|