Metadata-Version: 2.5
Name: streamcase
Version: 0.1.0a1
Summary: Deterministic testing for Apache Spark Structured Streaming pipelines
Project-URL: Homepage, https://github.com/SEPURI-SAI-KRISHNA/streamcase
Project-URL: Documentation, https://github.com/SEPURI-SAI-KRISHNA/streamcase/tree/main/docs
Project-URL: Issues, https://github.com/SEPURI-SAI-KRISHNA/streamcase/issues
Project-URL: Repository, https://github.com/SEPURI-SAI-KRISHNA/streamcase
Project-URL: Changelog, https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/CHANGELOG.md
Project-URL: Security, https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/SECURITY.md
Author: Sepuri Sai Krishna
License-Expression: Apache-2.0
License-File: LICENSE
License-File: NOTICE
Keywords: apache-spark,pyspark,pytest,structured-streaming,testing
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
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 :: Testing
Requires-Python: >=3.10
Provides-Extra: dev
Requires-Dist: build<2,>=1.2; extra == 'dev'
Requires-Dist: mypy<2,>=1.15; extra == 'dev'
Requires-Dist: pytest-cov<8,>=6; extra == 'dev'
Requires-Dist: pytest<10,>=8.3; extra == 'dev'
Requires-Dist: ruff<1,>=0.11; extra == 'dev'
Requires-Dist: twine<8,>=7; extra == 'dev'
Provides-Extra: spark
Requires-Dist: pyspark<4.3,>=4.2; extra == 'spark'
Provides-Extra: test
Requires-Dist: pytest-cov<8,>=6; extra == 'test'
Requires-Dist: pytest<10,>=8.3; extra == 'test'
Description-Content-Type: text/markdown

# Streamcase

[![CI](https://github.com/SEPURI-SAI-KRISHNA/streamcase/actions/workflows/ci.yml/badge.svg)](https://github.com/SEPURI-SAI-KRISHNA/streamcase/actions/workflows/ci.yml)
[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/LICENSE)

Streamcase is an early-development pytest-oriented toolkit for deterministic Apache Spark
Structured Streaming tests.

> **Status:** the Spark runner, including checkpoint-preserving restart actions,
> scenario model, results, and assertions are implemented. No release is published yet.
> The proposed [first-alpha scope](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/ROADMAP.md#first-alpha-candidate-010a1) is
> narrower than the longer-term roadmap.

The [0.1.0a1 candidate notes](docs/releases/0.1.0a1.md) describe the tested
support matrix and limitations. Publication is tracked separately in #99.

## Problem

Ordinary DataFrame assertions do not exercise streaming semantics such as
micro-batch boundaries, late data, watermarks, checkpoint restarts, or state
growth. Streamcase will make those behaviors explicit and reproducible in Python
tests while executing against Spark's public Structured Streaming interfaces.

## Installation

Until the first PyPI release, install the lightweight backend-independent
package from this checkout with:

```shell
python -m pip install -e .
```

Install the approved PySpark line for the Spark runner from this checkout with:

```shell
python -m pip install -e ".[spark]"
```

The Spark extra keeps PySpark out of the core dependency set. See the
[Spark compatibility policy](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/docs/spark-compatibility.md) for the supported
Python, Java, and Spark combination.

## Available today

Streamcase can describe immutable logical input batches and checkpoint-preserving
restart boundaries, represent captured output, and assert row equality, batch
counts, and unique keys without importing PySpark. The public Spark runner
executes batches and restarts against a caller-owned session. See the
[scenario model guide](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/docs/scenario-model.md) and
[results and assertions guide](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/docs/results-and-assertions.md), plus the
[two-batch Spark quick start and runner contract](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/docs/spark-runner.md) and
[checkpoint restart example](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/docs/restart-scenarios.md).

## Planned capabilities

- progress, watermark, and state-store assertions;
- pytest fixtures;
- compatibility testing across supported Spark releases.

These items are roadmap goals, not current package features. Each capability has
its own issue, tests, documentation, and pull request.

## Repository status

This bootstrap establishes:

- Python packaging with a `src` layout;
- Apache License 2.0 and project governance;
- issue and pull-request conventions;
- formatting, linting, type checking, tests, and package validation in CI;
- security and release policies.

See [ROADMAP.md](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/ROADMAP.md) for the planned delivery sequence and
[docs/architecture.md](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/docs/architecture.md) for the proposed technical shape.

## Local checks

```shell
python -m venv .venv
python -m pip install -e ".[dev]"
ruff format --check .
ruff check .
mypy
pytest -m "not spark"
python -m build
python -m twine check dist/*
```

Spark contributors can run the isolated integration suite with the setup in the
[contribution guide](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/CONTRIBUTING.md#development-setup).

## Contributing

All material work starts with a GitHub issue and reaches `main` only through a
reviewed pull request. Read [CONTRIBUTING.md](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/CONTRIBUTING.md) before making a
change.

## Trademark notice

Apache Spark, Spark, Apache Flink, and Flink are trademarks of the Apache Software
Foundation. Streamcase is independent software and is not endorsed by the Apache
Software Foundation.

## License

Licensed under the [Apache License 2.0](https://github.com/SEPURI-SAI-KRISHNA/streamcase/blob/main/LICENSE).
