From 4791a65c5368c9103c093a0b381d12f36396c32d Mon Sep 17 00:00:00 2001
From: David Trattnig <david.trattnig@o94.at>
Date: Fri, 23 Oct 2020 18:08:35 +0200
Subject: [PATCH] Cleanup. #44

---
 modules/cli/padavan.py          | 34 ++++++-------
 modules/cli/redis/adapter.py    |  8 +--
 modules/cli/redis/channels.py   |  2 +-
 modules/scheduling/scheduler.py | 88 +--------------------------------
 test/tests.py                   | 60 +++++-----------------
 5 files changed, 36 insertions(+), 156 deletions(-)

diff --git a/modules/cli/padavan.py b/modules/cli/padavan.py
index 737cdb8b..e566c44e 100644
--- a/modules/cli/padavan.py
+++ b/modules/cli/padavan.py
@@ -50,8 +50,8 @@ class Padavan:
         elif self.args.mixer_status:
             self.mixer_status()
 
-        elif self.args.get_act_programme:
-            self.get_act_programme()
+        # elif self.args.get_act_programme:
+        #     self.get_act_programme()
 
         elif self.args.get_status:
             self.get_status()
@@ -142,15 +142,15 @@ class Padavan:
         json_reply = self.send_and_wait_redis("aura", "fetch_new_programme", RedisChannel.FNP_REPLY)
         if json_reply != "":
             actprogramme = json.loads(json_reply)
-            self.print_programme(actprogramme)
+            # self.print_programme(actprogramme)
         else:
             print("No programme fetched")
 
     # ------------------------------------------------------------------------------------------ #
-    def get_act_programme(self):
-        json_reply = self.send_and_wait_redis("aura", "get_act_programme", RedisChannel.GAP_REPLY)
-        actprogramme = json.loads(json_reply)
-        self.print_programme(actprogramme)
+    # def get_act_programme(self):
+    #     json_reply = self.send_and_wait_redis("aura", "get_act_programme", RedisChannel.GAP_REPLY)
+    #     actprogramme = json.loads(json_reply)
+    #     self.print_programme(actprogramme)
 
 
     def get_status(self):
@@ -169,16 +169,16 @@ class Padavan:
         self.print_connection_status(connection_status)
 
     # ------------------------------------------------------------------------------------------ #
-    def print_programme(self, programme):
-        cnt = 1
-        for show in programme:
-            for entry in show["playlist"]:
-                self.stringreply += str(cnt) + \
-                    " --- schedule id #" + str(show["schedule_id"]) + "." + str(entry["entry_num"]) + \
-                    " - show: " + show["show_name"] + \
-                    " - starts @ " + entry["entry_start"] + \
-                    " - plays " + str(entry["source"]) + "\n"
-                cnt = cnt + 1
+    # def print_programme(self, programme):
+    #     cnt = 1
+    #     for show in programme:
+    #         for entry in show["playlist"]:
+    #             self.stringreply += str(cnt) + \
+    #                 " --- schedule id #" + str(show["schedule_id"]) + "." + str(entry["entry_num"]) + \
+    #                 " - show: " + show["show_name"] + \
+    #                 " - starts @ " + entry["entry_start"] + \
+    #                 " - plays " + str(entry["source"]) + "\n"
+    #             cnt = cnt + 1
 
     # ------------------------------------------------------------------------------------------ #
     def print_connection_status(self, connection_status):
diff --git a/modules/cli/redis/adapter.py b/modules/cli/redis/adapter.py
index bd176692..94acb7cc 100644
--- a/modules/cli/redis/adapter.py
+++ b/modules/cli/redis/adapter.py
@@ -140,8 +140,8 @@ class ServerRedisAdapter(threading.Thread, RedisMessenger):
     # ------------------------------------------------------------------------------------------ #
     def work(self, item):
         if item["data"] == "fetch_new_programme":
-            #self.execute(RedisChannel.FNP_REPLY.value, self.scheduler.fetch_new_programme)
-            self.execute(RedisChannel.FNP_REPLY.value, self.scheduler.get_act_programme_as_string)
+            self.execute(RedisChannel.FNP_REPLY.value, self.scheduler.fetch_new_programme)
+            # self.execute(RedisChannel.FNP_REPLY.value, self.scheduler.get_act_programme_as_string)
 
         elif item["data"] == "shutdown":
             self.terminate()
@@ -149,8 +149,8 @@ class ServerRedisAdapter(threading.Thread, RedisMessenger):
         elif item["data"] == "init_player":
             self.execute(RedisChannel.IP_REPLY.value, self.engine.init_player)
 
-        elif item["data"] == "get_act_programme":
-            self.execute(RedisChannel.GAP_REPLY.value, self.scheduler.get_act_programme_as_string)
+        # elif item["data"] == "get_act_programme":
+        #     self.execute(RedisChannel.GAP_REPLY.value, self.scheduler.get_act_programme_as_string)
 
         elif item["data"] == "get_status":
             def get_status_string():
diff --git a/modules/cli/redis/channels.py b/modules/cli/redis/channels.py
index 3dba2f4d..57e778d4 100644
--- a/modules/cli/redis/channels.py
+++ b/modules/cli/redis/channels.py
@@ -26,7 +26,7 @@ class RedisChannel(Enum):
 
     DPE_REPLY = "delete_playlist_entry_reply"
     FNP_REPLY = "fetch_new_programme_reply"
-    GAP_REPLY = "get_act_programme_reply"
+    # GAP_REPLY = "get_act_programme_reply"
     GS_REPLY  = "get_status_reply"
     GCS_REPLY = "get_connection_status_reply"
     GNF_REPLY = "get_next_file_reply"
diff --git a/modules/scheduling/scheduler.py b/modules/scheduling/scheduler.py
index ee49e58d..131f7017 100644
--- a/modules/scheduling/scheduler.py
+++ b/modules/scheduling/scheduler.py
@@ -21,9 +21,6 @@
 import logging
 import threading
 import time
-import json
-import decimal
-import traceback
 import sqlalchemy
 
 from enum import Enum
@@ -41,19 +38,6 @@ from modules.scheduling.calendar            import AuraCalendarService
 from modules.scheduling.fallback_manager    import FallbackManager
 
 
-# FIXME this is probably not needed?
-def alchemyencoder(obj):
-    """JSON encoder function for SQLAlchemy special classes."""
-    if isinstance(obj, datetime.date):
-        return obj.isoformat()
-    elif isinstance(obj, decimal.Decimal):
-        return float(obj)
-    elif isinstance(obj, sqlalchemy.orm.state.InstanceState):
-        return ""
-    elif isinstance(obj, Schedule):
-        return json.dumps([obj._asdict()], default=alchemyencoder)
-    else:
-        return str(obj)
 
 
 class EntryQueueState(Enum):
@@ -243,10 +227,6 @@ class AuraScheduler(threading.Thread):
                 self.engine.player.preroll(active_entry)
                 self.engine.player.play(active_entry, TransitionType.FADE)
 
-                # Check if this is the last item of the schedule
-                # if active_entry.end_unix > active_entry.playlist.schedule.end_unix:
-                #     self.queue_end_of_schedule(active_schedule, True)
-
                 # Fast-forward to the scheduled position
                 if seconds_to_seek > 0:
                     # Without plenty of timeout (10s) the seek doesn't work
@@ -267,8 +247,6 @@ class AuraScheduler(threading.Thread):
             self.engine.player.preroll(active_entry)
             self.engine.player.play(active_entry, TransitionType.FADE)
 
-            # self.queue_end_of_schedule(active_schedule, True)
-
         else:
             self.logger.critical("Unknown Entry Type: %s" % active_entry)
         
@@ -374,33 +352,6 @@ class AuraScheduler(threading.Thread):
         return None
 
 
-    # FIXME Review relevance.
-    def get_act_programme_as_string(self):
-        """
-        Fetches the latest programme and returns it as `String`.
-        Also used by `ServerRedisAdapter`.
-
-        Return:
-            (String):       Programme
-
-        Raises:
-            (Exception):    In case the programme cannot be converted to String
-        """
-        programme_as_string = ""
-
-        if self.programme is None or len(self.programme) == 0:
-            self.fetch_new_programme()
-
-        try:
-            programme_as_string = json.dumps([p._asdict() for p in self.programme], default=alchemyencoder)
-            # FIXME Change to more specific exception
-        except Exception as e:
-            self.logger.error("Cannot transform programme into JSON String. Reason: " + str(e))
-            traceback.print_exc()
-
-        return programme_as_string
-
-
 
     def print_timer_queue(self):
         """
@@ -602,19 +553,6 @@ class AuraScheduler(threading.Thread):
 #
 
 
-    # def engine_time(self):
-    #     """
-    #     Liquidsoap is slow in executing commands, therefore it's needed to schedule
-    #     actions by (n) seconds in advance, as defined in the configuration file by
-    #     the property `lqs_delay_offset`.
-
-    #     Returns:
-    #         (Integer):  the Unix epoch timestamp including the offset
-    #     """
-    #     time_offset = int(self.config.lqs_delay_offset)
-    #     return SU.timestamp() + time_offset
-
-
 
     def filter_scheduling_window(self, schedules):
         """
@@ -1095,31 +1033,7 @@ class AuraScheduler(threading.Thread):
         self.logger.info("Shutting down scheduler ...")
 
 
-# ------------------------------------------------------------------------------------------ #
-# class SetNextFile(threading.Thread):
-#     fallbackname = None
-#     show = None
-
-#     def __init__(self, fallbackname, show):
-#         threading.Thread.__init__(self)
-#         self.fallbackname = fallbackname
-#         self.show = show
-
-#     def run(self):
-#         if self.fallbackname == "show":
-#             self.detect_next_file_for(self.show.showfallback)
-#         elif self.fallbackname == "timeslow":
-#             self.detect_next_file_for(self.show.timeslotfallback)
-#         elif self.fallbackname == "station":
-#             self.detect_next_file_for(self.show.stationfallback)
-
-#     def detect_next_file_for(self, playlist):
-#         return ""
-#         #if playlist.startswith("pool"):
-#         #    self.find_next_file_in_pool(playlist)
-
-#     #def find_next_file_in_pool(self, pool):
-#     #    return ""
+
 
 # ------------------------------------------------------------------------------------------ #
 class CallFunctionTimer(threading.Timer):
diff --git a/test/tests.py b/test/tests.py
index f3ecd6cb..eaa066ec 100755
--- a/test/tests.py
+++ b/test/tests.py
@@ -22,75 +22,41 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-import json
-import logging
+
 import sqlalchemy
 import decimal
+import datetime
 
-from modules.core.engine import Engine
 from modules.base.config import AuraConfig
-from modules.base.models import Schedule, ScheduleEntry
-from modules.scheduling.scheduler import AuraScheduler, AuraCalendarService
-
-def alchemyencoder(obj):
-    """JSON encoder function for SQLAlchemy special classes."""
-    if isinstance(obj, datetime.date):
-        return obj.isoformat()
-    elif isinstance(obj, decimal.Decimal):
-        return float(obj)
-    elif isinstance(obj, sqlalchemy.orm.state.InstanceState):
-        return ""
-    #elif isinstance(obj, Schedule):
-    #    return json.dumps([obj._asdict()], default=alchemyencoder)
-    else:
-        return str(obj)
-
-#    programme_as_string = json.dumps([se[0]._asdict()], default=alchemyencoder)
-#    print(programme_as_string)
+from modules.base.models import PlaylistEntry
+from modules.core.engine import Engine
+from modules.scheduling.scheduler import AuraScheduler
+
+
+
 
 def select_current_programme():
     # select_programme()
     config = AuraConfig()
-    config.read_config()
 
-    engine = Engine(config.config)
-    sched = AuraScheduler(config.config)
+    engine = Engine(config)
+    sched = AuraScheduler(config, engine, None)
 
     engine.scheduler = sched
     sched.engine = engine
 
-    programme = sched.load_programme_from_db()
+    sched.load_programme_from_db()
 
-    for show in programme:
-        print(show)
 
-def fadeout(lsc):
-    entry = ScheduleEntry.select_programme()
-    lsc.fade_out(entry, 2)
 
-def fadein(lsc):
-    entry = ScheduleEntry.select_programme()
-    lsc.fade_in(entry, 1)
 
-def fetch_new_programme():
-    config = AuraConfig()
-    config.read_config()
-    acs = AuraCalendarService(config.config)
-
-
-    queue = acs.get_queue()
-
-    # start fetching thread
-    acs.start()
-
-    # wait for the end
-    response = queue.get()
 
 # # ## ## ## ## ## # #
 # # ENTRY FUNCTION # #
 # # ## ## ## ## ## # #
+
 def main():
-    fetch_new_programme()
+    True
 
 
 # # ## ## ## ## ## ## # #
-- 
GitLab