Metadata-Version: 2.1
Name: cadwyn
Version: 2.3.0rc0
Summary: Modern Stripe-like API versioning in FastAPI
Home-page: https://github.com/zmievsa/cadwyn
License: MIT
Author: Stanislav Zmiev
Author-email: zmievsa@gmail.com
Requires-Python: >=3.10,<4.0
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Framework :: AsyncIO
Classifier: Framework :: FastAPI
Classifier: Framework :: Pydantic
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Internet
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Provides-Extra: cli
Requires-Dist: fastapi (>=0.96.1)
Requires-Dist: pydantic (>=1.10.0,<2.0.0)
Requires-Dist: typer (>=0.7.0); extra == "cli"
Requires-Dist: typing-extensions
Requires-Dist: verselect-zmievsa (>=0.0.4,<0.0.5)
Project-URL: Repository, https://github.com/zmievsa/cadwyn
Description-Content-Type: text/markdown

# Cadwyn

Modern [Stripe-like](https://stripe.com/blog/api-versioning) API versioning in FastAPI

---

<p align="center">
<a href="https://github.com/zmievsa/cadwyn/actions?query=workflow%3ATests+event%3Apush+branch%3Amain" target="_blank">
    <img src="https://github.com/zmievsa/cadwyn/actions/workflows/test.yaml/badge.svg?branch=main&event=push" alt="Test">
</a>
<a href="https://codecov.io/gh/ovsyanka83/cadwyn" target="_blank">
    <img src="https://img.shields.io/codecov/c/github/ovsyanka83/cadwyn?color=%2334D058" alt="Coverage">
</a>
<a href="https://pypi.org/project/cadwyn/" target="_blank">
    <img alt="PyPI" src="https://img.shields.io/pypi/v/cadwyn?color=%2334D058&label=pypi%20package" alt="Package version">
</a>
<a href="https://pypi.org/project/cadwyn/" target="_blank">
    <img src="https://img.shields.io/pypi/pyversions/cadwyn?color=%2334D058" alt="Supported Python versions">
</a>
</p>

## Who is this for?

Cadwyn allows you to support a single version of your code, auto-generating the code/routes for older versions. You keep versioning encapsulated in small and independent "version change" modules while your business logic knows nothing about versioning.

Its [approach](./docs/theory.md#ii-migration-based-response-building) will be useful if you want to:

1. Support many (>2) API versions for a long time
2. Effortlessly backport features and bugfixes to older API versions

## Get started

The [documentation](https://docs.cadwyn.dev) has everything you need to get started. It is recommended to read it in the following order:

1. [Tutorial](https://docs.cadwyn.dev/tutorial/)
2. [Recipes](https://docs.cadwyn.dev/recipes/)
3. [Reference](https://docs.cadwyn.dev/reference/)
4. [Theory](https://docs.cadwyn.dev/theory/)

## Similar projects

The following projects are trying to accomplish similar results with a lot more simplistic functionality.

- <https://github.com/sjkaliski/pinned>
- <https://github.com/phillbaker/gates>
- <https://github.com/lukepolo/laravel-api-migrations>
- <https://github.com/tomschlick/request-migrations>
- <https://github.com/keygen-sh/request_migrations>

