diff --git a/app/app.py b/app/app.py index 257bf35..f8971a7 100644 --- a/app/app.py +++ b/app/app.py @@ -6,6 +6,7 @@ from flask_login import (LoginManager, login_user, login_required, logout_user, from misc import datetime, date, time, currDay, ZoneInfo, currVersion, currCommit from db import (db, Period, Task, Event, User) from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm) +from backgroundTasks import scheduleCreateEvents from create_events import createEvents basedir = os.path.abspath(os.path.dirname(__file__)) @@ -21,6 +22,10 @@ db.init_app(app) migrate = Migrate() migrate.init_app(app, db) +# Schedule creation of events every hour +with app.app_context(): + scheduleCreateEvents(app, db, currDay, Period, Event, createEvents) + # Authentication stuff login_manager = LoginManager() @@ -47,7 +52,6 @@ def injectVerCommit(): # Index route @app.route('/') def index(): - createEvents(db, currDay, Period, Event) return redirect('/events') # Authentication routes @@ -120,7 +124,6 @@ def newPeriod(): ) db.session.add(period) db.session.commit() - createEvents(db, currDay, Period, Event) return redirect(f'/period/edit/{period.period}') return render_template('newPeriod.html', form=form) @@ -152,7 +155,6 @@ def delete_period(periodNum): def events(): events = Event.query.all() periods = Period.query.all() - createEvents(db, currDay, Period, Event) return render_template('events.html', events=events, periods=periods, datetime=datetime, date=date, ZoneInfo=ZoneInfo) diff --git a/app/backgroundTasks.py b/app/backgroundTasks.py new file mode 100644 index 0000000..f8d6458 --- /dev/null +++ b/app/backgroundTasks.py @@ -0,0 +1,14 @@ +from apscheduler.schedulers.background import BackgroundScheduler +from apscheduler.triggers.cron import CronTrigger + +def scheduleCreateEvents(app, db, currDay, Period, Event, createEvents): + # create events upon application launch + createEvents(db, currDay, Period, Event) + + # schedule createEvents task every hour + sched = BackgroundScheduler() + def eventsTask(): + with app.app_context(): + createEvents(db, currDay, Period, Event) + sched.add_job(eventsTask, CronTrigger.from_crontab('00 * * * *')) + sched.start() \ No newline at end of file diff --git a/app/create_events.py b/app/create_events.py index 19bfc2c..2033c0d 100644 --- a/app/create_events.py +++ b/app/create_events.py @@ -9,3 +9,5 @@ def createEvents(db, currDay, Period, Event): ) db.session.add(event) db.session.commit() + + print("createEvents script ran successfully") \ No newline at end of file diff --git a/app/requirements.txt b/app/requirements.txt index 1158712..fb83cc6 100644 --- a/app/requirements.txt +++ b/app/requirements.txt @@ -20,6 +20,9 @@ Flask-User==1.0.2.2 # WTForms Extensions WTForms-SQLAlchemy==0.3.0 +# APScheduler automated scheduler +APScheduler==3.9.1.post1 + # Python Time packages pytz==2022.6