obscreen/src/Application.py
2024-04-29 19:03:15 +02:00

36 lines
1.3 KiB
Python

import sys
import logging
import signal
import threading
from src.service.ModelStore import ModelStore
from src.service.PluginStore import PluginStore
from src.service.TemplateRenderer import TemplateRenderer
from src.service.WebServer import WebServer
from src.model.enum.HookType import HookType
class Application:
def __init__(self, project_dir: str):
self._project_dir = project_dir
self._stop_event = threading.Event()
self._model_store = ModelStore()
self._template_renderer = TemplateRenderer(project_dir=project_dir, model_store=self._model_store, render_hook=self.render_hook)
self._web_server = WebServer(project_dir=project_dir, model_store=self._model_store, template_renderer=self._template_renderer)
self._plugin_store = PluginStore(project_dir=project_dir, model_store=self._model_store, template_renderer=self._template_renderer, web_server=self._web_server)
signal.signal(signal.SIGINT, self.signal_handler)
def start(self) -> None:
self._web_server.run()
def signal_handler(self, signal, frame) -> None:
logging.info("Shutting down...")
self._stop_event.set()
sys.exit(0)
def render_hook(self, hook: HookType) -> str:
return self._template_renderer.render_hooks(self._plugin_store.map_hooks()[hook])