Metadata-Version: 2.4
Name: dagweaver
Version: 0.1.1
Summary: Library for Apache Airflow DAG development
License-Expression: MIT
Project-URL: Homepage, https://github.com/baranovss/DagWeaver
Project-URL: Repository, https://github.com/baranovss/DagWeaver
Project-URL: Documentation, https://github.com/baranovss/DagWeaver#readme
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: sqlglot>=24.0.0
Provides-Extra: airflow
Requires-Dist: apache-airflow>=2.0.0; extra == "airflow"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Dynamic: license-file

# DagWeaver

Library for Apache Airflow DAG development. `@weave` decorator marks pipeline steps.

## Install

```bash
pip install dagweaver[airflow]
```

## Usage

**Weaves** — one `@weave` per file in `weaves/`:

```
my_project/
  weaves/
    raw_data.py      # @weave def raw_data(): ...
    processed.py     # @weave(upstream=["raw_data"]) def processed(data): ...
  dags/
    my_dag.py        # DAG definition (below)
```

`weaves/raw_data.py`:

```python
from dagweaver import weave

@weave
def raw_data():
    return "data"
```

`weaves/processed.py`:

```python
from dagweaver import weave

@weave(upstream=["raw_data"])
def processed(data):
    return data.upper()
```

`dags/my_dag.py`:

```python
from airflow import DAG
from dagweaver import build_weaves, build_dag
import my_project.weaves as weaves_pkg

with DAG("my_dag", start_date=..., schedule=None) as dag:
    weaves = build_weaves(weaves_pkg)
    build_dag(dag, weaves)
```

## Dev

```bash
pip install -e ".[dev]"
pytest
```
