pointblank 0.8.6__py3-none-any.whl → 0.8.7__py3-none-any.whl
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/_interrogation.py +10 -4
- pointblank/validate.py +10 -2
- {pointblank-0.8.6.dist-info → pointblank-0.8.7.dist-info}/METADATA +15 -4
- {pointblank-0.8.6.dist-info → pointblank-0.8.7.dist-info}/RECORD +7 -7
- {pointblank-0.8.6.dist-info → pointblank-0.8.7.dist-info}/WHEEL +1 -1
- {pointblank-0.8.6.dist-info → pointblank-0.8.7.dist-info}/licenses/LICENSE +0 -0
- {pointblank-0.8.6.dist-info → pointblank-0.8.7.dist-info}/top_level.txt +0 -0
pointblank/_interrogation.py
CHANGED
|
@@ -1089,14 +1089,20 @@ class Interrogator:
|
|
|
1089
1089
|
def isin(self) -> FrameT | Any:
|
|
1090
1090
|
# Ibis backends ---------------------------------------------
|
|
1091
1091
|
|
|
1092
|
+
can_be_null: bool = None in self.set
|
|
1093
|
+
|
|
1092
1094
|
if self.tbl_type in IBIS_BACKENDS:
|
|
1093
|
-
|
|
1095
|
+
base_expr = self.x[self.column].isin(self.set)
|
|
1096
|
+
if can_be_null:
|
|
1097
|
+
base_expr = base_expr | self.x[self.column].isnull()
|
|
1098
|
+
return self.x.mutate(pb_is_good_=base_expr)
|
|
1094
1099
|
|
|
1095
1100
|
# Local backends (Narwhals) ---------------------------------
|
|
1101
|
+
base_expr: nw.Expr = nw.col(self.column).is_in(self.set)
|
|
1102
|
+
if can_be_null:
|
|
1103
|
+
base_expr = base_expr | nw.col(self.column).is_null()
|
|
1096
1104
|
|
|
1097
|
-
return self.x.with_columns(
|
|
1098
|
-
pb_is_good_=nw.col(self.column).is_in(self.set),
|
|
1099
|
-
).to_native()
|
|
1105
|
+
return self.x.with_columns(pb_is_good_=base_expr).to_native()
|
|
1100
1106
|
|
|
1101
1107
|
def notin(self) -> FrameT | Any:
|
|
1102
1108
|
# Ibis backends ---------------------------------------------
|
pointblank/validate.py
CHANGED
|
@@ -87,6 +87,8 @@ from pointblank.thresholds import (
|
|
|
87
87
|
)
|
|
88
88
|
|
|
89
89
|
if TYPE_CHECKING:
|
|
90
|
+
from collections.abc import Collection
|
|
91
|
+
|
|
90
92
|
from pointblank._typing import AbsoluteBounds, Tolerance
|
|
91
93
|
|
|
92
94
|
__all__ = [
|
|
@@ -4311,7 +4313,7 @@ class Validate:
|
|
|
4311
4313
|
def col_vals_in_set(
|
|
4312
4314
|
self,
|
|
4313
4315
|
columns: str | list[str] | Column | ColumnSelector | ColumnSelectorNarwhals,
|
|
4314
|
-
set:
|
|
4316
|
+
set: Collection[Any],
|
|
4315
4317
|
pre: Callable | None = None,
|
|
4316
4318
|
thresholds: int | float | bool | tuple | dict | Thresholds = None,
|
|
4317
4319
|
actions: Actions | None = None,
|
|
@@ -4471,7 +4473,13 @@ class Validate:
|
|
|
4471
4473
|
assertion_type = _get_fn_name()
|
|
4472
4474
|
|
|
4473
4475
|
_check_column(column=columns)
|
|
4474
|
-
|
|
4476
|
+
|
|
4477
|
+
for val in set:
|
|
4478
|
+
if val is None:
|
|
4479
|
+
continue
|
|
4480
|
+
if not isinstance(val, (float, int, str)):
|
|
4481
|
+
raise ValueError("`set=` must be a list of floats, integers, or strings.")
|
|
4482
|
+
|
|
4475
4483
|
_check_pre(pre=pre)
|
|
4476
4484
|
_check_thresholds(thresholds=thresholds)
|
|
4477
4485
|
_check_boolean_input(param=active, param_name="active")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pointblank
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.7
|
|
4
4
|
Summary: Find out if your data is what you think it is.
|
|
5
5
|
Author-email: Richard Iannone <riannone@me.com>
|
|
6
6
|
License: MIT License
|
|
@@ -102,9 +102,18 @@ _Data validation made beautiful and powerful_
|
|
|
102
102
|
|
|
103
103
|
</div>
|
|
104
104
|
|
|
105
|
+
<div align="right">
|
|
106
|
+
<a href="translations/README.fr.md">Français</a> |
|
|
107
|
+
<a href="translations/README.de.md">Deutsch</a> |
|
|
108
|
+
<a href="translations/README.it.md">Italiano</a> |
|
|
109
|
+
<a href="translations/README.es.md">Español</a> |
|
|
110
|
+
<a href="translations/README.pt-BR.md">Português</a> |
|
|
111
|
+
<a href="translations/README.zh-CN.md">简体中文</a>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
105
114
|
## What is Pointblank?
|
|
106
115
|
|
|
107
|
-
Pointblank is a
|
|
116
|
+
Pointblank is a powerful, yet elegant data validation framework for Python that transforms how you ensure data quality. With its intuitive, chainable API, you can quickly validate your data against comprehensive quality checks and visualize results through stunning, interactive reports that make data issues immediately actionable.
|
|
108
117
|
|
|
109
118
|
Whether you're a data scientist, data engineer, or analyst, Pointblank helps you catch data quality issues before they impact your analyses or downstream systems.
|
|
110
119
|
|
|
@@ -134,9 +143,9 @@ validation
|
|
|
134
143
|
|
|
135
144
|
<br>
|
|
136
145
|
|
|
137
|
-
Why Choose Pointblank?
|
|
146
|
+
## Why Choose Pointblank?
|
|
138
147
|
|
|
139
|
-
- **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, and more!
|
|
148
|
+
- **Works with your existing stack** - Seamlessly integrates with Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, PySpark, Snowflake, and more!
|
|
140
149
|
- **Beautiful, interactive reports** - Crystal-clear validation results that highlight issues and help communicate data quality
|
|
141
150
|
- **Composable validation pipeline** - Chain validation steps into a complete data quality workflow
|
|
142
151
|
- **Threshold-based alerts** - Set 'warning', 'error', and 'critical' thresholds with custom actions
|
|
@@ -213,6 +222,8 @@ validation.get_step_report(i=3).show("browser") # Get failing records from step
|
|
|
213
222
|
<img src="https://posit-dev.github.io/pointblank/assets/pointblank-step-report.png" width="800px">
|
|
214
223
|
</div>
|
|
215
224
|
|
|
225
|
+
<br>
|
|
226
|
+
|
|
216
227
|
## Features That Set Pointblank Apart
|
|
217
228
|
|
|
218
229
|
- **Complete validation workflow** - From data access to validation to reporting in a single pipeline
|
|
@@ -2,7 +2,7 @@ pointblank/__init__.py,sha256=uHrX-ARZOhvWogXXqKV65RO2DXdYLZNCD1oNcm8hE6o,1585
|
|
|
2
2
|
pointblank/_constants.py,sha256=1CkIbDutX3oSo2iVjyGthN6GipE0NIxB6dDlLs71PWo,75793
|
|
3
3
|
pointblank/_constants_docs.py,sha256=JBmtt16zTYQ-zaM4ElLExtKs-dKlnN553Ys2ML1Y1C8,2099
|
|
4
4
|
pointblank/_constants_translations.py,sha256=QfOmVESwWFokWXpgLkEFHGik8o1EUBhIXYtaEqtGGNg,166575
|
|
5
|
-
pointblank/_interrogation.py,sha256=
|
|
5
|
+
pointblank/_interrogation.py,sha256=SkW0DUoCafQbpPToVseUPLzaYXXTTzN9y6mbzjbRmNw,81082
|
|
6
6
|
pointblank/_typing.py,sha256=YQ6Bt-j-W6Cg91qXHHDzBM-ptc-IEvhMg6T5ugWnGwM,306
|
|
7
7
|
pointblank/_utils.py,sha256=0V-LxUjSjGfcZV2_IH-5KPikYiVWdt4QSMQDioyZoZc,24681
|
|
8
8
|
pointblank/_utils_check_args.py,sha256=rFEc1nbCN8ftsQQWVjCNWmQ2QmUDxkfgmoJclrZeTLs,5489
|
|
@@ -15,7 +15,7 @@ pointblank/draft.py,sha256=lIbSlY9Avi1GbRvJhqR-69sGWCfD11im3Go20XsX8L0,15783
|
|
|
15
15
|
pointblank/schema.py,sha256=gzUCmtccO2v15MH2bo9uHUYjkKEEne1okQucxcH39pc,44291
|
|
16
16
|
pointblank/tf.py,sha256=8o_8m4i01teulEe3-YYMotSNf3tImjBMInsvdjSAO5Q,8844
|
|
17
17
|
pointblank/thresholds.py,sha256=C8_Rn2z3MVFu4UH5eaGRd7DkW3slgkWB3Hhim2h5CfU,25340
|
|
18
|
-
pointblank/validate.py,sha256=
|
|
18
|
+
pointblank/validate.py,sha256=bJ052P8wJtytYthDbsdpEIBZ3i4TEDnoqKIPvTyYZRc,512755
|
|
19
19
|
pointblank/data/api-docs.txt,sha256=3HZprV731qL-jNJ4rnntq_Nymc819ZSLM4fGpsjNfLc,408766
|
|
20
20
|
pointblank/data/game_revenue-duckdb.zip,sha256=tKIVx48OGLYGsQPS3h5AjA2Nyq_rfEpLCjBiFUWhagU,35880
|
|
21
21
|
pointblank/data/game_revenue.zip,sha256=7c9EvHLyi93CHUd4p3dM4CZ-GucFCtXKSPxgLojL32U,33749
|
|
@@ -24,8 +24,8 @@ pointblank/data/nycflights.zip,sha256=yVjbUaKUz2LydSdF9cABuir0VReHBBgV7shiNWSd0m
|
|
|
24
24
|
pointblank/data/polars-api-docs.txt,sha256=KGcS-BOtUs9zgpkWfXD-GFdFh4O_zjdkpX7msHjztLg,198045
|
|
25
25
|
pointblank/data/small_table-duckdb.zip,sha256=BhTaZ2CRS4-9Z1uVhOU6HggvW3XCar7etMznfENIcOc,2028
|
|
26
26
|
pointblank/data/small_table.zip,sha256=lmFb90Nb-v5X559Ikjg31YLAXuRyMkD9yLRElkXPMzQ,472
|
|
27
|
-
pointblank-0.8.
|
|
28
|
-
pointblank-0.8.
|
|
29
|
-
pointblank-0.8.
|
|
30
|
-
pointblank-0.8.
|
|
31
|
-
pointblank-0.8.
|
|
27
|
+
pointblank-0.8.7.dist-info/licenses/LICENSE,sha256=apLF-HWPNU7pT5bmf5KmZpD5Cklpy2u-BN_0xBoRMLY,1081
|
|
28
|
+
pointblank-0.8.7.dist-info/METADATA,sha256=XNa32twGPDaxMVg8tkuHIjIZIWELAVacdJ2n3wZDNhE,14442
|
|
29
|
+
pointblank-0.8.7.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
|
|
30
|
+
pointblank-0.8.7.dist-info/top_level.txt,sha256=-wHrS1SvV8-nhvc3w-PPYs1C1WtEc1pK-eGjubbCCKc,11
|
|
31
|
+
pointblank-0.8.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|