From 505581483c8ca8108570298490a0268954eb820f Mon Sep 17 00:00:00 2001 From: David Trattnig <david@subsquare.at> Date: Wed, 11 Oct 2023 14:08:27 +0200 Subject: [PATCH] refactor: make scheduler bootable, remove db init --- src/aura_engine/events.py | 1 + src/aura_engine/scheduling/scheduler.py | 45 ++++++++++++++----------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/aura_engine/events.py b/src/aura_engine/events.py index 2e92116d..baa7f1ef 100644 --- a/src/aura_engine/events.py +++ b/src/aura_engine/events.py @@ -150,6 +150,7 @@ class EngineEventDispatcher: from aura_engine.scheduling.scheduler import AuraScheduler self.scheduler = AuraScheduler(self.engine) + self.scheduler.boot() self.call_event("on_initialized", None) def on_boot(self): diff --git a/src/aura_engine/scheduling/scheduler.py b/src/aura_engine/scheduling/scheduler.py index 387eda71..600607f9 100644 --- a/src/aura_engine/scheduling/scheduler.py +++ b/src/aura_engine/scheduling/scheduler.py @@ -21,10 +21,16 @@ The scheduler. """ +from __future__ import annotations + import logging import threading import time +import aura_engine +import aura_engine.scheduling.api as api +import aura_engine.scheduling.timetable as timetable +import aura_engine.scheduling.utils as utils from aura_engine.base.config import AuraConfig from aura_engine.base.utils import SimpleUtil as SU from aura_engine.control import EngineExecutor @@ -32,9 +38,6 @@ from aura_engine.core.channels import LoadSourceException from aura_engine.engine import Engine, Player from aura_engine.resources import ResourceClass, ResourceUtil from aura_engine.scheduling.domain import PlaylistItem -from aura_engine.scheduling.models import AuraDatabaseModel -from aura_engine.scheduling.timetable import TimetableService -from aura_engine.scheduling.utils import TimetableRenderer class NoActiveTimeslotException(Exception): @@ -55,37 +58,41 @@ class AuraScheduler(threading.Thread): """ - config: AuraConfig = None - logger = None - engine: Engine = None - exit_event: threading.Event = None - timetable_renderer: TimetableRenderer = None - timetable: TimetableService = None - message_timer = [] - is_initialized: bool = None - is_engine_ready: bool = None - - def __init__(self, engine): + config: AuraConfig + logger: logging.Logger + engine: Engine + timetable: timetable.TimetableService + timetable_renderer: utils.TimetableRenderer + exit_event: threading.Event + is_initialized: bool + is_engine_ready: bool + + def __init__(self, engine: aura_engine): self.config = AuraConfig.config() self.logger = logging.getLogger("engine") - self.timetable = TimetableService() - self.timetable_renderer = TimetableRenderer(self) + self.timetable = timetable.TimetableService(self.config.get("cache_dir")) + self.timetable_renderer = utils.TimetableRenderer(self) self.engine = engine self.engine.scheduler = self self.is_soundsytem_init = False # Scheduler Initialization - AuraDatabaseModel.init_database() + self.exit_event = None self.is_initialized = False self.is_engine_ready = False + def boot(self): + """ + Start the scheduler in a thread. + """ # Init scheduling thread threading.Thread.__init__(self) self.exit_event = threading.Event() self.start() def run(self): - """Execute the scheduler. + """ + Execute the scheduler. Called when thread is started via `start()`. It does the following: @@ -107,7 +114,7 @@ class AuraScheduler(threading.Thread): self.logger.info(SU.cyan(msg)) # Load some stuff from the API in any case - self.timetable.refresh() + self.timetable.refresh(api.ApiFetcher()) # Queue only when the engine is ready to play if self.is_initialized: -- GitLab