From a8394cecb07eb67aa2f84f291337c9a43eef265c Mon Sep 17 00:00:00 2001 From: David Trattnig <david@subsquare.at> Date: Fri, 29 Jul 2022 11:11:32 +0200 Subject: [PATCH] Namespace `aura_engine` for sources #95 --- .vscode/launch.json | 15 +++-------- pyproject.toml | 2 +- src/{ => aura_engine}/__init__.py | 0 run.py => src/aura_engine/app.py | 27 +++++++++---------- src/{ => aura_engine}/base/__init__.py | 0 src/{ => aura_engine}/base/api.py | 4 +-- src/{ => aura_engine}/base/config.py | 7 +++-- src/{ => aura_engine}/base/exceptions.py | 0 src/{ => aura_engine}/base/logger.py | 0 src/{ => aura_engine}/base/utils.py | 0 src/{ => aura_engine}/channels.py | 4 +-- src/{ => aura_engine}/client/client.py | 4 +-- src/{ => aura_engine}/client/connector.py | 10 +++---- src/{ => aura_engine}/client/playerclient.py | 2 +- src/{ => aura_engine}/control.py | 8 +++--- src/{ => aura_engine}/engine.py | 22 +++++++-------- src/{ => aura_engine}/events.py | 10 +++---- meta.py => src/aura_engine/meta.py | 0 src/{ => aura_engine}/mixer.py | 6 ++--- src/{ => aura_engine}/plugins/__init__.py | 0 src/{ => aura_engine}/plugins/clock.py | 8 +++--- src/{ => aura_engine}/plugins/mailer.py | 4 +-- src/{ => aura_engine}/plugins/monitor.py | 4 +-- src/{ => aura_engine}/resources.py | 0 src/{ => aura_engine}/scheduling/__init__.py | 0 src/{ => aura_engine}/scheduling/api.py | 4 +-- src/{ => aura_engine}/scheduling/models.py | 6 ++--- src/{ => aura_engine}/scheduling/programme.py | 12 ++++----- src/{ => aura_engine}/scheduling/scheduler.py | 20 +++++++------- src/{ => aura_engine}/scheduling/utils.py | 4 +-- 30 files changed, 89 insertions(+), 94 deletions(-) rename src/{ => aura_engine}/__init__.py (100%) rename run.py => src/aura_engine/app.py (87%) rename src/{ => aura_engine}/base/__init__.py (100%) rename src/{ => aura_engine}/base/api.py (98%) rename src/{ => aura_engine}/base/config.py (95%) rename src/{ => aura_engine}/base/exceptions.py (100%) rename src/{ => aura_engine}/base/logger.py (100%) rename src/{ => aura_engine}/base/utils.py (100%) rename src/{ => aura_engine}/channels.py (99%) rename src/{ => aura_engine}/client/client.py (98%) rename src/{ => aura_engine}/client/connector.py (97%) rename src/{ => aura_engine}/client/playerclient.py (99%) rename src/{ => aura_engine}/control.py (98%) rename src/{ => aura_engine}/engine.py (98%) rename src/{ => aura_engine}/events.py (97%) rename meta.py => src/aura_engine/meta.py (100%) rename src/{ => aura_engine}/mixer.py (99%) rename src/{ => aura_engine}/plugins/__init__.py (100%) rename src/{ => aura_engine}/plugins/clock.py (97%) rename src/{ => aura_engine}/plugins/mailer.py (98%) rename src/{ => aura_engine}/plugins/monitor.py (99%) rename src/{ => aura_engine}/resources.py (100%) rename src/{ => aura_engine}/scheduling/__init__.py (100%) rename src/{ => aura_engine}/scheduling/api.py (99%) rename src/{ => aura_engine}/scheduling/models.py (99%) rename src/{ => aura_engine}/scheduling/programme.py (98%) rename src/{ => aura_engine}/scheduling/scheduler.py (97%) rename src/{ => aura_engine}/scheduling/utils.py (99%) diff --git a/.vscode/launch.json b/.vscode/launch.json index e5cede45..1f0e9f28 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,25 +8,18 @@ "name": "Start Engine", "type": "python", "request": "launch", - "program": "${workspaceFolder}/run.py", + "program": "${workspaceFolder}/src/aura_engine/app.py", "console": "integratedTerminal" }, { - "name": "Start Engine Core", + "name": "Recreate Database", "type": "python", "request": "launch", - "program": "${workspaceFolder}/../engine-core/run.py", + "program": "${workspaceFolder}/src/aura_engine/app.py", "args": [ + "--recreate-database" ], "console": "integratedTerminal" - }, - { - "name": "Recreate Database", - "type": "python", - "request": "launch", - "program": "${workspaceFolder}/run.py", - "args": ["--recreate-database"], - "console": "integratedTerminal" } ] } \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index d9e7da76..3e9bd116 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ line-length = 99 target-version = ["py38"] # TODO: Use extend-exclude as soon as Debian Bookworm is released. exclude = ''' - ^/run\.py$ + ^/src/aura_engine/app\.py$ | ^/python/ ''' diff --git a/src/__init__.py b/src/aura_engine/__init__.py similarity index 100% rename from src/__init__.py rename to src/aura_engine/__init__.py diff --git a/run.py b/src/aura_engine/app.py similarity index 87% rename from run.py rename to src/aura_engine/app.py index 19028a66..46f10f17 100755 --- a/run.py +++ b/src/aura_engine/app.py @@ -19,7 +19,6 @@ import logging -import os import signal import sys import threading @@ -27,16 +26,19 @@ import threading from flask import Flask from flask_sqlalchemy import SQLAlchemy -from src.base.config import AuraConfig -from src.base.logger import AuraLogger -from src.base.utils import SimpleUtil as SU -from src.scheduling.models import DB +from base.config import AuraConfig +from base.logger import AuraLogger +from scheduling.models import DB +from engine import Engine config = AuraConfig() + + def configure_flask(): app.config["SQLALCHEMY_DATABASE_URI"] = config.get_database_uri() - app.config['BABEL_DEFAULT_LOCALE'] = 'de' - app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + app.config["BABEL_DEFAULT_LOCALE"] = "de" + app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False + # FIXME Instantiate SQLAlchemy without the need for Flask app = Flask(__name__) @@ -48,11 +50,11 @@ class EngineRunner: """ EngineRunner is in charge of starting the engine. """ + logger = None config = None engine = None - def __init__(self): """ Constructor @@ -61,22 +63,20 @@ class EngineRunner: AuraLogger(self.config) self.logger = logging.getLogger("AuraEngine") - def run(self): """ Starts Engine Core. """ - from src.engine import Engine - self.engine = Engine() + self.engine = Engine() def recreate_db(self): """ Initializes the database and deletes any existing content. """ - from src.scheduling.models import AuraDatabaseModel - AuraDatabaseModel.recreate_db() + from scheduling.models import AuraDatabaseModel + AuraDatabaseModel.recreate_db() def exit_gracefully(self, signum, frame): """ @@ -92,7 +92,6 @@ class EngineRunner: sys.exit(0) - # # START THE ENGINE # diff --git a/src/base/__init__.py b/src/aura_engine/base/__init__.py similarity index 100% rename from src/base/__init__.py rename to src/aura_engine/base/__init__.py diff --git a/src/base/api.py b/src/aura_engine/base/api.py similarity index 98% rename from src/base/api.py rename to src/aura_engine/base/api.py index 79868a18..5eb11ed9 100644 --- a/src/base/api.py +++ b/src/aura_engine/base/api.py @@ -22,8 +22,8 @@ import logging import requests -from src.base.utils import DotDict -from src.base.utils import SimpleUtil as SU +from base.utils import DotDict +from base.utils import SimpleUtil as SU class SimpleApi: diff --git a/src/base/config.py b/src/aura_engine/base/config.py similarity index 95% rename from src/base/config.py rename to src/aura_engine/base/config.py index dd13ad5c..7a95d636 100644 --- a/src/base/config.py +++ b/src/aura_engine/base/config.py @@ -47,16 +47,19 @@ class AuraConfig: """ self.logger = logging.getLogger("AuraEngine") config_file = Path(ini_path) + project_root = Path(__file__).parent.parent.parent.parent.absolute() + if not config_file.is_file(): - ini_path = "%s/config/engine.ini" % Path(__file__).parent.parent.parent.absolute() + ini_path = f"{project_root}/config/engine.ini" self.ini_path = ini_path self.load_config() AuraConfig.instance = self # Defaults + self.set("install_dir", os.path.realpath(project_root)) self.set("config_dir", os.path.dirname(ini_path)) - self.set("install_dir", os.path.realpath(__file__ + "../../../..")) + print(f"Using configuration at: {ini_path}") @staticmethod def config(): diff --git a/src/base/exceptions.py b/src/aura_engine/base/exceptions.py similarity index 100% rename from src/base/exceptions.py rename to src/aura_engine/base/exceptions.py diff --git a/src/base/logger.py b/src/aura_engine/base/logger.py similarity index 100% rename from src/base/logger.py rename to src/aura_engine/base/logger.py diff --git a/src/base/utils.py b/src/aura_engine/base/utils.py similarity index 100% rename from src/base/utils.py rename to src/aura_engine/base/utils.py diff --git a/src/channels.py b/src/aura_engine/channels.py similarity index 99% rename from src/channels.py rename to src/aura_engine/channels.py index 1a000fbb..f97f3af3 100644 --- a/src/channels.py +++ b/src/aura_engine/channels.py @@ -19,8 +19,8 @@ from enum import Enum -from src.base.utils import SimpleUtil as SU -from src.resources import ResourceType +from base.utils import SimpleUtil as SU +from resources import ResourceType class TransitionType(Enum): diff --git a/src/client/client.py b/src/aura_engine/client/client.py similarity index 98% rename from src/client/client.py rename to src/aura_engine/client/client.py index 64c46c3f..c5941e9a 100644 --- a/src/client/client.py +++ b/src/aura_engine/client/client.py @@ -23,8 +23,8 @@ import socket import urllib.parse from multiprocessing import Lock -from src.base.exceptions import LQConnectionError -from src.base.utils import TerminalColors +from base.exceptions import LQConnectionError +from base.utils import TerminalColors class LiquidSoapClient: diff --git a/src/client/connector.py b/src/aura_engine/client/connector.py similarity index 97% rename from src/client/connector.py rename to src/aura_engine/client/connector.py index bd479931..506400e1 100644 --- a/src/client/connector.py +++ b/src/aura_engine/client/connector.py @@ -20,11 +20,11 @@ import logging import time -from src.base.config import AuraConfig -from src.base.exceptions import LQConnectionError -from src.base.utils import SimpleUtil as SU -from src.base.utils import TerminalColors -from src.client.playerclient import LiquidSoapPlayerClient +from base.config import AuraConfig +from base.exceptions import LQConnectionError +from base.utils import SimpleUtil as SU +from base.utils import TerminalColors +from client.playerclient import LiquidSoapPlayerClient class PlayerConnector: diff --git a/src/client/playerclient.py b/src/aura_engine/client/playerclient.py similarity index 99% rename from src/client/playerclient.py rename to src/aura_engine/client/playerclient.py index 825a4632..7b3c9787 100644 --- a/src/client/playerclient.py +++ b/src/aura_engine/client/playerclient.py @@ -17,7 +17,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. -from src.client.client import LiquidSoapClient +from client.client import LiquidSoapClient class LiquidSoapPlayerClient(LiquidSoapClient): diff --git a/src/control.py b/src/aura_engine/control.py similarity index 98% rename from src/control.py rename to src/aura_engine/control.py index bfd94cb8..b99e7018 100644 --- a/src/control.py +++ b/src/aura_engine/control.py @@ -27,9 +27,9 @@ from threading import Lock, Thread, Timer from http_parser.http import HttpStream from http_parser.reader import SocketReader -from src.base.api import LiquidsoapUtil as LU -from src.base.config import AuraConfig -from src.base.utils import SimpleUtil as SU +from base.api import LiquidsoapUtil as LU +from base.config import AuraConfig +from base.utils import SimpleUtil as SU class EngineControlInterface: @@ -230,7 +230,7 @@ class EngineExecutor(Timer): param (object): Parameter passt to the function """ self._lock = Lock() - from src.engine import Engine + from engine import Engine now_unix = Engine.engine_time() diff --git a/src/engine.py b/src/aura_engine/engine.py similarity index 98% rename from src/engine.py rename to src/aura_engine/engine.py index 7a0938f8..2c40bca8 100644 --- a/src/engine.py +++ b/src/aura_engine/engine.py @@ -24,17 +24,17 @@ from contextlib import suppress from threading import Thread import meta -from src.base.api import LiquidsoapUtil as LU -from src.base.config import AuraConfig -from src.base.exceptions import ( +from base.api import LiquidsoapUtil as LU +from base.config import AuraConfig +from base.exceptions import ( InvalidChannelException, LoadSourceException, LQConnectionError, LQStreamException, ) -from src.base.utils import DotDict -from src.base.utils import SimpleUtil as SU -from src.channels import ( +from base.utils import DotDict +from base.utils import SimpleUtil as SU +from channels import ( Channel, ChannelResolver, ChannelRouter, @@ -44,11 +44,11 @@ from src.channels import ( ResourceType, TransitionType, ) -from src.client.connector import PlayerConnector -from src.control import EngineControlInterface -from src.events import EngineEventDispatcher -from src.mixer import Mixer, MixerType -from src.resources import ResourceClass, ResourceUtil +from client.connector import PlayerConnector +from control import EngineControlInterface +from events import EngineEventDispatcher +from mixer import Mixer, MixerType +from resources import ResourceClass, ResourceUtil class Engine: diff --git a/src/events.py b/src/aura_engine/events.py similarity index 97% rename from src/events.py rename to src/aura_engine/events.py index 8457fffe..08664747 100644 --- a/src/events.py +++ b/src/aura_engine/events.py @@ -21,10 +21,10 @@ import datetime import logging from threading import Thread -from src.base.config import AuraConfig -from src.plugins.clock import ClockInfoHandler -from src.plugins.mailer import AuraMailer -from src.plugins.monitor import AuraMonitor +from base.config import AuraConfig +from plugins.clock import ClockInfoHandler +from plugins.mailer import AuraMailer +from plugins.monitor import AuraMonitor class EventBinding: @@ -147,7 +147,7 @@ class EngineEventDispatcher: Important: Subsequent events are called synchronously, hence blocking. """ self.logger.debug("on_initialized(..)") - from src.scheduling.scheduler import AuraScheduler + from scheduling.scheduler import AuraScheduler self.scheduler = AuraScheduler(self.engine) self.call_event("on_initialized", None) diff --git a/meta.py b/src/aura_engine/meta.py similarity index 100% rename from meta.py rename to src/aura_engine/meta.py diff --git a/src/mixer.py b/src/aura_engine/mixer.py similarity index 99% rename from src/mixer.py rename to src/aura_engine/mixer.py index df7d7a9e..04e6c1d5 100644 --- a/src/mixer.py +++ b/src/aura_engine/mixer.py @@ -21,9 +21,9 @@ import logging import time from enum import Enum -from src.base.api import LiquidsoapUtil as LU -from src.base.exceptions import LQConnectionError -from src.base.utils import SimpleUtil as SU +from base.api import LiquidsoapUtil as LU +from base.exceptions import LQConnectionError +from base.utils import SimpleUtil as SU class MixerType(Enum): diff --git a/src/plugins/__init__.py b/src/aura_engine/plugins/__init__.py similarity index 100% rename from src/plugins/__init__.py rename to src/aura_engine/plugins/__init__.py diff --git a/src/plugins/clock.py b/src/aura_engine/plugins/clock.py similarity index 97% rename from src/plugins/clock.py rename to src/aura_engine/plugins/clock.py index 5f82b10a..2838c7d2 100644 --- a/src/plugins/clock.py +++ b/src/aura_engine/plugins/clock.py @@ -20,10 +20,10 @@ import logging from datetime import datetime, timedelta -from src.base.api import SimpleApi -from src.base.config import AuraConfig -from src.base.utils import DotDict -from src.resources import ResourceUtil +from base.api import SimpleApi +from base.config import AuraConfig +from base.utils import DotDict +from resources import ResourceUtil class ClockInfoHandler: diff --git a/src/plugins/mailer.py b/src/aura_engine/plugins/mailer.py similarity index 98% rename from src/plugins/mailer.py rename to src/aura_engine/plugins/mailer.py index d36d7f38..e3b07a2a 100644 --- a/src/plugins/mailer.py +++ b/src/aura_engine/plugins/mailer.py @@ -21,8 +21,8 @@ import logging import smtplib from email.message import EmailMessage -from src.base.config import AuraConfig -from src.base.utils import SimpleUtil as SU +from base.config import AuraConfig +from base.utils import SimpleUtil as SU class MailingException(Exception): diff --git a/src/plugins/monitor.py b/src/aura_engine/plugins/monitor.py similarity index 99% rename from src/plugins/monitor.py rename to src/aura_engine/plugins/monitor.py index 99cd0076..4de7c79b 100644 --- a/src/plugins/monitor.py +++ b/src/aura_engine/plugins/monitor.py @@ -30,8 +30,8 @@ from socket import AF_INET, SO_BROADCAST, SOCK_DGRAM, SOL_SOCKET, socket import requests import meta -from src.base.config import AuraConfig -from src.base.utils import SimpleUtil as SU +from base.config import AuraConfig +from base.utils import SimpleUtil as SU # Exceptions diff --git a/src/resources.py b/src/aura_engine/resources.py similarity index 100% rename from src/resources.py rename to src/aura_engine/resources.py diff --git a/src/scheduling/__init__.py b/src/aura_engine/scheduling/__init__.py similarity index 100% rename from src/scheduling/__init__.py rename to src/aura_engine/scheduling/__init__.py diff --git a/src/scheduling/api.py b/src/aura_engine/scheduling/api.py similarity index 99% rename from src/scheduling/api.py rename to src/aura_engine/scheduling/api.py index 2bec6bbd..80c5cc53 100644 --- a/src/scheduling/api.py +++ b/src/aura_engine/scheduling/api.py @@ -23,8 +23,8 @@ import threading import requests -from src.base.utils import SimpleUtil as SU -from src.scheduling.utils import TimeslotFilter +from base.utils import SimpleUtil as SU +from scheduling.utils import TimeslotFilter class ApiFetcher(threading.Thread): diff --git a/src/scheduling/models.py b/src/aura_engine/scheduling/models.py similarity index 99% rename from src/scheduling/models.py rename to src/aura_engine/scheduling/models.py index cc64b134..67ae10f5 100644 --- a/src/scheduling/models.py +++ b/src/aura_engine/scheduling/models.py @@ -37,9 +37,9 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import relationship -from src.base.config import AuraConfig -from src.base.utils import SimpleUtil -from src.resources import ResourceUtil +from base.config import AuraConfig +from base.utils import SimpleUtil +from resources import ResourceUtil # Initialize DB Model and session config = AuraConfig() diff --git a/src/scheduling/programme.py b/src/aura_engine/scheduling/programme.py similarity index 98% rename from src/scheduling/programme.py rename to src/aura_engine/scheduling/programme.py index a5cc41df..acce0762 100644 --- a/src/scheduling/programme.py +++ b/src/aura_engine/scheduling/programme.py @@ -20,17 +20,17 @@ import logging from datetime import datetime -from src.base.config import AuraConfig -from src.base.utils import SimpleUtil as SU -from src.engine import Engine -from src.scheduling.api import ApiFetcher -from src.scheduling.models import ( +from base.config import AuraConfig +from base.utils import SimpleUtil as SU +from engine import Engine +from scheduling.api import ApiFetcher +from scheduling.models import ( Playlist, PlaylistEntry, PlaylistEntryMetaData, Timeslot, ) -from src.scheduling.utils import M3UPlaylistProcessor +from scheduling.utils import M3UPlaylistProcessor class ProgrammeService: diff --git a/src/scheduling/scheduler.py b/src/aura_engine/scheduling/scheduler.py similarity index 97% rename from src/scheduling/scheduler.py rename to src/aura_engine/scheduling/scheduler.py index 350b481c..580cf962 100644 --- a/src/scheduling/scheduler.py +++ b/src/aura_engine/scheduling/scheduler.py @@ -21,16 +21,16 @@ import logging import threading import time -from src.base.config import AuraConfig -from src.base.exceptions import LoadSourceException, NoActiveTimeslotException -from src.base.utils import SimpleUtil as SU -from src.channels import ChannelType, EntryPlayState, TransitionType -from src.control import EngineExecutor -from src.engine import Engine -from src.resources import ResourceClass, ResourceUtil -from src.scheduling.models import AuraDatabaseModel -from src.scheduling.programme import ProgrammeService -from src.scheduling.utils import TimeslotRenderer +from base.config import AuraConfig +from base.exceptions import LoadSourceException, NoActiveTimeslotException +from base.utils import SimpleUtil as SU +from channels import ChannelType, EntryPlayState, TransitionType +from control import EngineExecutor +from engine import Engine +from resources import ResourceClass, ResourceUtil +from scheduling.models import AuraDatabaseModel +from scheduling.programme import ProgrammeService +from scheduling.utils import TimeslotRenderer class AuraScheduler(threading.Thread): diff --git a/src/scheduling/utils.py b/src/aura_engine/scheduling/utils.py similarity index 99% rename from src/scheduling/utils.py rename to src/aura_engine/scheduling/utils.py index 1317cc25..058c48e0 100644 --- a/src/scheduling/utils.py +++ b/src/aura_engine/scheduling/utils.py @@ -21,8 +21,8 @@ import logging from datetime import datetime from enum import Enum -from src.base.config import AuraConfig -from src.base.utils import SimpleUtil as SU +from base.config import AuraConfig +from base.utils import SimpleUtil as SU class EntryQueueState(Enum): -- GitLab