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.
@@ -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
- return self.x.mutate(pb_is_good_=self.x[self.column].isin(self.set))
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: list[float | int],
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
- _check_set_types(set=set)
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.6
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 modern data validation framework for Python that helps you trust your data with confidence. It provides a fluent, expressive API to validate your data against a wide range of constraints and presents results in beautiful, interactive reports.
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=H9gSmtV7QiHMOyHNMbS2MvgG5YX4kexaZ7Mwcb2P9tE,80799
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=y6fEe8f9idql9lGQrC8AhIJyUzF3_CBsExEpyjjMi7E,512522
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.6.dist-info/licenses/LICENSE,sha256=apLF-HWPNU7pT5bmf5KmZpD5Cklpy2u-BN_0xBoRMLY,1081
28
- pointblank-0.8.6.dist-info/METADATA,sha256=aDXpDvJMC8tWYgFNxmcQogOkcRWBFN21c14adAVCs78,13977
29
- pointblank-0.8.6.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
30
- pointblank-0.8.6.dist-info/top_level.txt,sha256=-wHrS1SvV8-nhvc3w-PPYs1C1WtEc1pK-eGjubbCCKc,11
31
- pointblank-0.8.6.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (79.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5