Metadata-Version: 2.4
Name: votinvv-datapulse
Version: 0.0.1
Summary: DataPulse SDK — decorators and runtime context for spec authors
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/votinvv/datapulse
Project-URL: Repository, https://github.com/votinvv/datapulse
Project-URL: Issues, https://github.com/votinvv/datapulse/issues
Keywords: data-engineering,pipelines,scd2,postgresql,etl
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: postgres
Requires-Dist: psycopg[binary]>=3.2; extra == "postgres"
Provides-Extra: oracle
Requires-Dist: oracledb>=3.0; extra == "oracle"
Dynamic: license-file

# DataPulse SDK

The developer-facing library of [DataPulse](https://github.com/votinvv/datapulse) —
declarative data pipelines over PostgreSQL with SCD2 versioning, parallel
builds and a full audit trail.

Spec authors install this package for IDE autocompletion and local runs:

```
pip install votinvv-datapulse
```

The distribution is named `votinvv-datapulse`; the import package is `datapulse`:

```python
from datapulse import spec, attr, mode, Self
from datapulse.types import bigint, text, timestamptz


@spec(
    dataset="raw.customer",
    num=1,
    descr="Customers",
    attrs=[
        attr("customer_id", bigint, descr="Customer id", is_primary_key=True),
        attr("full_name", text, descr="Full name"),
    ],
    modes=[mode("initial", "init", True), mode("increment", "incr", True)],
)
def build(param):
    with Self() as db:
        db.execute("insert into raw.customer_1_$ (...) select ...")
```

The SDK is pure stdlib — database drivers import lazily. To execute mappings
locally (e.g. via `datapulse.dev.run_local`), pull the drivers you need:

```
pip install "votinvv-datapulse[postgres]"   # psycopg
pip install "votinvv-datapulse[oracle]"     # oracledb
```

The server side — engine, HTTP API and UI — ships as the
[`votinvv/datapulse`](https://hub.docker.com/r/votinvv/datapulse) Docker
image; see the [project README](https://github.com/votinvv/datapulse) for the
full picture.

## License

[Apache-2.0](https://github.com/votinvv/datapulse/blob/main/LICENSE)
