49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
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) |