80 lines
2.9 KiB
Python
80 lines
2.9 KiB
Python
import os
|
|
import time
|
|
|
|
from flask import Flask, send_from_directory
|
|
from src.service.ModelStore import ModelStore
|
|
from src.service.TemplateRenderer import TemplateRenderer
|
|
from src.controller.PlayerController import PlayerController
|
|
from src.controller.SlideshowController import SlideshowController
|
|
from src.controller.FleetController import FleetController
|
|
from src.controller.SysinfoController import SysinfoController
|
|
from src.controller.SettingsController import SettingsController
|
|
from src.constant.WebDirConstant import WebDirConstant
|
|
|
|
|
|
class WebServer:
|
|
|
|
MAX_UPLOADS = 16 * 1024 * 1024
|
|
|
|
def __init__(self, project_dir: str, model_store: ModelStore, template_renderer: TemplateRenderer):
|
|
self._project_dir = project_dir
|
|
self._model_store = model_store
|
|
self._template_renderer = template_renderer
|
|
self._debug = self._model_store.config().map().get('debug')
|
|
self.setup()
|
|
|
|
def run(self) -> None:
|
|
self._app.run(
|
|
host=self._model_store.config().map().get('bind'),
|
|
port=self._model_store.config().map().get('port'),
|
|
debug=self._debug
|
|
)
|
|
|
|
def setup(self) -> None:
|
|
self._setup_flask_app()
|
|
self._setup_web_globals()
|
|
self._setup_web_errors()
|
|
self._setup_web_controllers()
|
|
|
|
def get_app(self):
|
|
return self._app
|
|
|
|
def _get_template_folder(self) -> str:
|
|
return "{}/{}".format(self._project_dir, WebDirConstant.FOLDER_TEMPLATES)
|
|
|
|
def _get_static_folder(self) -> str:
|
|
return "{}/{}".format(self._project_dir, WebDirConstant.FOLDER_STATIC)
|
|
|
|
def _setup_flask_app(self) -> None:
|
|
self._app = Flask(
|
|
__name__,
|
|
template_folder=self._get_template_folder(),
|
|
static_folder=self._get_static_folder(),
|
|
)
|
|
|
|
self._app.config['UPLOAD_FOLDER'] = "{}/{}".format(WebDirConstant.FOLDER_STATIC, WebDirConstant.FOLDER_STATIC_WEB_UPLOADS)
|
|
self._app.config['MAX_CONTENT_LENGTH'] = self.MAX_UPLOADS
|
|
|
|
if self._debug:
|
|
self._app.config['TEMPLATES_AUTO_RELOAD'] = True
|
|
|
|
def _setup_web_controllers(self) -> None:
|
|
PlayerController(self._app, self._model_store, self._template_renderer)
|
|
SlideshowController(self._app, self._model_store, self._template_renderer)
|
|
SettingsController(self._app, self._model_store, self._template_renderer)
|
|
SysinfoController(self._app, self._model_store, self._template_renderer)
|
|
|
|
if self._model_store.variable().map().get('fleet_enabled').as_bool():
|
|
FleetController(self._app, self._model_store, self._template_renderer)
|
|
|
|
def _setup_web_globals(self) -> None:
|
|
@self._app.context_processor
|
|
def inject_global_vars() -> dict:
|
|
return self._template_renderer.get_view_globals()
|
|
|
|
def _setup_web_errors(self) -> None:
|
|
@self._app.errorhandler(404)
|
|
def not_found(e):
|
|
return send_from_directory(self._get_template_folder(), 'core/error404.html'), 404
|
|
|