Contracts API¶
Data quality contracts for validation.
Creating Contracts¶
contract¶
Create a new contract builder.
Returns: ContractBuilder with chainable methods.
Example:
Contract Methods¶
expect_unique¶
Expect no duplicate values in column.
Example:
expect_no_nulls¶
Expect no null values.
Example:
expect_retention¶
Expect minimum row retention rate.
Parameters:
| Parameter | Type | Description |
|---|---|---|
min_rate |
float |
Minimum retention (0-1) |
Example:
expect_no_drops¶
Expect no rows were dropped.
Example:
expect_columns¶
Expect columns to exist.
Example:
expect_dtypes¶
Expect column data types.
Example:
expect_range¶
.expect_range(
column: str,
min_val: float | None = None,
max_val: float | None = None,
) -> ContractBuilder
Expect values within range.
Example:
expect_values¶
Expect values from allowed set.
Example:
check¶
Execute the contract against a DataFrame.
Returns: ContractResult
| Attribute | Type | Description |
|---|---|---|
.passed |
bool |
All expectations met |
.expectations |
list |
All expectations |
.failures |
list |
Failed expectations |
ContractResult Methods¶
raise_if_failed¶
Raise ContractViolationError if contract failed.
Example:
result = tp.contract().expect_unique("id").check(df)
result.raise_if_failed() # Raises if duplicates found
Complete Example¶
import tracepipe as tp
tp.enable(mode="ci")
df = process_pipeline(raw_data)
# Define and check contract
result = (tp.contract()
# Schema
.expect_columns(["id", "email", "amount"])
.expect_dtypes({"amount": "float64"})
# Quality
.expect_unique("id")
.expect_no_nulls(["id", "email"])
.expect_range("amount", min_val=0)
.expect_values("status", ["pending", "complete", "failed"])
# Pipeline health
.expect_retention(min_rate=0.8)
.check(df))
# Handle result
if result.passed:
print("✓ All contracts passed")
else:
print("✗ Contract violations:")
for failure in result.failures:
print(f" - {failure}")
result.raise_if_failed()