This release is a pre-release and may not be stable for production use.
Data Product SDK
Turn an ODCS data contract plus a set of pure transforms into a running, quality-gated, multi-target data product. One codebase runs on DuckDB locally and Databricks/Spark in production, behind a ports/adapters seam, with a Write-Audit-Publish quality gate derived entirely from the contract.
Proprietary software. This package is not open source. Installing it grants you the right to use it; it does not grant the right to redistribute it or to create derivative works. See the
LICENSEfile inside the distribution for the full terms.
Install
pip install dataproduct-sdk # DuckDB target (default)
pip install "dataproduct-sdk[databricks]" # + the Databricks/Spark production target
pip install "dataproduct-sdk[api]" # + serve a published port as a REST endpoint
Requires Python 3.12+.
Scaffold a product
dataproduct init # interview -> a complete, green product repo
cd <your-product>
dataproduct check # the fitness-function battery
dataproduct run # transform -> audit -> publish
What a product looks like
# product.py
from dataproduct import Product
import transforms as T
product = Product(name="orders", domain="sales")
@product.table("orders")
def orders(src):
return T.build_orders(src.read("orders_raw"))
@product.view("public_orders", reads=["orders"])
def public_orders(orders):
return T.build_public_orders(orders)
product.enable_observability()
You write three things: transformation logic (pure ibis expression-to-expression functions),
declared constraints (an ODCS contract), and topology (which output ports exist and what
feeds them). The SDK supplies everything else.
What the SDK does for you
| Contract-derived quality | Row and dataset rules are projected from the ODCS contract — no second place to keep them in sync. Each rule maps to an action: warn, quarantine the row, or hard-fail the dataset. |
| Write-Audit-Publish | Every port is staged, audited, and only then published — by shape. Tables get an atomic swap, views are defined only after the audit passes, APIs get a black-box audit. A failed gate leaves the last good data serving. |
| Forensic quarantine | Rejected rows are kept with the rule that rejected them, and completeness is accounted for so nothing silently disappears. |
| Portability | Core and transforms are written against the ibis expression API only, so the identical pipeline and the identical gate run on DuckDB and on Databricks. Enforced, not just intended. |
| Fitness functions | dataproduct check runs a battery of architectural checks — transform purity, module boundaries, WAP coverage, contract lint, schema conformance, placement drift. |
| Schema evolution | dataproduct evolve plans a contract change and gates on plan freshness. |
| Offline introspection | dataproduct explain projects what a run would do without touching a warehouse; dataproduct run --dry-run provably writes nothing. |
CLI
dataproduct init | run | serve | audit | docs | check
quarantine | observability | evolve | generate
explain | contract draft
Add --format json to explain and run --dry-run for machine-readable output.
Extending it
Targets are resolved through the dataproduct.adapters entry-point group, so a new backend is a
separate distribution — no fork and no change to this package. The core depends only on the
Protocols in dataproduct.ports.
Licence and support
Proprietary — copyright (c) 2026 Leandro Kellermann de Oliveira, all rights reserved. For redistribution, OEM bundling, a source licence, or support: lkellermann@leandroasaservice.com
Metadata
Release files for dataproduct-sdk 0.1.0rc1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dataproduct_sdk-0.1.0rc1-py3-none-any.whl | Python 3 | none | any | Details |
Release files / dataproduct_sdk-0.1.0rc1-py3-none-any.whl
| Download URL | dataproduct_sdk-0.1.0rc1-py3-none-any.whl |
|---|---|
| Size | 147.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0d8f250cad5fbd9cba2ed44aa20daf5a3d0549e16ee36d1158eb425162e9df91
|
|
BLAKE2b-256 checksum How to use checksums |
1387b8eafff9e2b1e6e458eadd423ed23a73b4af195f4d19efdf60f73266fd84
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency log