-
Notifications
You must be signed in to change notification settings - Fork 9
/
app.py
209 lines (168 loc) · 5.61 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#importing modules
from flask import Flask,render_template,request,redirect,url_for,send_from_directory,jsonify,abort,send_file
import os
from generate import Create
import generate
import glob
from datetime import datetime
import pymongo
import config
import time
import shutil
import pandas as pd
import updateFont
#specifing temp data
# valuetemp = {
# "Name": [550, 830],
# "College": [650,970],
# "Position": [1250, 1120],
# "Event": [550, 1260]
# }
# fonttemp={
# "name": 'arial.ttf',
# "size": 65,
# "color": (0,0,0)
# }
# certifytemp = {"verify": True,
# "coordinates": [30,1730]}
#app name
app=Flask(__name__)
def searchCertifyCode(code):
client = pymongo.MongoClient(config.MONGODB_URI, connectTimeoutMS=30000)
db = client.certify
col = db["userData"]
userData={}
for i in col.find({}):
currentCertifyCode = list(i.keys())[1]
if(currentCertifyCode==code):
userData = i[currentCertifyCode]
return userData
#app route for main page
@app.route('/', methods=['GET', 'POST'])
def home():
if request.method == 'GET':
return render_template("index.html")
#app route for verify page
@app.route('/verify', methods=['GET', 'POST'])
def verify():
if request.method == 'GET':
return render_template("verify.html")
#app route for verify check page
@app.route('/verify/check/<certifycode>', methods=['GET', 'POST'])
def verifycheck(certifycode):
image_exists_in_database = generate.retrieve_image_from_database(certifycode)
# The following line has become obsolete, verification is handeled through the database with the 'retrieve_image_from_database' funktion
arr = glob.glob("static/verified/images/" + certifycode + ".*")
#check if arr is not empty (means a file with same name exists)
if arr: # Possibly replace the following with 'image_exists_in_database'
#take first image
#split image path and get the end file name
image = arr[0].split('/')[-1]
#getting image path in flask template
image_url = url_for('static',filename='verified/images/'+ image)
#look for certify id and return data
verifiedUserData = searchCertifyCode(certifycode)
#return template and sending image url as parameter
return render_template("verified.html", image_url=image_url, userData=verifiedUserData)
else:
return render_template("notverified.html")
#app route for create upload page
@app.route('/create', methods=['GET', 'POST'])
def create_upload():
if request.method == 'GET':
return render_template("create_upload.html")
elif request.method == 'POST':
spreadsheet = request.files['spreadsheet']
template = request.files['template']
ts = int(datetime.today().timestamp())
#create directory for files
path = './static/temp/data/data_' + str(ts)
os.mkdir(path)
spreadsheet.save(path + '/' + "data.csv")
template.save(path + '/' + "template.jpg")
return redirect("/create/edit?ts=" + str(ts))
#app route for create edit page
@app.route('/create/edit', methods=['GET', 'POST'])
def create_edit():
if request.method == 'GET':
try:
ts = request.args.get('ts')
print(ts)
except:
ts=""
print("Couldnt get ts")
#url of folder with data
path = path = './static/temp/data/data_' + str(ts)
#url for data spreadsheet
spreadsheet = path + "/data.csv"
#reading dataframe
data = pd.read_csv(spreadsheet)
#making list of all columns
valuesTemp=list(data.columns)
#url for certificate to display
templateImg = '../static/temp/data/data_' + str(ts) + "/template.jpg"
return render_template("create_edit.html",values=valuesTemp, template=templateImg)
#app route for create api
@app.route('/create/api', methods=['POST'])
def create_api():
if request.method == 'POST':
#getting api request data
json = request.get_json()
print(json)
try:
print("Got ts")
print(json["ts"])
ts = json["ts"]
except:
ts=""
print("Couldnt get ts")
#print json data to check
print(json["json"])
json = json["json"]
#getting values
values = json['values']
font = json['font']
certify = json['certify']
#update font name and color with new values, refer updateFont.py
font = updateFont.updateFont(font)
#testing
# print(font)
# fonttemp["name"]=font["name"]
# fonttemp["color"] = font["color"]
#url of folder with data
path = path = './static/temp/data/data_' + str(ts)
#url for data spreadsheet
spreadsheet = path + "/data.csv"
#url for template image
template = path + "/template.jpg"
create = Create(template=template, spreadsheet=spreadsheet, values=values, font=font, certify=certify,ts=ts)
print("Creating files....")
create.generate()
print("Created files successfully!")
#delete teplate data
shutil.rmtree(path)
return str(ts)
#app route for thankyou page
@app.route('/create/thankyou', methods=['GET', 'POST'])
def create_thankyou():
if request.method == 'GET':
try:
ts = request.args.get('ts')
print(ts)
except:
ts=""
print("Couldnt get ts")
return render_template("create_download.html", ts=ts)
#app route for download page, redirects direct to file
@app.route('/download', methods=['GET', 'POST'])
def create_download():
if request.method == 'GET':
try:
ts = request.args.get('ts')
print(ts)
except:
ts=""
print("Couldnt get ts")
return send_file(("static/temp/download/download_" + ts + ".zip"), attachment_filename=("download_"+ts) , as_attachment=True)
if(__name__=='__main__'):
app.run(debug=True,use_reloader=True)