ramanna commited on
Commit
c5e93e8
·
verified ·
1 Parent(s): 6e6e950

Add weekly scheduler: scheduler.py

Browse files
Files changed (1) hide show
  1. scheduler.py +56 -0
scheduler.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ scheduler.py
4
+ ------------
5
+ Runs as a background process alongside Streamlit.
6
+ Triggers the full data pipeline every Monday at 9:00 AM US Central time.
7
+ """
8
+
9
+ import logging
10
+ import os
11
+ import subprocess
12
+ import sys
13
+ from datetime import datetime
14
+
15
+ from apscheduler.schedulers.blocking import BlockingScheduler
16
+ from apscheduler.triggers.cron import CronTrigger
17
+ from dotenv import load_dotenv
18
+
19
+ load_dotenv()
20
+
21
+ logging.basicConfig(
22
+ level=logging.INFO,
23
+ format="%(asctime)s [SCHEDULER] %(message)s",
24
+ handlers=[logging.StreamHandler()],
25
+ )
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ def run_pipeline():
30
+ logger.info(f"Weekly pipeline triggered at {datetime.now().isoformat()}")
31
+ env = os.environ.copy()
32
+ try:
33
+ subprocess.run(
34
+ [
35
+ sys.executable, "update_data.py",
36
+ "--pull", "--overwrite-pdf", "--continue-on-error",
37
+ ],
38
+ env=env,
39
+ check=False,
40
+ )
41
+ logger.info("Weekly pipeline completed.")
42
+ except Exception as e:
43
+ logger.error(f"Weekly pipeline failed: {e}")
44
+
45
+
46
+ if __name__ == "__main__":
47
+ scheduler = BlockingScheduler(timezone="America/Chicago")
48
+ scheduler.add_job(
49
+ run_pipeline,
50
+ CronTrigger(day_of_week="mon", hour=9, minute=0, timezone="America/Chicago"),
51
+ )
52
+ logger.info("Scheduler started — pipeline will run every Monday at 9:00 AM CT.")
53
+ try:
54
+ scheduler.start()
55
+ except (KeyboardInterrupt, SystemExit):
56
+ logger.info("Scheduler stopped.")