Quart integration for dishka
Project description
Quart-Dishka: Dishka integration for Quart
Integration of Dishka dependency injection framework with Quart web framework.
Features
- Automatic Scope Management: Handles REQUEST and SESSION scopes for HTTP and WebSocket requests
- Dependency Injection: Injects dependencies into route handlers via:
- Auto-injection mode for all routes
@injectdecorator for manual setup
- WebSocket Support: Full support for WebSocket handlers with proper scoping
- Blueprint Support: Works with Quart blueprints out of the box
Installation
Install using pip:
pip install quart-dishka
Or with uv:
uv add quart-dishka
Quick Start
from quart import Quart
from dishka import Provider, Scope, provide, make_async_container, FromDishka
from quart_dishka import QuartDishka, inject
# Define your providers
class StringProvider(Provider):
@provide(scope=Scope.REQUEST)
def greeting(self) -> str:
return "Hello"
# Create Quart app and Dishka container
app = Quart(__name__)
container = make_async_container(StringProvider())
# Initialize extension
QuartDishka(app=app, container=container)
# Use dependency injection in routes
@app.route("/")
@inject
async def hello(greeting: FromDishka[str]) -> str:
return f"{greeting}, World!"
if __name__ == "__main__":
app.run()
Usage
Method 1: Auto-Injection Mode
Enable automatic dependency injection for all routes:
from quart import Quart
from dishka import FromDishka, make_async_container
from quart_dishka import QuartDishka
app = Quart(__name__)
container = make_async_container()
QuartDishka(app=app, container=container, auto_inject=True)
# No @inject decorator needed
@app.route("/")
async def hello(greeting: FromDishka[str]) -> str:
return f"{greeting}, World!"
Method 2: Manual Injection
Use the @inject decorator for specific routes:
from dishka import FromDishka
from quart import Quart
from quart_dishka import inject
app = Quart(__name__)
@app.route("/")
@inject
async def hello(greeting: FromDishka[str]) -> str:
return f"{greeting}, World!"
WebSocket Support
from dishka import FromDishka
from quart import Quart, Websocket
from quart_dishka import inject
app = Quart(__name__)
@app.websocket("/ws")
@inject
async def websocket(ws: FromDishka[Websocket], greeting: FromDishka[str]):
await ws.accept()
await ws.send(f"{greeting} from WebSocket!")
Factory Pattern
from dishka import make_async_container
from quart import Quart
from quart_dishka import QuartDishka
container = make_async_container()
dishka = QuartDishka(container=container)
def create_app():
app = Quart(__name__)
dishka.init_app(app)
return app
Blueprint Support
from dishka import FromDishka
from quart import Blueprint, Quart
from quart_dishka import inject
app = Quart(__name__)
bp = Blueprint("example", __name__)
@bp.route("/hello")
@inject
async def hello(greeting: FromDishka[str]) -> str:
return greeting
app.register_blueprint(bp)
Requirements
- Python 3.10+
- Quart >= 0.20.0
- Dishka >= 1.4.0
More Examples
Check out the examples directory for more detailed examples:
- Basic HTTP routes
- WebSocket handlers
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quart_dishka-1.0.0.tar.gz.
File metadata
- Download URL: quart_dishka-1.0.0.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe3c3d90990fd3d491098d568d54dad69a96f163cd410207956e58a2d69206e1
|
|
| MD5 |
646661cf9381f8315f9b7f43c06edb80
|
|
| BLAKE2b-256 |
dbff6c366bee430f0cd6cf3353be24ba93dfad4fad48e4eb560192d644eb2302
|
File details
Details for the file quart_dishka-1.0.0-py3-none-any.whl.
File metadata
- Download URL: quart_dishka-1.0.0-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9560602b24c569ec5d52a978a14d95ec9172ca2c596b48a0bc97e66294110fd1
|
|
| MD5 |
20c1815d7a324019ea713bc858d75bae
|
|
| BLAKE2b-256 |
1eb97dd1c59ea7245cd985938ec636b9f07fd6223528b2a9c5d8a1b45640debe
|