From 791d8ce3c52631d268fa23bf14c971f510e9756f Mon Sep 17 00:00:00 2001
From: David Trattnig <david.trattnig@o94.at>
Date: Fri, 27 Nov 2020 16:08:01 +0100
Subject: [PATCH] Default playlist fields, db init. #52 #58

---
 src/scheduling/models.py | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/src/scheduling/models.py b/src/scheduling/models.py
index 7e0d31ce..f06c3131 100644
--- a/src/scheduling/models.py
+++ b/src/scheduling/models.py
@@ -101,15 +101,11 @@ class AuraDatabaseModel():
     @staticmethod
     def init_database():
         """
-        Initializes the database.
+        Initializes the database tables if they are not existing.
 
         Raises:
             sqlalchemy.exc.ProgrammingError:    In case the DB model is invalid
         """
-        if AuraConfig.config().get("recreate_db") is not None:
-            AuraDatabaseModel.recreate_db(systemexit=True)
-
-        # Check if tables exists, if not create them
         try:
             Playlist.is_empty()
         except sa.exc.ProgrammingError as e:
@@ -125,7 +121,7 @@ class AuraDatabaseModel():
     @staticmethod
     def recreate_db(systemexit = False):
         """
-        Re-creates the database for developments purposes.
+        Deletes all tables and re-creates the database.
         """        
         Base.metadata.drop_all()
         Base.metadata.create_all()
@@ -144,6 +140,14 @@ class AuraDatabaseModel():
 class Timeslot(DB.Model, AuraDatabaseModel):
     """
     One specific timeslot for a show.
+
+    Relationships:
+        playlist (Playlist):            The specific playlist for this timeslot
+        schedule_default (Playlist):    Some playlist played by default, when no specific playlist is assigned
+        show_default (Playlist):        Some playlist played by default, when no default schedule playlist is assigned
+        schedule_fallback (Playlist):   Some playlist played as fallback, when no specific playlist is assigned or if it is errorneous (includes silence detection)
+        show_fallback (Playlist):       Some playlist played as fallback, when no schedule fallback playlist is assigned or if some specific playlist is errorneous (includes silence detection)
+        station_fallback (Playlist):    Defined in the original AURA API but not implemented, as station fallbacks are handled locally
     """
     __tablename__ = 'timeslot'
 
@@ -155,10 +159,18 @@ class Timeslot(DB.Model, AuraDatabaseModel):
                             primaryjoin="and_(Timeslot.timeslot_start==Playlist.timeslot_start, \
                                 Timeslot.playlist_id==Playlist.playlist_id, Timeslot.show_name==Playlist.show_name)",
                             uselist=False, back_populates="timeslot")
+    default_schedule_playlist = relationship("Playlist",
+                            primaryjoin="and_(Timeslot.timeslot_start==Playlist.timeslot_start, \
+                                Timeslot.default_schedule_playlist_id==Playlist.playlist_id, Timeslot.show_name==Playlist.show_name)",
+                            uselist=False, back_populates="timeslot")
+    default_show_playlist = relationship("Playlist",
+                            primaryjoin="and_(Timeslot.timeslot_start==Playlist.timeslot_start, \
+                                Timeslot.default_show_playlist_id==Playlist.playlist_id, Timeslot.show_name==Playlist.show_name)",
+                            uselist=False, back_populates="timeslot")                            
     schedule_fallback = relationship("Playlist",
                             primaryjoin="and_(Timeslot.timeslot_start==Playlist.timeslot_start, \
                                 Timeslot.schedule_fallback_id==Playlist.playlist_id, Timeslot.show_name==Playlist.show_name)",
-                            uselist=False, back_populates="timeslot")
+                            uselist=False, back_populates="timeslot")                            
     show_fallback = relationship("Playlist",
                             primaryjoin="and_(Timeslot.timeslot_start==Playlist.timeslot_start, \
                                 Timeslot.show_fallback_id==Playlist.playlist_id, Timeslot.show_name==Playlist.show_name)",
@@ -169,6 +181,8 @@ class Timeslot(DB.Model, AuraDatabaseModel):
                             uselist=False, back_populates="timeslot")
 
     playlist_id = Column(Integer)
+    default_schedule_playlist_id = Column(Integer)
+    default_show_playlist_id = Column(Integer)
     schedule_fallback_id = Column(Integer)
     show_fallback_id = Column(Integer)
     station_fallback_id = Column(Integer)
@@ -276,6 +290,8 @@ class Timeslot(DB.Model, AuraDatabaseModel):
             "languages": self.languages,
             "comment": self.comment,
             "playlist_id": self.playlist_id,
+            "schedule_default_id": self.schedule_default_id,
+            "show_default_id": self.show_default_id,            
             "schedule_fallback_id": self.schedule_fallback_id,
             "show_fallback_id": self.show_fallback_id,
             "station_fallback_id": self.station_fallback_id,
-- 
GitLab