From 2cccce5ca9eec31d62d846c7caf3f22cc80140e5 Mon Sep 17 00:00:00 2001
From: Chris Pastl <chris@crispybits.app>
Date: Wed, 16 Aug 2023 01:37:06 +0200
Subject: [PATCH] fix: use config singleton instance

---
 src/aura_engine/app.py                  |  2 +-
 src/aura_engine/base/config.py          | 10 +++++++++-
 src/aura_engine/core/channels.py        |  2 +-
 src/aura_engine/plugins/clock.py        |  2 +-
 src/aura_engine/plugins/monitor.py      |  2 +-
 src/aura_engine/scheduling/models.py    |  2 +-
 src/aura_engine/scheduling/programme.py |  2 +-
 src/aura_engine/scheduling/scheduler.py |  4 ++--
 src/aura_engine/scheduling/utils.py     |  2 +-
 9 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/aura_engine/app.py b/src/aura_engine/app.py
index 52765e31..958da7cf 100755
--- a/src/aura_engine/app.py
+++ b/src/aura_engine/app.py
@@ -35,7 +35,7 @@ from aura_engine.base.logger import AuraLogger
 from aura_engine.engine import Engine
 from aura_engine.scheduling.models import DB
 
-config = AuraConfig()
+config = AuraConfig.instance
 
 
 def configure_flask():
diff --git a/src/aura_engine/base/config.py b/src/aura_engine/base/config.py
index d95fe7ee..a5bfaebf 100644
--- a/src/aura_engine/base/config.py
+++ b/src/aura_engine/base/config.py
@@ -93,12 +93,20 @@ class AuraConfig:
     Holds the Engine Configuration as in the file `engine.ini`.
     """
 
-    instance = None
+    _instance = None
     yaml_path = ""
     confuse_config = None
     config = None  # points to a validated config (hopefully later)
     logger = None
 
+    @classmethod
+    @property
+    def instance(cls):
+        """Create and return singleton instance."""
+        if cls._instance is None:
+            cls._instance = AuraConfig()
+        return cls._instance
+
     def __init__(self, yaml_path="/etc/aura/engine.yaml"):
         """
         Initialize the configuration, defaults to `/etc/aura/engine.yaml`.
diff --git a/src/aura_engine/core/channels.py b/src/aura_engine/core/channels.py
index b2554bbd..e18bc36e 100644
--- a/src/aura_engine/core/channels.py
+++ b/src/aura_engine/core/channels.py
@@ -576,7 +576,7 @@ class ChannelFactory:
             mixer (Mixer): The mixer instance
 
         """
-        self.config = AuraConfig()
+        self.config = AuraConfig.instance
         self.logger = logging.getLogger("engine")
         self.mixer = mixer
 
diff --git a/src/aura_engine/plugins/clock.py b/src/aura_engine/plugins/clock.py
index 4bec67ed..0f1da1fe 100644
--- a/src/aura_engine/plugins/clock.py
+++ b/src/aura_engine/plugins/clock.py
@@ -45,7 +45,7 @@ class ClockInfoHandler:
         Initialize.
         """
         self.logger = logging.getLogger("engine")
-        self.config = AuraConfig.config().config
+        self.config = AuraConfig.instance.config
         self.api = SimpleRestApi()
         self.engine = engine
 
diff --git a/src/aura_engine/plugins/monitor.py b/src/aura_engine/plugins/monitor.py
index 4f29f068..190cd244 100644
--- a/src/aura_engine/plugins/monitor.py
+++ b/src/aura_engine/plugins/monitor.py
@@ -87,7 +87,7 @@ class AuraMonitor:
         Initialize Monitoring.
         """
         self.logger = logging.getLogger("engine")
-        self.config = AuraConfig.config()
+        self.config = AuraConfig.instance.config
         self.engine = engine
         self.status = dict()
         self.status["engine"] = dict()
diff --git a/src/aura_engine/scheduling/models.py b/src/aura_engine/scheduling/models.py
index d4d8cead..b6a5f8f6 100644
--- a/src/aura_engine/scheduling/models.py
+++ b/src/aura_engine/scheduling/models.py
@@ -45,7 +45,7 @@ from aura_engine.base.utils import SimpleUtil
 from aura_engine.resources import ResourceUtil
 
 # Initialize DB Model and session
-config = AuraConfig()
+config = AuraConfig.instance
 engine = sa.create_engine(config.get_database_uri())
 Base = declarative_base()
 Base.metadata.bind = engine
diff --git a/src/aura_engine/scheduling/programme.py b/src/aura_engine/scheduling/programme.py
index 24ab8fd0..3b42d0ca 100644
--- a/src/aura_engine/scheduling/programme.py
+++ b/src/aura_engine/scheduling/programme.py
@@ -50,7 +50,7 @@ class ProgrammeService:
     programme_store = None
 
     def __init__(self):
-        self.config = AuraConfig.config().config
+        self.config = AuraConfig.instance.config
         self.logger = logging.getLogger("engine")
         self.programme_store = ProgrammeStore()
 
diff --git a/src/aura_engine/scheduling/scheduler.py b/src/aura_engine/scheduling/scheduler.py
index 0313ae64..91131e71 100644
--- a/src/aura_engine/scheduling/scheduler.py
+++ b/src/aura_engine/scheduling/scheduler.py
@@ -65,7 +65,7 @@ class AuraScheduler(threading.Thread):
     is_engine_ready: bool = None
 
     def __init__(self, engine):
-        self.config = AuraConfig.config().config
+        self.config = AuraConfig.instance.config
         self.logger = logging.getLogger("engine")
         self.timetable = ProgrammeService()
         self.timetable_renderer = TimetableRenderer(self)
@@ -441,7 +441,7 @@ class TimeslotCommand(EngineExecutor):
             engine (Engine): The engine
             timeslot (Timeslot): The timeslot which is starting at this time
         """
-        self.config = AuraConfig()
+        self.config = AuraConfig.instance
         self.engine = engine
 
         now_unix = SU.timestamp()
diff --git a/src/aura_engine/scheduling/utils.py b/src/aura_engine/scheduling/utils.py
index bb1f29b3..1ce21d16 100644
--- a/src/aura_engine/scheduling/utils.py
+++ b/src/aura_engine/scheduling/utils.py
@@ -121,7 +121,7 @@ class M3UPlaylistProcessor:
     playlist_folder = None
 
     def __init__(self):
-        self.config = AuraConfig.config()
+        self.config = AuraConfig.instance
         self.logger = logging.getLogger("engine")
         self.playlist_folder = self.config.abs_playlist_path()
 
-- 
GitLab