forked from OpenDSA/OpenDSA-LTI
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathmain.py
128 lines (117 loc) · 3.44 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
import json
import os, sys
import logging
import logging.config
from random import randint
import jinja2
from natsort import natsorted
from flask import Flask, render_template
with open('secrets.json') as secrets_file:
secrets = json.load(secrets_file)
VERSION = '0.1.0'
app = Flask(__name__)
app.config['TEMPLATES_AUTO_RELOAD'] = True
#from werkzeug.contrib.profiler import ProfilerMiddleware
#app.config['PROFILE'] = True
#app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[50])
# Modify Jinja2
app.jinja_env.filters['zip'] = zip
def attempt_json_load(data):
try:
return json.loads(data)
except:
return {}
app.jinja_env.filters['json_load'] = attempt_json_load
app.jinja_env.filters['list'] = list
app.jinja_env.filters['natsorted'] = natsorted
def get_setting(assignment, *keys):
if assignment.settings:
settings = json.loads(assignment.settings)
else:
settings = {}
for key in keys:
if key in settings:
settings = settings[key]
else:
return None
return settings
app.jinja_env.filters['get_setting'] = get_setting
if secrets['PRODUCTION']:
app.config.from_object('config.ProductionConfig')
else:
app.config.from_object('config.TestingConfig')
ERROR_LOG = os.path.join(app.config['ROOT_DIRECTORY'],
'log/errors.log')
STUDENT_INTERACTION_LOG = os.path.join(app.config['ROOT_DIRECTORY'],
'log/student_interactions/student_interactions.log')
LOGGING = {
'version': 1,
'handlers': {
'console':{
'class':'logging.StreamHandler',
'formatter':'basicFormatter',
'level': 'WARNING',
},
'errorHandler': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': ERROR_LOG,
'level': 'WARNING',
'formatter': 'basicFormatter'
}
},
'loggers': {
'Feedbackfull': {
'level': 'INFO',
'handlers': ['FeedbackHandler']
},
'SystemLogger': {
'level': 'WARNING',
'handlers': ['console']
},
'StudentInteractions': {
'level': 'INFO',
'handlers': ['fileHandler']
}
},
'root': {
'level': 'WARNING',
'handlers': ['console', 'errorHandler']
},
'formatters': {
'basicFormatter': {
'format': '%(name)s[%(levelname)s] - %(message)s'
},
'simpleFormatter': {
'format': '%(message)s'
}
}
}
LOG_FILENAME = os.path.join(app.config['ROOT_DIRECTORY'], 'log/feedbackfull/feedbackfull.log')
if app.config['IS_PRODUCTION']:
LOGGING['handlers']['fileHandler'] = {
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': STUDENT_INTERACTION_LOG,
"level": "INFO",
'when': 'D',
'formatter': 'simpleFormatter'
}
else:
LOGGING['handlers']['fileHandler'] = {
'class': 'logging.handlers.RotatingFileHandler',
'filename': STUDENT_INTERACTION_LOG,
"level": "INFO",
'formatter': 'simpleFormatter'
}
LOGGING
LOGGING['handlers']['FeedbackHandler'] = {
'filename': LOG_FILENAME,
'formatter': 'simpleFormatter',
'class': 'logging.handlers.RotatingFileHandler'
}
logging.config.dictConfig(LOGGING)
# Assets
from controllers.assets import assets
# Email
from flask_mail import Mail
mail = Mail(app)
import controllers