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 Requires-Dist: greenletio Requires-Dist: flask (>=2) Requires-Dist: uvicorn # 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') ```