I'm banging my head against the wall on this:
I tested the following section of code using the print
statement, it outputs all iterations as expected. However when I use return
in the actual program (interacting with flask to post to a web page) it only outputs the first iteration.
This:
# Setting up cursor so we can parse results.
cur = db.cursor()
cur.execute("SELECT user from users")
user_table = cur.fetchall()
for u in user_table:
cur.execute("SELECT date from mood WHERE user='{}'".format(u[0]))
user_dates = cur.fetchall()
n = (len(user_dates) - 1) # Using this to call indexes later so need to throw away last number
u_streak = 1
dte_list = [ ]
t = timedelta(days=1)
u_streak = 1
streak_list = [ ]
streak_dict = {}
sm_list = [ ]
for dte in user_dates:
dte_list.append(dte[0])
dte_list = sorted(dte_list)
for i in range(n):
if (dte_list[i] + t) == dte_list[(i + 1)]:
u_streak += 1
else:
streak_list.append(u_streak)
u_streak = 1
print u[0], streak_list
outputs:
codestardust [1, 1, 3]
pippen [2, 2, 5, 4]
samwise [4, 1, 1, 1]
While this :
@app.route('/mood',methods=['GET', 'POST'])
def mood():
if request.method == 'POST':
user = session['username']
mymood = request.form['mymood']
d = datetime.today().strftime('%Y-%m-%d')
# Confirm user is logged in
if user and mymood:
cur.execute("INSERT INTO mood SET mood ='{}', date = '{}', user='{}'"\
.format(mymood,d,user) )
# Begin streak calculation
t = timedelta(days=1)
cur.execute("SELECT user from users")
user_table = cur.fetchall()
for u in user_table:
cur.execute("SELECT date from mood WHERE user='{}'".format(u[0]))
user_dates = cur.fetchall()
n = (len(user_dates) - 1) # Using this to call indexes later so need to throw away last number
u_streak = 1
dte_list = [ ]
u_streak = 1
streak_list = [ ]
streak_dict = {}
sm_list = [ ]
for dte in user_dates:
dte_list.append(dte[0])
dte_list = sorted(dte_list)
for i in range(n):
if (dte_list[i] + t) == dte_list[(i + 1)]:
u_streak += 1
else:
streak_list.append(u_streak)
u_streak = 1
return jsonify([u[0], streak_list])
outputs this:
["codestardust", [1, 1, 3, 4]]
I've included the entire function from the actual program to provide nesting context, in case this is a mistake with my understanding of if
statements. Sorry if it is too verbose.
I see a bunch of down voted tickets like this one and have thoroughly checked for indentation errors and such. I also did extensive research on for
and if
statements such as here and here.
As far as my understanding goes, since the return
statement is nested in for u in user_table:
it should be going through all iterations of the users. I've been at this all day and can't see what I'm missing. Any help is much appreciated! (Also I know I spelled "pippen" wrong lol)