From 10feafdffc78525f0c794f1ea5c00602d4a568a5 Mon Sep 17 00:00:00 2001
From: David Trattnig <david@subsquare.at>
Date: Mon, 27 Nov 2023 18:59:23 +0100
Subject: [PATCH] refactor: add typing for config and logger

---
 src/aura_engine/app.py                  | 4 ++--
 src/aura_engine/base/config.py          | 4 ++--
 src/aura_engine/core/channels.py        | 3 +++
 src/aura_engine/core/client.py          | 8 ++++++--
 src/aura_engine/core/mixer.py           | 8 +++++---
 src/aura_engine/engine.py               | 8 +++++---
 src/aura_engine/events.py               | 6 ++++--
 src/aura_engine/plugins/clock.py        | 6 ++++--
 src/aura_engine/scheduling/api.py       | 2 +-
 src/aura_engine/scheduling/scheduler.py | 4 ++--
 src/aura_engine/scheduling/utils.py     | 8 +++++---
 11 files changed, 39 insertions(+), 22 deletions(-)

diff --git a/src/aura_engine/app.py b/src/aura_engine/app.py
index 6af8781e..a0ef502c 100755
--- a/src/aura_engine/app.py
+++ b/src/aura_engine/app.py
@@ -40,8 +40,8 @@ class EngineRunner:
     """
 
     logger: logging.Logger
-    config = confuse.Configuration
-    engine = None
+    config: confuse.Configuration
+    engine: Engine
 
     def __init__(self):
         """
diff --git a/src/aura_engine/base/config.py b/src/aura_engine/base/config.py
index 572c7fa2..beee1bdc 100644
--- a/src/aura_engine/base/config.py
+++ b/src/aura_engine/base/config.py
@@ -82,8 +82,8 @@ class AuraConfig:
     _instance = None
     config_file_path = ""
     confuse_config = None
-    config = None  # points to a validated config (hopefully later)
-    logger = None
+    config: confuse.Configuration = None  # TODO points to a validated config (hopefully later)
+    logger: logging.Logger = None
 
     @classmethod
     @property
diff --git a/src/aura_engine/core/channels.py b/src/aura_engine/core/channels.py
index 9a8d3541..7af09d7b 100644
--- a/src/aura_engine/core/channels.py
+++ b/src/aura_engine/core/channels.py
@@ -570,6 +570,9 @@ class ChannelFactory:
     A factory to construct channels based on a given channel name.
     """
 
+    logger: logging.Logger
+    config: confuse.Configuration
+
     def __init__(self, mixer):
         """
         Initialize the channel factory.
diff --git a/src/aura_engine/core/client.py b/src/aura_engine/core/client.py
index 96704b8a..f0f6cc6e 100644
--- a/src/aura_engine/core/client.py
+++ b/src/aura_engine/core/client.py
@@ -25,6 +25,8 @@ import logging
 import socket
 import urllib.parse
 
+import confuse
+
 from aura_engine.base.config import AuraConfig
 from aura_engine.base.lang import private, synchronized
 from aura_engine.base.utils import SimpleUtil as SU
@@ -40,7 +42,8 @@ class CoreClient:
     skip_log_commands = ("aura_engine.status", "mixer.volume")
 
     instance = None
-    logger = None
+    logger: logging.Logger
+    config: confuse.Configuration
     connection = None
     event_dispatcher = None
     conn = None
@@ -223,7 +226,8 @@ class CoreConnection:
 
     ENCODING = "UTF-8"
 
-    logger = None
+    logger: logging.Logger
+    config: confuse.Configuration
     socket_path = None
     socket = None
     connected = None
diff --git a/src/aura_engine/core/mixer.py b/src/aura_engine/core/mixer.py
index ca933fce..13a7519e 100644
--- a/src/aura_engine/core/mixer.py
+++ b/src/aura_engine/core/mixer.py
@@ -27,6 +27,8 @@ set of channels with their own control options.
 import logging
 import time
 
+import confuse
+
 from aura_engine.base.api import LiquidsoapUtil as LU
 from aura_engine.base.config import AuraConfig
 from aura_engine.base.lang import private
@@ -44,8 +46,8 @@ class Mixer:
     A virtual mixer.
     """
 
-    config = None
-    logger = None
+    logger: logging.Logger
+    config: confuse.Configuration
     client = None
     mixer_id = None
     channels = None
@@ -63,8 +65,8 @@ class Mixer:
             client (PlayoutClient): The client for controlling playout
 
         """
-        self.config = AuraConfig.instance.config
         self.logger = logging.getLogger("engine")
+        self.config = AuraConfig.instance.config
         self.mixer_id = mixer_id
         self.client = client
         self.channel_names = []
diff --git a/src/aura_engine/engine.py b/src/aura_engine/engine.py
index dfc5c00f..424d0f7f 100644
--- a/src/aura_engine/engine.py
+++ b/src/aura_engine/engine.py
@@ -29,6 +29,7 @@ import time
 from contextlib import suppress
 from enum import Enum
 
+import confuse
 import tomli
 
 from aura_engine.base.api import LiquidsoapUtil as LU
@@ -55,8 +56,9 @@ class Engine:
     """
 
     instance = None
+    logger: logging.Logger
+    config: confuse.Configuration
     engine_time_offset = 0.0
-    logger = None
     scheduler = None
     event_dispatcher = None
     client = None
@@ -258,8 +260,8 @@ class Player:
         INSTANT = "instant"
         FADE = "fade"
 
-    config = None
-    logger = None
+    logger: logging.Logger
+    config: confuse.Configuration
     channels = None
     resource_map = None
     event_dispatcher = None
diff --git a/src/aura_engine/events.py b/src/aura_engine/events.py
index 172dce0d..9deacedd 100644
--- a/src/aura_engine/events.py
+++ b/src/aura_engine/events.py
@@ -25,6 +25,8 @@ import datetime
 import logging
 from threading import Thread
 
+import confuse
+
 from aura_engine.base.config import AuraConfig
 from aura_engine.scheduling.domain import PlaylistItem
 from aura_engine.scheduling.scheduler import AuraScheduler
@@ -71,8 +73,8 @@ class EngineEventDispatcher:
     Execute handlers for engine events.
     """
 
-    logger = None
-    config = None
+    logger: logging.Logger
+    config: confuse.Configuration
 
     subscriber_registry = None
     engine = None
diff --git a/src/aura_engine/plugins/clock.py b/src/aura_engine/plugins/clock.py
index ea6c6dd1..44991ea0 100644
--- a/src/aura_engine/plugins/clock.py
+++ b/src/aura_engine/plugins/clock.py
@@ -31,6 +31,8 @@ TODO Refacotr: It should be reviewed if it's worth storing all the current, addi
 import logging
 from datetime import datetime, timedelta
 
+import confuse
+
 import aura_engine.scheduling.domain as domain
 from aura_engine.base.api import SimpleRestApi
 from aura_engine.base.config import AuraConfig
@@ -43,8 +45,8 @@ class ClockInfoHandler:
     Send current studio clock information to the Engine API endpoint.
     """
 
-    logger = None
-    config = None
+    logger: logging.Logger
+    config: confuse.Configuration
     api = None
     engine = None
 
diff --git a/src/aura_engine/scheduling/api.py b/src/aura_engine/scheduling/api.py
index f03f58c0..ee1e6248 100644
--- a/src/aura_engine/scheduling/api.py
+++ b/src/aura_engine/scheduling/api.py
@@ -64,8 +64,8 @@ class ApiFetcher(threading.Thread):
 
     """
 
-    config: confuse.Configuration
     logging: logging.Logger
+    config: confuse.Configuration
     queue = None
     has_already_fetched = False
     stop_event = None
diff --git a/src/aura_engine/scheduling/scheduler.py b/src/aura_engine/scheduling/scheduler.py
index 5ca45fd3..234b4e92 100644
--- a/src/aura_engine/scheduling/scheduler.py
+++ b/src/aura_engine/scheduling/scheduler.py
@@ -134,7 +134,7 @@ class PlayCommand(EngineExecutor):
     """
 
     engine: engine.Engine = None
-    config: AuraConfig = None
+    config: confuse.Configuration
 
     def __init__(self, engine: engine.Engine, items: [PlaylistItem]):
         """Initialize the play command.
@@ -226,7 +226,7 @@ class AuraScheduler(threading.Thread):
     TimeslotCommandClass: EngineExecutor = TimeslotCommand
     PlayCommandClass: EngineExecutor = PlayCommand
 
-    config: AuraConfig
+    config: confuse.Configuration
     logger: logging.Logger
     engine: engine.Engine
     timetable: timetable.TimetableService
diff --git a/src/aura_engine/scheduling/utils.py b/src/aura_engine/scheduling/utils.py
index 16ddda32..6308b1d6 100644
--- a/src/aura_engine/scheduling/utils.py
+++ b/src/aura_engine/scheduling/utils.py
@@ -26,6 +26,8 @@ from __future__ import annotations
 
 import logging
 
+import confuse
+
 import aura_engine.scheduling as scheduling
 from aura_engine.base.config import AuraConfig
 from aura_engine.base.utils import SimpleUtil as SU
@@ -38,15 +40,15 @@ class M3UPlaylistProcessor:
     Render a M3U Playlist as a engine compatible playlist dictionary.
     """
 
-    config = None
-    logging = None
+    logging: logging.Logger
+    config: confuse.Configuration
     playlist_folder = None
 
     def __init__(self):
         """
         Initialize.
         """
-        self.config = AuraConfig.instance
+        self.config = AuraConfig.instance.config
         self.logger = logging.getLogger("engine")
         self.playlist_folder = ResourceUtil.playlist_folder_path()
 
-- 
GitLab