Skip to main content

A CLI tool for working with data products and contracts

Project description

Turbine

Contract-driven data quality for data products.

PyPI Python ODCS

Turbine turns a YAML data contract into running quality checks. You declare a table's schema, ownership, freshness expectations, and validity rules in one file; Turbine validates the YAML offline, checks the live database matches it, runs every quality check against the data, scores the result, and exposes everything over a REST API and dashboard.

It uses ODCS v3.1.0, so contracts round-trip with the rest of the data ecosystem.

Example

A contract is a single YAML file:

kind: DataContract
apiVersion: v3.1.0
id: orders
domain: sales
version: "1.0.0"
status: active

slaProperties:
  - property: latency
    element: public.orders.created_at
    value: 24
    unit: hour

schema:
  - name: public.orders
    properties:
      - name: order_id
        logicalType: integer
        required: true
        primaryKey: true
      - name: amount
        logicalType: number
        required: true
      - name: status
        logicalType: string
        required: true
      - name: created_at
        logicalType: timestamp
        required: true

Run every check on it:

turbine check --datasource default orders.yml

You get a per-check verdict, a quality score per dimension (completeness, accuracy, consistency, timeliness, validity), and the failing rows persisted for follow-up.

Installation

uv add "turbine-data[duckdb]"        # local files, zero credentials
uv add "turbine-data[postgres]"      # PostgreSQL
uv add "turbine-data[snowflake]"     # Snowflake
uv add "turbine-data[all]"           # every driver + dashboard

Requires Python 3.12 or newer. The PyPI package is turbine-data; the CLI is turbine.

Quick start

# 1. Scaffold a project
uv run turbine init --database duckdb

# 2. Configure credentials
cp .env.example .env

# 3. Validate and run
uv run turbine lint  src/<project>/contracts/example.yml
uv run turbine check src/<project>/contracts/example.yml --datasource default

turbine init --demo scaffolds a fully populated example project with real data and multiple contracts.

Features

  • YAML contracts in ODCS v3.1.0 — schema, ownership, SLAs, quality checks in one file
  • Quite a few check types — missing, duplicate, invalid values, freshness, row count, custom SQL, Python, group, and window checks (z-score, spike, flatline)
  • Schema drift detection — compare your contract to the live database before running a single check
  • Dimension-aware scoring — every check is weighted by its quality dimension (completeness, accuracy, consistency, timeliness, validity)
  • Row-level flagging — failing rows are persisted in a per-cell bitmap matrix; query which rows failed which checks across runs
  • Management API + dashboardturbine serve exposes runs, results, scores, and flagged rows over HTTP
  • Code generation — scaffold SQLModel models and FastAPI routers from contracts
  • IDE support — full LSP with VS Code and soon JetBrains extensions

Management API

turbine serve --datasource default --port 8000

Endpoints under /api/v1/manage/: /contracts, /checks/run, /runs/{id}, /runs/{id}/results, /flagged-rows/{table}. Browse /api/v1/manage/docs for the interactive OpenAPI page.

turbine dashboard --port 5173

Renders the same data as charts, run history, and a flagged-rows explorer.

CLI

turbine lint     <contract.yml>                     # validate the YAML offline
turbine validate <contract.yml> --datasource <name> # compare to live database schema
turbine check    <contract.yml> --datasource <name> # lint + validate + run every check
turbine status                                      # project health, flagged-row counts
turbine bump                                        # update contract versions
turbine seed     --datasource <name>                # fill a table with sample rows
turbine new      contract|datasource|check          # scaffold a new resource
turbine generate                                    # SQLModel + FastAPI from contracts

Ecosystem

Orchestrators. Run Turbine Check Runs as native steps in your workflow tool:

  • dagster-turbine — Check Definitions become Dagster AssetCheckSpecs. Partitioned assets scope each Check Run to their partition window.
  • airflow-turbineTurbineOperator with a deferred trigger; tasks wait on a Check Run without blocking a worker.
  • turbine-client — sync + async Python client. Use directly when you need glue beyond the integrations above.

Editors.

  • VS Code extension — diagnostics, autocomplete, quick fixes, run-from-editor. Install Turbine from the Marketplace.
  • JetBrains plugin — same surface for IntelliJ, PyCharm, DataGrip.

Documentation

Full documentation lives under docs/user/docs/:

Contributing

See docs/contributing/ for dev setup, test layout, and code conventions.

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

turbine_data-0.5.12.tar.gz (6.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

turbine_data-0.5.12-py3-none-any.whl (1.1 MB view details)

Uploaded Python 3

File details

Details for the file turbine_data-0.5.12.tar.gz.

File metadata

  • Download URL: turbine_data-0.5.12.tar.gz
  • Upload date:
  • Size: 6.4 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

Hashes for turbine_data-0.5.12.tar.gz
Algorithm Hash digest
SHA256 ef7618375b0ba8a37a78b1ba5e6b039e1909862c8d9cd7d118ee1eb9df0b8e14
MD5 dd9aaba58c714f1448d35f12c77664af
BLAKE2b-256 61a8434b1870bc507c169c82d11605e7650e1dea258febd9fcb51759428b4a96

See more details on using hashes here.

File details

Details for the file turbine_data-0.5.12-py3-none-any.whl.

File metadata

  • Download URL: turbine_data-0.5.12-py3-none-any.whl
  • Upload date:
  • Size: 1.1 MB
  • 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

Hashes for turbine_data-0.5.12-py3-none-any.whl
Algorithm Hash digest
SHA256 f2d00ea18a66cbc75c5f4d4959f3866d411c7ba65f05e738d4a11b4cb0b781b8
MD5 f4d969f719c44fbb0c26b289a576d4d5
BLAKE2b-256 918094c70d2687a90d0cae3ff6d410909a23f5b3c6fab28e2ccf35ba1b902b5b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page