Skip to content

Commit 1ffc82e

Browse files
Update examples for aiohttp 3.9 (#943)
Co-authored-by: Sam Bull <[email protected]>
1 parent 480971b commit 1ffc82e

File tree

3 files changed

+14
-15
lines changed

3 files changed

+14
-15
lines changed

demo/flash_messages_example.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22
from typing import Awaitable, Callable, List, NoReturn, cast
33

44
from aiohttp import web
5+
from aiohttp.typedefs import Handler
56
from cryptography import fernet
67

78
from aiohttp_session import get_session, setup
89
from aiohttp_session.cookie_storage import EncryptedCookieStorage
910

10-
_Handler = Callable[[web.Request], Awaitable[web.StreamResponse]]
11-
1211

1312
def flash(request: web.Request, message: str) -> None:
1413
request.setdefault("flash_outgoing", []).append(message)
@@ -18,17 +17,16 @@ def get_messages(request: web.Request) -> List[str]:
1817
return cast(List[str], request.pop("flash_incoming"))
1918

2019

21-
async def flash_middleware(app: web.Application, handler: _Handler) -> _Handler:
22-
async def process(request: web.Request) -> web.StreamResponse:
23-
session = await get_session(request)
24-
request["flash_incoming"] = session.pop("flash", [])
25-
response = await handler(request)
20+
@web.middleware
21+
async def flash_middleware(request: web.Request, handler: Handler) -> web.StreamResponse:
22+
session = await get_session(request)
23+
request["flash_incoming"] = session.pop("flash", [])
24+
try:
25+
return await handler(request)
26+
finally:
2627
session["flash"] = request.get("flash_incoming", []) + request.get(
2728
"flash_outgoing", []
2829
)
29-
return response
30-
31-
return process
3230

3331

3432
async def flash_handler(request: web.Request) -> NoReturn:
@@ -50,10 +48,10 @@ def make_app() -> web.Application:
5048
fernet_key = fernet.Fernet.generate_key()
5149
secret_key = base64.urlsafe_b64decode(fernet_key)
5250
setup(app, EncryptedCookieStorage(secret_key))
51+
# Install flash middleware (must be installed after aiohttp-session middleware).
52+
app.middlewares.append(flash_middleware)
5353
app.router.add_get("/", handler)
5454
app.router.add_get("/flash", flash_handler)
55-
# Install flash middleware
56-
app.middlewares.append(flash_middleware)
5755
return app
5856

5957

demo/login_required_example.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
]
1414
_Handler = Callable[[web.Request], Awaitable[web.StreamResponse]]
1515

16+
user_key = web.AppKey("user", str)
1617

1718
def login_required(fn: _Handler) -> _Handler:
1819
async def wrapped(
@@ -29,15 +30,15 @@ async def wrapped(
2930
user_id = session["user_id"]
3031
# actually load user from your database (e.g. with aiopg)
3132
user = DATABASE[user_id]
32-
app["user"] = user
33+
app[user_key] = user
3334
return await fn(request, *args, **kwargs)
3435

3536
return wrapped
3637

3738

3839
@login_required
3940
async def handler(request: web.Request) -> web.Response:
40-
user = request.app["user"]
41+
user = request.app[user_key]
4142
return web.Response(text=f"User {user} authorized")
4243

4344

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-e .
2-
aiohttp==3.8.5
2+
aiohttp==3.9.0
33
aiomcache==0.8.1
44
cryptography==41.0.5
55
docker==6.1.3

0 commit comments

Comments
 (0)