-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.py
79 lines (61 loc) · 1.92 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
from dotenv import load_dotenv
from flask import Flask, request
from flask_bootstrap import Bootstrap
from flask_datepicker import datepicker
from flask.templating import render_template
from qrcode_generator import create_qrcode, IMG_OUTPUT_PATH
from waitress import serve
import forms
import inspect
import os
import sys
#
# Setup
#
load_dotenv() # Load environment variables
app = Flask(__name__)
#app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
app.config['SECRET_KEY'] = os.urandom(32)
Bootstrap(app)
datepicker(app)
if not os.path.exists(IMG_OUTPUT_PATH):
# Creates file path to output images, if not already existent
os.mkdir(IMG_OUTPUT_PATH)
#
# App routes
#
@app.route('/', methods=['POST', 'GET'])
def homepage():
"""
Renders application homepage from HTML file.
"""
forms_list = map(lambda x: (eval('forms.' + x[0])(), x[0], eval('forms.' + x[0]).name),
inspect.getmembers(sys.modules['forms'],
lambda x:
inspect.isclass(x) and issubclass(x, forms.CustomFlaskForm) and x is not forms.CustomFlaskForm))
return render_template(
'index.html',
title='QRCode Generator',
forms=list(forms_list),
)
@app.route('/generate_qrcode', methods=['POST'])
def generate_qrcode():
"""
Renders the generated QR code and prompts the user to download it or generate another.
"""
qr_content = eval(
'forms.' + request.form['form_type']).to_qr_string(request.form.to_dict())
img_path = create_qrcode(qr_content)
return render_template(
'generate_qrcode.html',
title='generated QRCode',
img=img_path,
content=qr_content)
#
# Run!
#
if __name__ == "__main__":
if os.getenv('APP_DEBUG') == 'y':
app.run(threaded=True, port=9691, debug=True)
else:
serve(app, port=9691, host='0.0.0.0', url_scheme='https')