Metadata-Version: 2.4
Name: py-splat
Version: 1.0.0
Summary: Automatic GitHub issue creation + PR fix on runtime errors
Project-URL: Homepage, https://github.com/andreaslordos/splat
Project-URL: Documentation, https://py-splat.readthedocs.io/
Project-URL: Repository, https://github.com/andreaslordos/splat
Project-URL: Issues, https://github.com/andreaslordos/splat/issues
Author: Andreas Lordos
License-Expression: MIT
License-File: LICENSE
Keywords: crash-reporting,debugging,django,error-tracking,exception-handling,fastapi,flask,github-issues,monitoring
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: FastAPI
Classifier: Framework :: Flask
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
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: Topic :: Software Development :: Bug Tracking
Classifier: Topic :: Software Development :: Debuggers
Classifier: Topic :: System :: Logging
Classifier: Topic :: System :: Monitoring
Classifier: Typing :: Typed
Requires-Python: >=3.9
Requires-Dist: click>=8.0.0
Requires-Dist: httpx>=0.25.0
Requires-Dist: questionary>=2.0.0
Requires-Dist: tomli>=2.0.0; python_version < '3.11'
Provides-Extra: dev
Requires-Dist: black; extra == 'dev'
Requires-Dist: fastapi>=0.100.0; extra == 'dev'
Requires-Dist: flask>=2.0.0; extra == 'dev'
Requires-Dist: mypy; extra == 'dev'
Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: respx>=0.20.0; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Requires-Dist: types-pyyaml; extra == 'dev'
Provides-Extra: docs
Requires-Dist: myst-parser>=2.0.0; extra == 'docs'
Requires-Dist: sphinx-copybutton>=0.5.0; extra == 'docs'
Requires-Dist: sphinx-rtd-theme>=2.0.0; extra == 'docs'
Requires-Dist: sphinx>=7.0.0; extra == 'docs'
Description-Content-Type: text/markdown

# Splat

[![PyPI version](https://img.shields.io/pypi/v/py-splat.svg)](https://pypi.org/project/py-splat/)
[![Python versions](https://img.shields.io/pypi/pyversions/py-splat.svg)](https://pypi.org/project/py-splat/)
[![Documentation Status](https://readthedocs.org/projects/py-splat/badge/?version=latest)](https://py-splat.readthedocs.io/)
[![License](https://img.shields.io/pypi/l/py-splat.svg)](https://github.com/andreaslordos/splat/blob/main/LICENSE)

Splat automatically creates GitHub issues when your Flask, FastAPI, or Django app crashes, then uses Claude Code to generate fix PRs. Set it up once, and bugs fix themselves.

## Quick Start

```bash
pip install py-splat
splat init
```

The `splat init` wizard detects your framework, injects the error-catching middleware, and sets up a GitHub Action that triggers Claude Code when issues are created.

The injected code is minimal: two lines of code for each server you instantiate. `splat init` will figure out where to inject this code and do it for you.

## How It Works

1. **Runtime error occurs** → Splat middleware catches the exception
2. **GitHub issue created** → Contains error details, traceback, and los
3. **GitHub Action triggers** → Claude Code analyzes the bug and opens a fix PR

## Documentation

See the [full documentation](https://py-splat.readthedocs.io/) for configuration options and advanced usage.

## License

MIT
