Metadata-Version: 2.4
Name: culvert
Version: 0.1.0
Summary: Cloud-agnostic, polyglot data-pipeline framework: one contract set, adapters per cloud. Python side of Culvert (Java twin on Maven Central: com.enrichmeai.culvert).
Project-URL: Homepage, https://github.com/enrichmeai/culvert
Project-URL: Repository, https://github.com/enrichmeai/culvert
Project-URL: Issues, https://github.com/enrichmeai/culvert/issues
Author: Joseph Aruja
License: MIT
Keywords: airflow,bigquery,cloud-agnostic,contracts,data-pipeline,dbt,framework,gcp
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Python: >=3.10
Requires-Dist: typing-extensions>=4.7
Provides-Extra: all
Requires-Dist: dbt-bigquery>=1.5.0; extra == 'all'
Requires-Dist: google-cloud-bigquery>=3.11.0; extra == 'all'
Requires-Dist: google-cloud-datacatalog>=3.14.0; extra == 'all'
Requires-Dist: google-cloud-monitoring>=2.14.0; extra == 'all'
Requires-Dist: google-cloud-pubsub>=2.18.0; extra == 'all'
Requires-Dist: google-cloud-secret-manager>=2.16.0; extra == 'all'
Requires-Dist: google-cloud-storage>=2.10.0; extra == 'all'
Requires-Dist: opentelemetry-api>=1.20.0; extra == 'all'
Requires-Dist: pyyaml>=6.0; extra == 'all'
Provides-Extra: contract-tests
Requires-Dist: pytest>=7.4; extra == 'contract-tests'
Provides-Extra: gcp
Requires-Dist: google-cloud-bigquery>=3.11.0; extra == 'gcp'
Requires-Dist: google-cloud-datacatalog>=3.14.0; extra == 'gcp'
Requires-Dist: google-cloud-monitoring>=2.14.0; extra == 'gcp'
Requires-Dist: google-cloud-pubsub>=2.18.0; extra == 'gcp'
Requires-Dist: google-cloud-secret-manager>=2.16.0; extra == 'gcp'
Requires-Dist: google-cloud-storage>=2.10.0; extra == 'gcp'
Requires-Dist: opentelemetry-api>=1.20.0; extra == 'gcp'
Provides-Extra: orchestration
Requires-Dist: google-cloud-bigquery>=3.11.0; extra == 'orchestration'
Requires-Dist: google-cloud-pubsub>=2.18.0; extra == 'orchestration'
Requires-Dist: google-cloud-storage>=2.10.0; extra == 'orchestration'
Requires-Dist: pyyaml>=6.0; extra == 'orchestration'
Provides-Extra: tester
Requires-Dist: apache-beam[gcp]==2.56.0; extra == 'tester'
Requires-Dist: google-cloud-bigquery>=3.11.0; extra == 'tester'
Requires-Dist: google-cloud-pubsub>=2.18.0; extra == 'tester'
Requires-Dist: google-cloud-storage>=2.10.0; extra == 'tester'
Requires-Dist: pytest-cov>=4.0.0; extra == 'tester'
Requires-Dist: pytest-mock>=3.10.0; extra == 'tester'
Requires-Dist: pytest>=7.0.0; extra == 'tester'
Provides-Extra: transform
Requires-Dist: dbt-bigquery>=1.5.0; extra == 'transform'
Description-Content-Type: text/markdown

# Culvert

**A cloud-agnostic, polyglot data-pipeline framework.** One contract set —
`Source`, `Sink`, `Transform`, `Pipeline`, `RuntimeContext`, `BlobStore`,
`Warehouse`, `JobControlRepository`, and friends — realised in **Java and
Python**, with cloud specifics behind adapters. Define the pipeline once
against contracts; point it at an emulator on your laptop, a dev project, or
production by wiring, not rewriting.

- **Contract-driven** — the [language-neutral spec](https://github.com/enrichmeai/culvert/blob/main/docs/CONTRACT.md)
  is the portability boundary. Business logic depends only on contracts.
- **Two clouds today** — GCP is the first full implementation; AWS is a real
  (Java) adapter family with the same pipeline proven on both. Azure is on the
  roadmap.
- **No application framework in the core** — plain Python Protocols +
  entry-point auto-discovery; composes into Beam pipelines, Airflow DAGs, or a
  script on your laptop.
- **Local-first** — the whole stack runs against emulators with zero cloud
  account; cloud is where you prove and ship, not where you develop.

## Install

```bash
pip install culvert                 # core contracts only (no cloud SDKs)
pip install culvert[gcp]            # + BigQuery, GCS, Pub/Sub, Secret Manager, observability
pip install culvert[orchestration]  # + Airflow-side DAG factory, operators, sensors
pip install culvert[transform]      # + dbt integration
pip install culvert[all]
```

Python ≥ 3.10. For 0.1.0 the import packages keep their library names — the
contracts live in `data_pipeline_core`:

```python
from data_pipeline_core import autoconfig

config = autoconfig.discover()          # entry-point adapter discovery
blob_store = config.blob_store()        # GcsBlobStore if culvert[gcp] installed
```

The Java twin ships as `com.enrichmeai.culvert:*` on Maven Central — same
contracts, Java owns the Beam/Dataflow execution layer; Python owns the
Airflow runtime and dbt packaging.

## Status

`0.1.0` — first public release. Built and validated against a real GCP
project (Cloud Run, BigQuery, Pub/Sub, event-driven end-to-end) before
publishing. GCP adapters are production-shaped; the AWS family is Java-side;
Azure is a roadmap skeleton. Honest limitations are documented per adapter in
the source.

Docs, architecture, worked example deployments, and the engineering story:
**https://github.com/enrichmeai/culvert**

MIT licensed.
