A CLI tool for working with data products and contracts
Project description
Turbine
Contract-driven data quality for data products — powered by ODCS and Soda Core.
How It Works
Contract ➜ Lint ➜ Check ➜ Score ➜ Flag ➜ Observe
- Contract — Define expectations in YAML using ODCS v3.1.0
- Lint — Validate contract schema before anything touches a database
- Check — Run quality checks against live data (SodaCL, SQL, Python, window, group)
- Score — Calculate a dimension-aware quality score
- Flag — Tag failing rows with bitmask flags for downstream filtering
- Observe — Export traces and metrics via OpenTelemetry
Features
- YAML contracts — ODCS v3.1.0 with Soda extensions for quality checks
- 13 check types — missing, duplicate, invalid, freshness, row_count, SQL, Python, typed multi-table Python, group, and window (zscore, spike, flatline)
- Schema drift detection — Compare live database schemas against your contract
- Dimension-aware scoring — Weight quality dimensions (completeness, accuracy, …) per check
- Row-level flagging — Per-cell Roaring-bitmap matrix tracks which rows failed which checks across runs
- Code generation — Scaffold SQLModel models and FastAPI routers from contracts
- Dependency management — Lockfile-based contract dependency resolution
- IDE support — Language server (LSP) with extensions for VSCode and JetBrains
Quick Start
Prerequisites: Python 3.13+ and uv
# Install with your database driver
uv add "turbine-data[snowflake]" # or: postgres, duckdb
# Initialize the recommended src/{project_name} layout
uv run turbine init --defaults
# Copy .env.example to .env and fill your warehouse credentials
cp .env.example .env
# Validate the starter Contract
uv run turbine lint src/{project_name}/contracts/example.yml
# Run quality checks against the starter Datasource named default
uv run turbine check --datasource default src/{project_name}/contracts/example.yml
Supported Databases
| Database | Install extra |
|---|---|
| PostgreSQL | turbine-data[postgres] |
| Snowflake | turbine-data[snowflake] |
| DuckDB | turbine-data[duckdb] |
Documentation
Full docs live in docs/ — covering getting started, guides, concepts, and CLI reference.
Contributing
See the contributing guide for dev setup, testing, and code style.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file turbine_data-0.1.2.tar.gz.
File metadata
- Download URL: turbine_data-0.1.2.tar.gz
- Upload date:
- Size: 8.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90aece709159d8c2387416905ec9ae73f65cc9f4fb75f97e682c03871e23d572
|
|
| MD5 |
befc9eea381973726efa9a87e2c44dd5
|
|
| BLAKE2b-256 |
7cc2c53fb18b1b89163bac5913e32b9794b8114027735e726324ff4fadfd800d
|
File details
Details for the file turbine_data-0.1.2-py3-none-any.whl.
File metadata
- Download URL: turbine_data-0.1.2-py3-none-any.whl
- Upload date:
- Size: 999.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a5aa97e81ee557cb06580cc25df9f361c2af0ca220410a88028c309af03b73a5
|
|
| MD5 |
4e785a0ebf06047de325088d3cb485f7
|
|
| BLAKE2b-256 |
59f723298d2d4d747b2347c2b9c92f54dff52e13260d0d214ad62ff75a9152bf
|