Skip to content

Commit 077af9d

Browse files
committed
All user queries and services are async now.
1 parent f4f17c3 commit 077af9d

File tree

3 files changed

+18
-20
lines changed

3 files changed

+18
-20
lines changed
0 Bytes
Binary file not shown.

code/ch8-async-databases/services/user_service.py

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,32 @@ async def user_count() -> int:
1515
return result.scalar()
1616

1717

18-
def create_account(name: str, email: str, password: str) -> User:
19-
session = db_session.create_session()
20-
21-
try:
22-
user = User()
23-
user.email = email
24-
user.name = name
25-
user.hash_password = crypto.hash(password, rounds=172_434)
18+
async def create_account(name: str, email: str, password: str) -> User:
19+
user = User()
20+
user.email = email
21+
user.name = name
22+
user.hash_password = crypto.hash(password, rounds=172_434)
2623

24+
async with db_session.create_async_session() as session:
2725
session.add(user)
28-
session.commit()
26+
await session.commit()
2927

30-
return user
31-
finally:
32-
session.close()
28+
return user
3329

3430

35-
def login_user(email: str, password: str) -> Optional[User]:
36-
session = db_session.create_session()
31+
async def login_user(email: str, password: str) -> Optional[User]:
32+
async with db_session.create_async_session() as session:
33+
query = select(User).filter(User.email == email)
34+
results = await session.execute(query)
3735

38-
try:
39-
user = session.query(User).filter(User.email == email).first()
36+
user = results.scalar_one_or_none()
4037
if not user:
4138
return user
4239

4340
if not crypto.verify(password, user.hash_password):
4441
return None
4542

4643
return user
47-
finally:
48-
session.close()
4944

5045

5146
async def get_user_by_id(user_id: int) -> Optional[User]:

code/ch8-async-databases/views/account.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import asyncio
2+
13
import fastapi
24
from fastapi_chameleon import template
35
from starlette import status
@@ -37,7 +39,7 @@ async def register(request: Request):
3739
return vm.to_dict()
3840

3941
# Create the account
40-
account = user_service.create_account(vm.name, vm.email, vm.password)
42+
account = await user_service.create_account(vm.name, vm.email, vm.password)
4143

4244
# Login user
4345
response = fastapi.responses.RedirectResponse(url='/account', status_code=status.HTTP_302_FOUND)
@@ -65,8 +67,9 @@ async def login_post(request: Request):
6567
if vm.error:
6668
return vm.to_dict()
6769

68-
user = user_service.login_user(vm.email, vm.password)
70+
user = await user_service.login_user(vm.email, vm.password)
6971
if not user:
72+
await asyncio.sleep(5)
7073
vm.error = "The account does not exist or the password is wrong."
7174
return vm.to_dict()
7275

0 commit comments

Comments
 (0)