Metadata-Version: 2.1
Name: aioflask
Version: 0.4.0
Summary: Flask running on asyncio.
Home-page: https://github.com/miguelgrinberg/aioflask
Author: Miguel Grinberg
Author-email: miguel.grinberg@gmail.com
License: UNKNOWN
Project-URL: Bug Tracker, https://github.com/miguelgrinberg/aioflask/issues
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE

# aioflask

![Build status](https://github.com/miguelgrinberg/aioflask/workflows/build/badge.svg) [![codecov](https://codecov.io/gh/miguelgrinberg/aioflask/branch/main/graph/badge.svg?token=CDMKF3L0ID)](https://codecov.io/gh/miguelgrinberg/aioflask)

Flask 2.x running on asyncio!

Is there a purpose for this, now that Flask 2.0 is out with support for async
views? Yes! Flask's own support for async handlers is very limited, as the
application still runs inside a WSGI web server, which severely limits
scalability. With aioflask you get a true ASGI application, running in a 100%
async environment.

WARNING: This is an experiment at this point. Not at all production ready!

## Quick start

To use async view functions and other handlers, use the `aioflask` package
instead of `flask`.

The `aioflask.Flask` class is a subclass of `flask.Flask` that changes a few
minor things to help the application run properly under the asyncio loop. In
particular, it overrides the following aspects of the application instance:

- The `route`, `before_request`, `before_first_request`, `after_request`, 
  `teardown_request`, `teardown_appcontext`, `errorhandler` and `cli.command`
  decorators accept coroutines as well as regular functions. The handlers all
  run inside an asyncio loop, so when using regular functions, care must be
  taken to not block.
- The WSGI callable entry point is replaced with an ASGI equivalent.
- The `run()` method uses uvicorn as web server.

There are also changes outside of the `Flask` class:

- The `flask aiorun` command starts an ASGI application using the uvicorn web
  server.
- The `render_template()` and `render_template_string()` functions are
  asynchronous and must be awaited.
- The context managers for the Flask application and request contexts are
  async.
- The test client and test CLI runner use coroutines.

## Example

```python
import asyncio
from aioflask import Flask, render_template

app = Flask(__name__)

@app.route('/')
async def index():
    await asyncio.sleep(1)
    return await render_template('index.html')
```


