From 1367953339c68995b19b2d8576781bc3abfa8d59 Mon Sep 17 00:00:00 2001 From: David Trattnig <david.trattnig@o94.at> Date: Wed, 10 Jun 2020 09:53:55 +0200 Subject: [PATCH] Delete schedules out of the scheduling window only --- modules/scheduling/calendar.py | 37 ++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/modules/scheduling/calendar.py b/modules/scheduling/calendar.py index da666066..52b99277 100644 --- a/modules/scheduling/calendar.py +++ b/modules/scheduling/calendar.py @@ -85,12 +85,15 @@ class AuraCalendarService(threading.Thread): def run(self): """ - Fetch calendar data and store it in the database + Fetch calendar data and store it in the database. Also handles local deletion of remotely + deleted schedules. Returns Schedule ([]): An arrar of retrieved schedules passed via `self.queue` """ result = [] + now_unix = SimpleUtil.timestamp() + scheduling_window_start = self.config.get("scheduling_window_start") try: fetched_schedule_data = self.calendar_fetcher.fetch() @@ -103,21 +106,29 @@ class AuraCalendarService(threading.Thread): # Check if existing schedules have been deleted local_schedules = Schedule.select_programme(datetime.now()) - for local_schedule in local_schedules: - # Filter the local schedule from the fetched ones - existing_schedule = list(filter(lambda new_schedule: \ - new_schedule["schedule_id"] == local_schedule.schedule_id, fetched_schedule_data)) - - if existing_schedule: - self.logger.debug("Schedule (schedule_id: %s) is still existing remotely:" % \ - (local_schedule.schedule_id)) + # Only allow deletion of schedules which are before the start of the scheduling window + if local_schedule.start_unix > now_unix and (local_schedule.start_unix - scheduling_window_start) > now_unix: + + # Filter the local schedule from the fetched ones + existing_schedule = list(filter(lambda new_schedule: \ + new_schedule["schedule_id"] == local_schedule.schedule_id, fetched_schedule_data)) + + if existing_schedule: + # self.logger.debug("Schedule #%s is still existing remotely!" % (local_schedule.schedule_id)) + pass + else: + self.logger.info("Schedule #%s has been deleted remotely, hence also delete it locally [%s]" % \ + (local_schedule.schedule_id, str(local_schedule))) + local_schedule.delete(commit=True) + self.logger.info("Deleted local schedule #%s from database" % local_schedule.schedule_id) + else: - self.logger.info("Schedule (schedule_id: %s) has been deleted remotely! [%s]" % \ - (local_schedule.schedule_id, str(local_schedule))) - local_schedule.delete(commit=True) - self.logger.info("Deleted local schedule from database (schedule_id: %s)" % local_schedule.schedule_id) + msg = "Schedule #%s has been deleted remotely. Since the scheduling window already started, it won't be deleted locally." % local_schedule.schedule_id + self.logger.warn(SimpleUtil.red(msg)) + + # Process fetched schedules -- GitLab