· 5 years ago · Nov 16, 2019, 04:56 AM
1# blog.py - controller
2
3from flask import Flask, render_template, request, session, flash, redirect, url_for, g
4from functions import *
5import sqlite3
6import sys
7import ast
8from functools import wraps
9table = ""
10count = -1
11error2=None
12DATABASE = 'pathfinder.db'
13#USERNAME = 'admin'
14#PASSWORD = 'admin'
15SECRET_KEY = ']x80"wx84DA4!Zx88n0x82\86Q\xf7x17\xac9\x8a\xccQ'
16delim = '*'
17app = Flask(__name__)
18sorted_schol_names = []
19# pulls in app configurations by looking for UPPERCASE variables
20app.config.from_object(__name__)
21
22# functions used for connection to the DATABASE
23def connect_db():
24 return sqlite3.connect(app.config['DATABASE'])
25
26#needs work on login required
27def login_required(test):
28 @wraps(test)
29 def wrap(*args, **kwargs):
30 global error2
31 if 'logged_in' in session:
32 return test(*args, **kwargs)
33 else:
34 #flash("You need to be logged in")
35 error2="You need to be logged in"
36 return redirect(url_for('login'))
37 return wrap
38
39
40@app.route('/', methods=['GET', 'POST'])
41def login():
42
43 global name,table,role,css,count
44 g.db = connect_db()
45 cur = g.db.execute('SELECT * FROM cred')
46 all_creds = [dict(name=row[0], login=row[1], password=row[2], table=row[3], role=row[4], css=row[5], active=row[6]) for row in cur.fetchall()]
47 g.db.close()
48 error=None
49 if error2:
50 error=error2
51 #print(all_creds)
52 passlist = []
53 for d in all_creds:
54 temp = []
55 n = d['name']
56 u = d['login']
57 p = d['password']
58 t = d['table']
59 r = d['role']
60 c = d['css']
61 a = d['active']
62 temp.append(n)
63 temp.append(u)
64 temp.append(p)
65 temp.append(t)
66 temp.append(r)
67 temp.append(c)
68 temp.append(a)
69
70 passlist.append(temp)
71 #print(passlist)
72 # gathers usernames and passwords from database
73 # checks to see if username and password match up from database list
74 if request.method == 'POST':
75 passed = False
76 u = request.form['username']
77 p = request.form['password']
78 for pair in passlist:
79 if pair[1] == u and pair[2] == p:
80 passed = True
81 name = pair[0]
82 table = pair[3]
83 role = pair[4]
84 css = pair[5]
85 active = bool(pair[6])
86
87 if passed == False:
88 count += 1
89 print(count)
90 error = "Invalid Credentials. Please try again."
91 if count >= 3:
92 error = "Invalid Credentials. Please try again with the right password"
93 count = 0
94
95 else:
96 if active == True:
97 session['logged_in'] = True
98 return redirect(url_for('main'))
99 else:
100 count = 0
101 passed = False
102 error = "This account is unsubcribed"
103 return render_template('loginchild.html', error=error, count=count)
104
105
106@app.route('/add', methods=['GET', 'POST'])
107@login_required
108def add():
109 if request.method == 'GET':
110 return render_template('add.html', name=name, role=role, school_css=css, table=table)
111 else:
112 reqList = request.form.getlist('requirements')
113 myGender=getGender(request.form.getlist('gender'))
114
115 reqString = "["
116 for i in reqList[:-1]:
117 reqString += "'"+i+"',"
118 reqString += "'"+reqList[-1]+"']"
119
120 print("reqString: ",reqString)
121 conn = sqlite3.connect('pathfinder.db')
122 c = conn.cursor()
123 sql = "INSERT INTO {} VALUES (?, ?, ?, ?, ?, ?, ?)".format(table)
124 # QUERY EXECUTION
125 c.execute(sql, (request.form['scholarship_name'],
126 request.form['scholarship_gpa'],
127 request.form['scholarship_amount'],
128 myGender,
129 request.form['specific_essay'],
130 reqString,
131 "['']"))
132 conn.commit()
133
134
135 return redirect(url_for('view'))
136
137@app.route('/logout')
138def logout():
139 session.pop('logged_in', None)
140 flash('You were logged out')
141 return redirect(url_for('login'))
142
143
144@app.route('/main')
145@login_required
146def main():
147 return render_template('about.html', name=name, role=role, school_css=css, table=table)
148
149@app.route('/forms', methods=['GET', 'POST'])
150@login_required
151def forms():
152 global sorted_schol_names, schol_names, all_gpas_list, all_genders_list
153 g.db = connect_db()
154 cur = g.db.execute("SELECT * FROM %s" % table)
155 all_reqs = [dict(reqs=row[5], gender=row[3], gpa=row[1]) for row in cur.fetchall()]
156 g.db.close()
157 all_genders_list = []
158 all_gpas_list = []
159 for i in all_reqs:
160 gender = i['gender']
161 gpa = i['gpa']
162 all_gpas_list.append(gpa)
163 all_genders_list.append(gender)
164
165 if request.method == 'GET':
166 reqs2 = getUnique(all_reqs)
167 return render_template('forms.html', reqs=reqs2, school_css=css, role=role)
168
169 else:
170 #cleans up and gathers form information
171 gender_temp = request.form['gender']
172 gender = gender_temp.lower()
173 gpa = float(request.form['gpa'])
174 selected_reqs = request.form.getlist('req')
175
176 # begins proccess to sort
177 sorted_selected_reqs = getMatches(all_reqs, selected_reqs, gender, gpa, table, all_gpas_list, all_genders_list) #checks what scholarship it matches
178 schol_names = getScholNames(table) #gets name of scholarships
179 sorted_schol_names = getSortedNames(sorted_selected_reqs,schol_names) #gets name of scholarships user has matched for
180
181 return redirect(url_for('completedForm'))
182
183@app.route('/completedForm')
184@login_required
185def completedForm():
186 g.db = connect_db()
187 cur = g.db.execute("SELECT info, name FROM %s" % table)
188 all_info = [dict(info=row[0], name=row[1]) for row in cur.fetchall()]
189 g.db.close()
190 print(all_info)
191 info_names = []
192 for i in all_info:
193 a6 = i['name']
194 for v in sorted_schol_names:
195 if a6 == v:
196 x = i['info']
197 #print(type(x))
198 #print(x)
199 z = ast.literal_eval(x)
200 #print(type(z))
201 #print(z)
202 info_names.append(z)
203 #z = ast.literal_eval(x)
204 print(info_names)
205 for i in range(0,len(sorted_schol_names)):
206 print(sorted_schol_names[i])
207 print(info_names[i])
208
209 return render_template('completedform.html', scholarships=sorted_schol_names, school_css=css, role=role, addit_info=info_names, amount=len(sorted_schol_names))
210
211
212
213@app.route('/view')
214@login_required
215def view():
216 g.db = connect_db()
217 cur = g.db.execute("SELECT * FROM %s" % table)
218 all_schol = [dict(name=row[0], gpa=row[1], amt=row[2], gender=row[3], spef=row[4], reqs=row[5], info=row[6]) for row in cur.fetchall()]
219 g.db.close()
220 print(all_schol)
221 scholarships = []
222 for d in all_schol:
223 temp = []
224 reqs=[]
225 a1 = d['name']
226 a2 = d['gpa']
227 a3 = d['amt']
228 a4 = d['gender']
229 a5 = d['spef']
230 a6 = d['reqs']
231 a6 = d["reqs"]
232 a6 = ast.literal_eval(a6) #this makes a string thats formatted into a list an actual list
233 reqs =[]
234 for i in a6:
235 if delim in i: #check if requirements contain OR
236 term = i.replace(delim,'or')
237 print(term)
238 reqs.append(term)
239 else:
240 reqs.append(i)
241
242
243 a7 = d['info']
244 a7 = ast.literal_eval(a7)
245 print(a7)
246 temp.append(a1)
247 temp.append(a2)
248 temp.append(a3)
249 temp.append(a4)
250 temp.append(a5)
251 temp.append(reqs)
252 temp.append(a7)
253 scholarships.append(temp)
254 print(scholarships)
255 return render_template('view.html', scholarships=scholarships, school_css=css, role=role)
256
257
258
259
260if __name__ == '__main__':
261 app.run(debug=True)