Skip to content

Commit 59a5f66

Browse files
committed
All the queries done (sync version)
1 parent 9d3bb1c commit 59a5f66

File tree

5 files changed

+54
-7
lines changed

5 files changed

+54
-7
lines changed

code/ch7-databases/db/pypi.sqlite

0 Bytes
Binary file not shown.

code/ch7-databases/services/user_service.py

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,53 @@ def user_count() -> int:
1414

1515

1616
def create_account(name: str, email: str, password: str) -> User:
17-
return User(name, email, 'abc')
17+
session = db_session.create_session()
18+
19+
try:
20+
user = User()
21+
user.email = email
22+
user.name = name
23+
# TODO: Set proper password
24+
user.hash_password = "TBD"
25+
26+
session.add(user)
27+
session.commit()
28+
29+
return user
30+
finally:
31+
session.close()
1832

1933

2034
def login_user(email: str, password: str) -> Optional[User]:
21-
if password == 'abc':
22-
return User("test user", email, 'abc')
35+
session = db_session.create_session()
36+
37+
try:
38+
user = session.query(User).filter(User.email == email).first()
39+
if not user:
40+
return user
41+
42+
# TODO: Verify password
43+
if False:
44+
return None
45+
46+
return user
47+
finally:
48+
session.close()
2349

24-
return None
50+
51+
def get_user_by_id(user_id: int) -> Optional[User]:
52+
session = db_session.create_session()
53+
54+
try:
55+
return session.query(User).filter(User.id == user_id).first()
56+
finally:
57+
session.close()
58+
59+
60+
def get_user_by_email(email: str) -> Optional[User]:
61+
session = db_session.create_session()
62+
63+
try:
64+
return session.query(User).filter(User.email == email).first()
65+
finally:
66+
session.close()
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
from starlette.requests import Request
22

33
from data.user import User
4+
from services import user_service
45
from viewmodels.shared.viewmodel import ViewModelBase
56

67

78
class AccountViewModel(ViewModelBase):
89
def __init__(self, request: Request):
910
super().__init__(request)
10-
self.user = User('Michael', 'michael@talkpython.fm', '9hsdhhsy74s')
11+
12+
self.user = user_service.get_user_by_id(self.user_id)

code/ch7-databases/viewmodels/account/register_viewmodel.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from starlette.requests import Request
44

5+
from services import user_service
56
from viewmodels.shared.viewmodel import ViewModelBase
67

78

@@ -25,3 +26,5 @@ async def load(self):
2526
self.error = "Your email is required."
2627
elif not self.password or len(self.password) < 5:
2728
self.error = "Your password is required and must be at 5 characters."
29+
elif user_service.get_user_by_email(self.email):
30+
self.error = "That email is already taken. Log in instead?"

code/ch7-databases/viewmodels/shared/viewmodel.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ class ViewModelBase:
1010
def __init__(self, request: Request):
1111
self.request: Request = request
1212
self.error: Optional[str] = None
13-
self.user_id: Optional[int] = None
13+
self.user_id: Optional[int] = cookie_auth.get_user_id_via_auth_cookie(self.request)
1414

1515
# We'll get this once we have users from the cookies.
16-
self.is_logged_in = cookie_auth.get_user_id_via_auth_cookie(self.request)
16+
self.is_logged_in = self.user_id is not None
1717

1818
def to_dict(self) -> dict:
1919
return self.__dict__

0 commit comments

Comments
 (0)