Metadata-Version: 2.4
Name: rainspout
Version: 1.0.1
Summary: A domain-agnostic frame for building scientific data-processing pipelines
Project-URL: Homepage, https://github.com/strongmats/rainspout
Project-URL: Documentation, https://github.com/strongmats/rainspout/tree/main/docs
Project-URL: Issues, https://github.com/strongmats/rainspout/issues
Author-email: Matthew Strong <strongmats@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: data-processing,pipeline,provenance,scientific-computing,workflow
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: pydantic<3,>=2
Requires-Dist: pyyaml>=6
Requires-Dist: typer>=0.12
Description-Content-Type: text/markdown

# Rainspout

[![PyPI](https://img.shields.io/pypi/v/rainspout)](https://pypi.org/project/rainspout/)
[![Python](https://img.shields.io/pypi/pyversions/rainspout)](https://pypi.org/project/rainspout/)
[![CI](https://github.com/strongmats/rainspout/actions/workflows/ci.yml/badge.svg)](https://github.com/strongmats/rainspout/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

A domain-agnostic frame for building scientific data-processing pipelines.
Rainspout contains no science of its own: content packages ship the stages
(processing steps) and handlers (storage adapters); one YAML config describes
a run; the `spout` command executes it, tracking what has already been done.

**Start with [`docs/README.md`](docs/README.md)** — the documentation is the
API: you can build a content package from the authoring guides alone, without
reading this repository's source.

## Installation

```
pip install rainspout      # or: uv add rainspout
spout --help
```

## Development

```
uv sync            # create the environment
uv run pytest      # tests (coverage floor enforced)
uv run ruff check  # lint
uv run mypy        # types
```
