-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__init__.py
More file actions
89 lines (61 loc) · 2.43 KB
/
__init__.py
File metadata and controls
89 lines (61 loc) · 2.43 KB
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
import logging
import os
from flask import Flask
flask_app: Flask = None
def create_app(
config_path='time_tracker_api.config.DefaultConfig', config_data=None
):
global flask_app
flask_app = Flask(__name__)
init_app_config(flask_app, config_path, config_data)
init_app(flask_app)
return flask_app
def init_app_config(app: Flask, config_path: str, config_data: dict = None):
if config_path:
app.config.from_object(config_path)
else:
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# Located in `/instance`
app.config.from_pyfile('config.py', silent=True)
if config_data:
app.config.update(config_data)
def init_app(app: Flask):
from time_tracker_api.database import init_app as init_database
init_database(app)
from time_tracker_api.api import init_app
init_app(app)
if app.config.get('DEBUG'):
app.logger.setLevel(logging.DEBUG)
add_debug_toolbar(app)
add_werkzeug_proxy_fix(app)
cors_origins = app.config.get('CORS_ORIGINS')
if cors_origins:
enable_cors(app, cors_origins)
def add_debug_toolbar(app: Flask):
app.config['DEBUG_TB_PANELS'] = (
'flask_debugtoolbar.panels.versions.VersionDebugPanel',
'flask_debugtoolbar.panels.timer.TimerDebugPanel',
'flask_debugtoolbar.panels.headers.HeaderDebugPanel',
'flask_debugtoolbar.panels.request_vars.RequestVarsDebugPanel',
'flask_debugtoolbar.panels.config_vars.ConfigVarsDebugPanel',
'flask_debugtoolbar.panels.template.TemplateDebugPanel',
'flask_debugtoolbar.panels.logger.LoggingPanel',
'flask_debugtoolbar.panels.route_list.RouteListDebugPanel',
'flask_debugtoolbar.panels.profiler.ProfilerDebugPanel',
)
from flask_debugtoolbar import DebugToolbarExtension
toolbar = DebugToolbarExtension()
toolbar.init_app(app)
def enable_cors(app: Flask, cors_origins: str):
from flask_cors import CORS
cors_origins_list = cors_origins.split(",")
CORS(app, resources={r"/*": {"origins": cors_origins_list}})
app.logger.info("Set CORS access to [%s]" % cors_origins)
def add_werkzeug_proxy_fix(app: Flask):
from werkzeug.middleware.proxy_fix import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)
app.logger.info("Add ProxyFix to serve swagger.json over https.")