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 + quarantine — Bitmask flags on individual rows; isolate bad data
- 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.12+ and uv
# Install with your database driver
uv add "enexis-turbine[postgres]" # or: snowflake, clickhouse, duckdb
# Scaffold a project
uv run turbine dev init
# Validate your contract
uv run turbine lint
# Run quality checks
uv run turbine check
# Calculate quality score
uv run turbine score
Supported Databases
| Database | Install extra |
|---|---|
| PostgreSQL | enexis-turbine[postgres] |
| Snowflake | enexis-turbine[snowflake] |
| ClickHouse | enexis-turbine[clickhouse] |
| DuckDB | enexis-turbine[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
Release history Release notifications | RSS feed
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 enexis_turbine-1.3.5.tar.gz.
File metadata
- Download URL: enexis_turbine-1.3.5.tar.gz
- Upload date:
- Size: 10.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b3608e30154cd373b9b2efccbb835499a944bfa84b972a28b950f02e451f9d3
|
|
| MD5 |
03764b8d19c3d259a80c5cf300fb2fa3
|
|
| BLAKE2b-256 |
50f17f69b83e0935e8fc09e0f98c8791ba060799556d926091e3897c8b0d388c
|
File details
Details for the file enexis_turbine-1.3.5-py3-none-any.whl.
File metadata
- Download URL: enexis_turbine-1.3.5-py3-none-any.whl
- Upload date:
- Size: 261.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a6fb1de42cfcb64fa70846836fdcf207b2edaa6ddeaf526b4677149859b55d4
|
|
| MD5 |
5e83e6be4d38c3ac23954e136cfe97d9
|
|
| BLAKE2b-256 |
1a3df7e9a12be509a8a572728029d749fa4d5048dde02e579cbd544be27a3e24
|