102 lines
2.9 KiB
Python
102 lines
2.9 KiB
Python
|
import logging
|
||
|
import sys
|
||
|
import time
|
||
|
from zoneinfo import ZoneInfo
|
||
|
|
||
|
from flask import current_app, Flask, g
|
||
|
from werkzeug.middleware.proxy_fix import ProxyFix
|
||
|
|
||
|
from bricktracker.configuration_list import BrickConfigurationList
|
||
|
from bricktracker.login import LoginManager
|
||
|
from bricktracker.navbar import Navbar
|
||
|
from bricktracker.sql import close
|
||
|
from bricktracker.version import __version__
|
||
|
from bricktracker.views.add import add_page
|
||
|
from bricktracker.views.admin import admin_page
|
||
|
from bricktracker.views.error import error_404
|
||
|
from bricktracker.views.index import index_page
|
||
|
from bricktracker.views.instructions import instructions_page
|
||
|
from bricktracker.views.login import login_page
|
||
|
from bricktracker.views.minifigure import minifigure_page
|
||
|
from bricktracker.views.part import part_page
|
||
|
from bricktracker.views.set import set_page
|
||
|
from bricktracker.views.wish import wish_page
|
||
|
|
||
|
|
||
|
def setup_app(app: Flask) -> None:
|
||
|
# Load the configuration
|
||
|
BrickConfigurationList(app)
|
||
|
|
||
|
# Set the logging level
|
||
|
if app.config['DEBUG'].value:
|
||
|
logging.basicConfig(
|
||
|
stream=sys.stdout,
|
||
|
level=logging.DEBUG,
|
||
|
format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s', # noqa: E501
|
||
|
)
|
||
|
else:
|
||
|
logging.basicConfig(
|
||
|
stream=sys.stdout,
|
||
|
level=logging.INFO,
|
||
|
format='[%(asctime)s] %(levelname)s - %(message)s',
|
||
|
)
|
||
|
|
||
|
# Load the navbar
|
||
|
Navbar(app)
|
||
|
|
||
|
# Setup the login manager
|
||
|
LoginManager(app)
|
||
|
|
||
|
# I don't know :-)
|
||
|
app.wsgi_app = ProxyFix(
|
||
|
app.wsgi_app,
|
||
|
x_for=1,
|
||
|
x_proto=1,
|
||
|
x_host=1,
|
||
|
x_port=1,
|
||
|
x_prefix=1,
|
||
|
)
|
||
|
|
||
|
# Register errors
|
||
|
app.register_error_handler(404, error_404)
|
||
|
|
||
|
# Register routes
|
||
|
app.register_blueprint(add_page)
|
||
|
app.register_blueprint(admin_page)
|
||
|
app.register_blueprint(index_page)
|
||
|
app.register_blueprint(instructions_page)
|
||
|
app.register_blueprint(login_page)
|
||
|
app.register_blueprint(minifigure_page)
|
||
|
app.register_blueprint(part_page)
|
||
|
app.register_blueprint(set_page)
|
||
|
app.register_blueprint(wish_page)
|
||
|
|
||
|
# An helper to make global variables available to the
|
||
|
# request
|
||
|
@app.before_request
|
||
|
def before_request() -> None:
|
||
|
def request_time() -> str:
|
||
|
elapsed = time.time() - g.request_start_time
|
||
|
if elapsed < 1:
|
||
|
return '{elapsed:.0f}ms'.format(elapsed=elapsed*1000)
|
||
|
else:
|
||
|
return '{elapsed:.2f}s'.format(elapsed=elapsed)
|
||
|
|
||
|
# Login manager
|
||
|
g.login = LoginManager
|
||
|
|
||
|
# Execution time
|
||
|
g.request_start_time = time.time()
|
||
|
g.request_time = request_time
|
||
|
|
||
|
# Register the timezone
|
||
|
g.timezone = ZoneInfo(current_app.config['TIMEZONE'].value)
|
||
|
|
||
|
# Version
|
||
|
g.version = __version__
|
||
|
|
||
|
# Make sure all connections are closed at the end
|
||
|
@app.teardown_appcontext
|
||
|
def close_connections(exception, /) -> None:
|
||
|
close()
|