import threading import time from datetime import datetime from models import Submission, session_scope, submission_exists, update_submission, insert_submission class Application: def __init__(self, reddit_monitor, webhook_notifier): self.reddit_monitor = reddit_monitor self.webhook_notifier = webhook_notifier def process_submissions(self, submissions): with session_scope() as session: for submission in submissions: if submission_exists(session, submission.id): update_submission(session, submission) else: submission = Submission( id=submission.id, title=submission.title, name=submission.name, url=submission.url, score=submission.score, num_comments=submission.num_comments, created_utc=submission.created_utc, selftext=submission.selftext, permalink=submission.permalink, upvote_ratio=submission.upvote_ratio ) insert_submission(session, submission) self.webhook_notifier.send_notification(submission) def periodic_update(self): submissions = self.reddit_monitor.update_submissions() self.process_submissions(submissions) def run_periodic_update(self, interval=3600): while True: self.periodic_update() print(f"Existing posts Updated at {datetime.now()}") time.sleep(interval) def run(self): update_frequency = 3600 # 3600 update_thread = threading.Thread(target=self.run_periodic_update, args=(update_frequency, )) update_thread.daemon = True update_thread.start() submissions = self.reddit_monitor.stream_submissions() self.process_submissions(submissions)