Metadata-Version: 2.5
Name: fastsprout
Version: 0.2.0
Summary: FastSprout - Python backend framework that grows from a seed. Modular monolith first. Async-native. Built on FastAPI.
Project-URL: Homepage, https://github.com/FastSprout/fastsprout
Project-URL: Documentation, https://github.com/FastSprout/fastsprout/tree/development/docs
Project-URL: Repository, https://github.com/FastSprout/fastsprout
Project-URL: Issues, https://github.com/FastSprout/fastsprout/issues
Author-email: Illia Bahlai <illia@bahlai.xyz>
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: async,backend,fastsprout,framework,modular-monolith,monolith,pydantic
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Typing :: Typed
Requires-Python: <3.15,>=3.12
Requires-Dist: pydantic>=2.13.5
Requires-Dist: typing-extensions>=4.14
Provides-Extra: data-sql
Requires-Dist: sqlalchemy[asyncio]; extra == 'data-sql'
Requires-Dist: sqlmodel==0.0.42; extra == 'data-sql'
Provides-Extra: events
Requires-Dist: bubus>=1.5.6; extra == 'events'
Requires-Dist: croniter>=6.2.4; extra == 'events'
Provides-Extra: events-kafka
Requires-Dist: bubus>=1.5.6; extra == 'events-kafka'
Requires-Dist: croniter>=6.2.4; extra == 'events-kafka'
Requires-Dist: faststream[kafka]<0.8,>=0.7.5; extra == 'events-kafka'
Provides-Extra: events-nats
Requires-Dist: bubus>=1.5.6; extra == 'events-nats'
Requires-Dist: croniter>=6.2.4; extra == 'events-nats'
Requires-Dist: faststream[nats]<0.8,>=0.7.5; extra == 'events-nats'
Provides-Extra: events-rabbit
Requires-Dist: bubus>=1.5.6; extra == 'events-rabbit'
Requires-Dist: croniter>=6.2.4; extra == 'events-rabbit'
Requires-Dist: faststream[rabbit]<0.8,>=0.7.5; extra == 'events-rabbit'
Provides-Extra: standard
Requires-Dist: bubus>=1.5.6; extra == 'standard'
Requires-Dist: croniter>=6.2.4; extra == 'standard'
Requires-Dist: sqlalchemy[asyncio]; extra == 'standard'
Requires-Dist: sqlmodel==0.0.42; extra == 'standard'
Provides-Extra: testing
Requires-Dist: hypothesis>=6.0; extra == 'testing'
Requires-Dist: pytest-asyncio>=1.4.0; extra == 'testing'
Requires-Dist: pytest>=9.0.3; extra == 'testing'
Requires-Dist: typeguard<5,>=4.4; extra == 'testing'
Provides-Extra: testing-data
Requires-Dist: aiosqlite>=0.22.1; extra == 'testing-data'
Requires-Dist: asyncmy>=0.2.10; extra == 'testing-data'
Requires-Dist: asyncpg>=0.30; extra == 'testing-data'
Requires-Dist: hypothesis>=6.0; extra == 'testing-data'
Requires-Dist: pytest-asyncio>=1.4.0; extra == 'testing-data'
Requires-Dist: pytest>=9.0.3; extra == 'testing-data'
Requires-Dist: sqlalchemy[asyncio]; extra == 'testing-data'
Requires-Dist: sqlmodel==0.0.42; extra == 'testing-data'
Requires-Dist: testcontainers[mysql,oracle,postgres]<5,>=4.15; extra == 'testing-data'
Requires-Dist: typeguard<5,>=4.4; extra == 'testing-data'
Provides-Extra: testing-events
Requires-Dist: bubus>=1.5.6; extra == 'testing-events'
Requires-Dist: croniter>=6.2.4; extra == 'testing-events'
Requires-Dist: faststream[kafka]<0.8,>=0.7.5; extra == 'testing-events'
Requires-Dist: faststream[nats]<0.8,>=0.7.5; extra == 'testing-events'
Requires-Dist: faststream[rabbit]<0.8,>=0.7.5; extra == 'testing-events'
Requires-Dist: hypothesis>=6.0; extra == 'testing-events'
Requires-Dist: pytest-asyncio>=1.4.0; extra == 'testing-events'
Requires-Dist: pytest>=9.0.3; extra == 'testing-events'
Requires-Dist: testcontainers[kafka,nats,rabbitmq]<5,>=4.15; extra == 'testing-events'
Requires-Dist: typeguard<5,>=4.4; extra == 'testing-events'
Description-Content-Type: text/markdown

# FastSprout

<img src="https://raw.githubusercontent.com/FastSprout/fastsprout/development/assets/fastsprout-mark.svg" alt="FastSprout logo" width="100" height="100">

**Typed building blocks for Python backends.**

<p class="fs-badges">
<a href="https://gitlab.3dcra.eu/opensource/fastsprout/fastsprout/-/pipelines?ref=development"><img alt="Pipeline" src="https://gitlab.3dcra.eu/opensource/fastsprout/fastsprout/badges/development/pipeline.svg"></a>
<a href="https://gitlab.3dcra.eu/opensource/fastsprout/fastsprout/-/pipelines?ref=development"><img alt="Test coverage" src="https://gitlab.3dcra.eu/opensource/fastsprout/fastsprout/badges/development/coverage.svg?job=pytest%3A%20%5B3.12%5D&amp;key_text=test%20coverage&amp;key_width=92&amp;min_good=100"></a>
<a href="https://gitlab.3dcra.eu/opensource/fastsprout/fastsprout/-/pipelines?ref=development"><img alt="Type coverage" src="https://gitlab.3dcra.eu/opensource/fastsprout/fastsprout/badges/development/coverage.svg?job=type-coverage%3A%20%5B3.12%5D&amp;key_text=type%20coverage&amp;key_width=96&amp;min_good=100"></a>
</p>

<p class="fs-badges">
<a href="https://github.com/FastSprout/fastsprout/blob/development/pyproject.toml"><img alt="Version" src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fgitlab.3dcra.eu%2Fopensource%2Ffastsprout%2Ffastsprout%2F-%2Fraw%2Fdevelopment%2Fpyproject.toml&amp;query=%24.project.version&amp;label=version"></a>
<a href="https://github.com/FastSprout/fastsprout/blob/development/pyproject.toml"><img alt="Python" src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fgitlab.3dcra.eu%2Fopensource%2Ffastsprout%2Ffastsprout%2F-%2Fraw%2Fdevelopment%2Fpyproject.toml&amp;query=%24.project.requires-python&amp;label=python"></a>
<a href="https://github.com/FastSprout/fastsprout/blob/development/LICENSE"><img alt="License" src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fgitlab.3dcra.eu%2Fopensource%2Ffastsprout%2Ffastsprout%2F-%2Fraw%2Fdevelopment%2Fpyproject.toml&amp;query=%24.project.license&amp;label=license"></a>
<a href="https://pypi.org/project/fastsprout/"><img alt="PyPI downloads" src="https://api.pepy.tech/badge/fastsprout"></a>
</p>

FastSprout puts application operations in typed actions and services, so an API,
CLI, and worker can reuse the same behavior and dependency checks. It provides
entity services for repeated CRUD work, a data router for shared persistence
contexts, and workflows for composing async operations.

[Documentation](https://fastsprout.dev/dev/) ·
[Getting started](https://fastsprout.dev/dev/getting-started/) ·
[Runnable examples](https://github.com/FastSprout/fastsprout/tree/development/examples) ·
[API reference](https://fastsprout.dev/dev/api/) ·
[Source](https://github.com/FastSprout/fastsprout) ·
[Contributing](https://github.com/FastSprout/fastsprout/blob/development/CONTRIBUTING.txt) ·
[Changelog](https://github.com/FastSprout/fastsprout/blob/development/CHANGELOG.txt)

## Install

FastSprout supports Python 3.12-3.14. Install version 0.2.0 with SQL and
event support:

```bash
pip install 'fastsprout[standard]==0.2.0'
```

See [Getting Started for 0.2.0](https://fastsprout.dev/0.2.0/getting-started/)
to run the examples for this release. The other guides linked here follow
development; choose the matching documentation version for a PyPI release.

## What it helps with

- Reuse an application operation and its checks across endpoints, commands, and workers.
- Replace repeated entity CRUD, schema projection, and pagination code with `DataS`.
- Share persistence resources and choose when related changes settle with `DataR`.
- Compose typed async operations and process their results with `Workflow`.

## Explore

- **Core:** typed schemas, fields, DTO visibility, and dependency injection.
- **Actions:** function and class actions, services, `DataS` entity operations, and workflows.
- **Data:** `DataR` persistence contexts, entity backends, typed queries, streams, and joins.
- **Events:** EventBus with Bubus, asyncio.Queue, RabbitMQ, NATS, and Kafka adapters.
- **Testing:** typed pytest phases and database/broker test contexts.

The [features guide](https://fastsprout.dev/dev/features/) explains the problems
these layers address. Start with [actions and services](https://fastsprout.dev/dev/guide/actions/)
or [DataS, DataR, and persistence](https://fastsprout.dev/dev/guide/data/).
The [API reference](https://fastsprout.dev/dev/api/) is generated from the Python
source in this repository.

## Security and license

Report vulnerabilities privately as described in the
[security policy](https://github.com/FastSprout/fastsprout/blob/development/SECURITY.md). FastSprout is licensed
under Apache-2.0; see [LICENSE](https://github.com/FastSprout/fastsprout/blob/development/LICENSE).
