Metadata-Version: 2.4
Name: bollhav
Version: 3.0.12
Summary: Standardizing models and pipes for data pipelines
Author-email: Erik Bremstedt <erik@bremstedtanalytics.se>
License-Expression: GPL-3.0-or-later
Project-URL: Homepage, https://github.com/ebremstedt/bollhav
Project-URL: Issues, https://github.com/ebremstedt/bollhav/issues
Requires-Python: >=3.11.0
Description-Content-Type: text/markdown
Requires-Dist: python-icron>=3.0.1
Requires-Dist: polars>=0.20.0
Requires-Dist: psycopg[binary]>=3.3.3
Requires-Dist: roskarl>=3.1.31
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: time-machine; extra == "dev"
Requires-Dist: pyright; extra == "dev"
Provides-Extra: tui
Requires-Dist: textual>=0.50; extra == "tui"
Provides-Extra: mssql
Requires-Dist: pyodbc>=5; extra == "mssql"

<p align="center">
  <img src="bollhav_logo_large.png" alt="bollhav" width="300">
</p>

<p align="center">
  <strong>Bollhav</strong><br>
  a Python framework that standardizes pipeline code
</p>

<p align="center">
  <a href="TODO-docs-url">Docs</a> ·
  <a href="TODO-learn-url">Learn</a> ·
  <a href="TODO-lab-url">Lab</a>
</p>

The idea is a clean separation: a **Model** is a pure data object that declares
what your data looks like and where it goes, and it ✨deliberately✨ contains
**no execution logic**. The actual work lives in a separate **execute** function
that takes the model as a parameter.

Orchestrate the models with a classical tool like **Airflow**, or use the
built-in choreography in **bollhav state**.

```bash
pip install bollhav
```

# Demo

![demo](docs/content/batch_recording.gif)
