2
2
from datetime import datetime
3
3
4
4
from cs50 import SQL
5
- from flask import Flask , flash , redirect , render_template , request , session
5
+ from flask import Flask , redirect , render_template , request , session
6
6
from flask_session import Session
7
- from tempfile import mkdtemp
8
7
from werkzeug .security import check_password_hash , generate_password_hash
9
8
10
9
from helpers import apology , login_required , lookup , usd
@@ -44,10 +43,11 @@ def after_request(response):
44
43
@login_required
45
44
def index ():
46
45
"""Show portfolio of stocks"""
47
- cash = db .execute ("SELECT cash FROM users WHERE id = ?" ,
48
- session ["user_id" ])
46
+ cash = db .execute ("SELECT cash FROM users WHERE id = ?" , session ["user_id" ])
49
47
orders = db .execute (
50
- "SELECT symbol, name, sum(shares) as sumshares, price FROM orders WHERE user_id = ? GROUP BY symbol" , session ["user_id" ])
48
+ "SELECT symbol, name, sum(shares) as sumshares, price FROM orders WHERE user_id = ? GROUP BY symbol" ,
49
+ session ["user_id" ],
50
+ )
51
51
account = cash [0 ]["cash" ]
52
52
for order in orders :
53
53
name = order ["name" ]
@@ -56,7 +56,9 @@ def index():
56
56
order ["total" ] = total
57
57
order ["price" ] = order ["price" ]
58
58
account += total
59
- return render_template ("index.html" , orders = orders , cash = cash [0 ]["cash" ], account = account )
59
+ return render_template (
60
+ "index.html" , orders = orders , cash = cash [0 ]["cash" ], account = account
61
+ )
60
62
61
63
62
64
@app .route ("/buy" , methods = ["GET" , "POST" ])
@@ -81,17 +83,24 @@ def buy():
81
83
except ValueError :
82
84
return apology ("Invalid number" )
83
85
84
- row = db .execute ("SELECT cash FROM users where id = ?" ,
85
- session ["user_id" ])
86
+ row = db .execute ("SELECT cash FROM users where id = ?" , session ["user_id" ])
86
87
cash = row [0 ]["cash" ]
87
88
balance = cash - shares * quote ["price" ]
88
89
if balance < 0 :
89
90
return apology ("insufficient balance" )
90
91
91
- db .execute ("UPDATE users SET cash = ? WHERE id = ?" ,
92
- balance , session ["user_id" ])
93
- db .execute ("INSERT INTO orders (user_id, symbol, shares, name, price, timestamp) VALUES (?, ?, ?, ?, ?, ?)" ,
94
- session ["user_id" ], symbol .upper (), shares , quote ["name" ], quote ["price" ], datetime .now ())
92
+ db .execute (
93
+ "UPDATE users SET cash = ? WHERE id = ?" , balance , session ["user_id" ]
94
+ )
95
+ db .execute (
96
+ "INSERT INTO orders (user_id, symbol, shares, name, price, timestamp) VALUES (?, ?, ?, ?, ?, ?)" ,
97
+ session ["user_id" ],
98
+ symbol .upper (),
99
+ shares ,
100
+ quote ["name" ],
101
+ quote ["price" ],
102
+ datetime .now (),
103
+ )
95
104
return redirect ("/" )
96
105
97
106
@@ -100,7 +109,9 @@ def buy():
100
109
def history ():
101
110
"""Show history of transactions"""
102
111
orders = db .execute (
103
- "SELECT symbol, name, shares, price, timestamp FROM orders WHERE user_id = ?" , session ["user_id" ])
112
+ "SELECT symbol, name, shares, price, timestamp FROM orders WHERE user_id = ?" ,
113
+ session ["user_id" ],
114
+ )
104
115
if not orders :
105
116
return apology ("No history" , 403 )
106
117
else :
@@ -131,11 +142,14 @@ def login():
131
142
return apology ("must provide password" , 403 )
132
143
133
144
# Query database for username
134
- rows = db .execute ("SELECT * FROM users WHERE username = ?" ,
135
- request .form .get ("username" ))
145
+ rows = db .execute (
146
+ "SELECT * FROM users WHERE username = ?" , request .form .get ("username" )
147
+ )
136
148
137
149
# Ensure username exists and password is correct
138
- if len (rows ) != 1 or not check_password_hash (rows [0 ]["hash" ], request .form .get ("password" )):
150
+ if len (rows ) != 1 or not check_password_hash (
151
+ rows [0 ]["hash" ], request .form .get ("password" )
152
+ ):
139
153
return apology ("invalid username and/or password" , 403 )
140
154
141
155
# Remember which user has logged in
@@ -188,12 +202,15 @@ def register():
188
202
if not name or not ps1 or not ps1 :
189
203
return apology ("please provide username and password!" )
190
204
if ps1 != ps2 :
191
- return apology ("password and confirmation don't match~ " )
205
+ return apology ("password and confirmation don't match" )
192
206
if db .execute ("SELECT * FROM users WHERE username = ?" , name ):
193
207
return apology ("user already exist!" )
194
208
195
- db .execute ("INSERT INTO users (username, hash) VALUES (?, ?)" ,
196
- name , generate_password_hash (ps1 ))
209
+ db .execute (
210
+ "INSERT INTO users (username, hash) VALUES (?, ?)" ,
211
+ name ,
212
+ generate_password_hash (ps1 ),
213
+ )
197
214
return redirect ("/" )
198
215
199
216
@@ -203,7 +220,9 @@ def sell():
203
220
"""Sell shares of stock"""
204
221
if request .method == "GET" :
205
222
symbols = db .execute (
206
- "SELECT symbol FROM orders WHERE user_id = ? GROUP BY symbol" , session ["user_id" ])
223
+ "SELECT symbol FROM orders WHERE user_id = ? GROUP BY symbol" ,
224
+ session ["user_id" ],
225
+ )
207
226
return render_template ("sell.html" , symbol = symbols )
208
227
else :
209
228
symbol = request .form .get ("symbol" )
@@ -216,17 +235,27 @@ def sell():
216
235
return apology ("Invalid symbol or shares" )
217
236
218
237
sumshares = db .execute (
219
- "SELECT symbol, price, name, SUM(shares) as sumshares FROM orders WHERE user_id = ? AND symbol = ?" , session ["user_id" ], symbol )
238
+ "SELECT symbol, price, name, SUM(shares) as sumshares FROM orders WHERE user_id = ? AND symbol = ?" ,
239
+ session ["user_id" ],
240
+ symbol ,
241
+ )
220
242
221
243
if shares > sumshares [0 ]["sumshares" ]:
222
244
return apology ("You don't have so many shares" )
223
245
224
- db .execute ("INSERT INTO orders (user_id, symbol, shares, name, price, timestamp) VALUES (?, ?, ?, ?, ?, ?)" ,
225
- session ["user_id" ], symbol , - shares , sumshares [0 ]["name" ], sumshares [0 ]["price" ], datetime .now ())
246
+ db .execute (
247
+ "INSERT INTO orders (user_id, symbol, shares, name, price, timestamp) VALUES (?, ?, ?, ?, ?, ?)" ,
248
+ session ["user_id" ],
249
+ symbol ,
250
+ - shares ,
251
+ sumshares [0 ]["name" ],
252
+ sumshares [0 ]["price" ],
253
+ datetime .now (),
254
+ )
226
255
sold = shares * sumshares [0 ]["price" ]
227
256
228
- cash = db .execute ("select cash FROM users WHERE id = ?" ,
229
- session [ "user_id" ])[ 0 ][ "cash" ]
230
- db . execute ( "UPDATE users SET cash = ? WHERE id = ?" ,
231
- cash + sold , session [ "user_id" ] )
257
+ cash = db .execute ("select cash FROM users WHERE id = ?" , session [ "user_id" ])[ 0 ][ "cash" ]
258
+ db . execute (
259
+ "UPDATE users SET cash = ? WHERE id = ?" , cash + sold , session [ "user_id" ]
260
+ )
232
261
return redirect ("/" )
0 commit comments