36 lines
1.3 KiB
Python
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])
|
|
|