Things / scheduler.py
Basementup's picture
Rename scheduler 1 (1).py to scheduler.py
e2eb3b7 verified
Raw
History Blame Contribute Delete
2.65 kB
# scheduler.py
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
from datetime import datetime
import logging
from config import Config
# Import our other modules
from pdf_parser import extract_text_from_pdf, parse_email_thread, get_days_without_account
from email_watcher import check_for_new_fos_email
from notifier import send_telegram_message, send_email_notification
logging.basicConfig(level=logging.INFO)
last_checked_time = datetime.now()
def scheduled_check():
"""Task that runs periodically to check for updates and send reports."""
global last_checked_time
logging.info("Running scheduled check...")
# 1. Check for new FOS emails
new_emails = check_for_new_fos_email(last_checked_time)
if new_emails:
for email in new_emails:
msg = f"📩 New email from FOS:\nSubject: {email['subject']}\nPreview: {email['body'][:200]}"
send_telegram_message(msg)
send_email_notification("New FOS Reply", msg, Config.LANDLORD_EMAIL)
logging.info("Notified about new FOS email.")
last_checked_time = datetime.now()
else:
logging.info("No new FOS emails.")
# 2. Generate daily report and send to landlord
try:
text = extract_text_from_pdf()
emails = parse_email_thread(text)
days = get_days_without_account(text)
report_lines = [
f"===== DAILY COMPLAINT UPDATE =====",
f"Date: {datetime.now().strftime('%Y-%m-%d %H:%M')}",
f"Days without account: {days}",
f"Total emails logged: {len(emails)}",
"Last email from FOS: " + (emails[-1]['date'] if emails else "N/A"),
"=================================="
]
report = "\n".join(report_lines)
# Send to landlord via email
send_email_notification(
f"Daily Update – {days} days without account",
report,
Config.LANDLORD_EMAIL,
cc=Config.CC_LANDLORD
)
logging.info("Daily report sent to landlord.")
except Exception as e:
logging.error(f"Error generating report: {e}")
send_telegram_message(f"⚠️ Scheduler error: {e}")
def start_scheduler():
scheduler = BackgroundScheduler()
scheduler.add_job(
scheduled_check,
trigger=IntervalTrigger(minutes=Config.CHECK_INTERVAL),
id='complaint_check',
replace_existing=True
)
scheduler.start()
logging.info(f"Scheduler started. Checking every {Config.CHECK_INTERVAL} minutes.")
return scheduler