import logging from datetime import datetime from threading import Timer from time import sleep import pytz # Provides a timed cleanup of the spot list. class CleanupTimer: # Constructor def __init__(self, spots, cleanup_interval): self.spots = spots self.cleanup_interval = cleanup_interval self.cleanup_timer = None self.last_cleanup_time = datetime.min.replace(tzinfo=pytz.UTC) self.status = "Starting" # Start the cleanup timer def start(self): self.cleanup() # Stop any threads and prepare for application shutdown def stop(self): self.cleanup_timer.cancel() # Perform cleanup and reschedule next timer def cleanup(self): try: # Perform cleanup self.spots.expire() self.status = "OK" self.last_cleanup_time = datetime.now(pytz.UTC) except Exception as e: self.status = "Error" logging.exception("Exception in Cleanup thread") sleep(1) self.cleanup_timer = Timer(self.cleanup_interval, self.cleanup) self.cleanup_timer.start()