-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
152 lines (121 loc) · 3.96 KB
/
main.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
from flask import Flask, g, session
from flask_sqlalchemy import SQLAlchemy
import json
from dotenv import load_dotenv
import os
# Route Handlers
from route_handlers.Auth.UserLoginHandler import UserLoginHandler
from route_handlers.Auth.UserRegisterHandler import UserRegisterHandler
from route_handlers.Auth.UserLostPasswordHandler import UserLostPasswordHandler
from route_handlers.Auth.UserLogoutHandler import UserLogoutHandler
from route_handlers.Auth.PWResetHandler import PWResetHandler
from route_handlers.SaveHandler import SaveHandler
from route_handlers.HomeHandler import HomeHandler
from route_handlers.UserSheetHandler import UserSheetHandler
from route_handlers.DownloadFileHander import DownloadFileHander
from route_handlers.ImportHandler import ImportHandler
from route_handlers.HTMLToPDFHandler import HtmlToPdfHandler
# Load environment variables from .env file
load_dotenv()
app = Flask(__name__, template_folder='templates')
app.secret_key = os.getenv('SECRET_KEY')
app.config.update(
MYSQL_HOST=os.getenv('MYSQL_HOST'),
MYSQL_DATABASE=os.getenv('MYSQL_DATABASE'),
MYSQL_USER=os.getenv('MYSQL_USER'),
MYSQL_PASSWORD=os.getenv('MYSQL_PASSWORD'),
SQLALCHEMY_DATABASE_URI=os.getenv('SQLALCHEMY_DATABASE_URI'),
SQLALCHEMY_TRACK_MODIFICATIONS=os.getenv('SQLALCHEMY_TRACK_MODIFICATIONS'),
APP_TITLE=os.getenv('APP_TITLE')
)
# Initialising Database
db = SQLAlchemy(app)
@app.context_processor
def inject_app_title():
return dict(APP_TITLE=app.config['APP_TITLE'])
# Base Handlers
class BaseHandler:
@property
def db(self):
if 'db' not in g:
g.db = db
return g.db
def get_current_user(self):
user_json = session.get('user')
if user_json:
return json.loads(user_json)
return None
def set_current_user(self, user):
if user:
session['user'] = json.dumps(user)
else:
session.pop('user', None)
# This code runs before every request
@app.before_request
def before_request():
g.handler = BaseHandler()
# This code runs when app shuts down
@app.teardown_appcontext
def teardown_db(error):
if 'db' in g:
g.db.session.close()
# Routes
@app.route('/', methods=['GET'])
def index():
return HomeHandler.get()
@app.route('/login', methods=['GET'])
def login_get():
return UserLoginHandler.get()
@app.route('/login', methods=['POST'])
def login_post():
return UserLoginHandler.post()
@app.route('/register', methods=['GET'])
def register_get():
return UserRegisterHandler.get()
@app.route('/register', methods=['POST'])
def register_post():
return UserRegisterHandler.post()
@app.route('/lostpw', methods=['GET'])
def lostpw_get():
return UserLostPasswordHandler.get()
@app.route('/lostpw', methods=['POST'])
def lostpw_post():
return UserLostPasswordHandler.post()
@app.route('/logout', methods=['GET'])
def logout_get():
return UserLogoutHandler.get()
@app.route('/logout', methods=['POST'])
def logout_post():
return UserLogoutHandler.post()
@app.route('/save', methods=['GET'])
def save_get():
return SaveHandler.get()
@app.route('/save', methods=['POST'])
def save_post():
return SaveHandler.post()
@app.route('/usersheet', methods=['POST'])
def usersheet_post():
return UserSheetHandler.post()
@app.route('/pwreset', methods=['GET'])
def pwreset_get():
return PWResetHandler.get()
@app.route('/pwreset', methods=['POST'])
def pwreset_post():
return PWResetHandler.post()
@app.route('/downloadfile', methods=['POST'])
def download_post():
return DownloadFileHander.post()
@app.route('/import', methods=['GET'])
def import_get():
return ImportHandler.get()
@app.route('/import', methods=['POST'])
def import_post():
return ImportHandler.post()
@app.route('/htmltopdf', methods=['GET'])
def import_post():
return HtmlToPdfHandler.get()
@app.route('/htmltopdf', methods=['POST'])
def import_post():
return HtmlToPdfHandler.post()
if __name__ == '__main__':
app.run(debug=True)