add scheduler to generate events, remove hacky workaround

This commit is contained in:
2022-11-25 20:48:16 -05:00
parent 04c8dfb5b4
commit bbd44e9ec6
4 changed files with 24 additions and 3 deletions

View File

@@ -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 misc import datetime, date, time, currDay, ZoneInfo, currVersion, currCommit
from db import (db, Period, Task, Event, User) from db import (db, Period, Task, Event, User)
from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm) from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm)
from backgroundTasks import scheduleCreateEvents
from create_events import createEvents from create_events import createEvents
basedir = os.path.abspath(os.path.dirname(__file__)) basedir = os.path.abspath(os.path.dirname(__file__))
@@ -21,6 +22,10 @@ db.init_app(app)
migrate = Migrate() migrate = Migrate()
migrate.init_app(app, db) migrate.init_app(app, db)
# Schedule creation of events every hour
with app.app_context():
scheduleCreateEvents(app, db, currDay, Period, Event, createEvents)
# Authentication stuff # Authentication stuff
login_manager = LoginManager() login_manager = LoginManager()
@@ -47,7 +52,6 @@ def injectVerCommit():
# Index route # Index route
@app.route('/') @app.route('/')
def index(): def index():
createEvents(db, currDay, Period, Event)
return redirect('/events') return redirect('/events')
# Authentication routes # Authentication routes
@@ -120,7 +124,6 @@ def newPeriod():
) )
db.session.add(period) db.session.add(period)
db.session.commit() db.session.commit()
createEvents(db, currDay, Period, Event)
return redirect(f'/period/edit/{period.period}') return redirect(f'/period/edit/{period.period}')
return render_template('newPeriod.html', form=form) return render_template('newPeriod.html', form=form)
@@ -152,7 +155,6 @@ def delete_period(periodNum):
def events(): def events():
events = Event.query.all() events = Event.query.all()
periods = Period.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) return render_template('events.html', events=events, periods=periods, datetime=datetime, date=date, ZoneInfo=ZoneInfo)

14
app/backgroundTasks.py Normal file
View File

@@ -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()

View File

@@ -9,3 +9,5 @@ def createEvents(db, currDay, Period, Event):
) )
db.session.add(event) db.session.add(event)
db.session.commit() db.session.commit()
print("createEvents script ran successfully")

View File

@@ -20,6 +20,9 @@ Flask-User==1.0.2.2
# WTForms Extensions # WTForms Extensions
WTForms-SQLAlchemy==0.3.0 WTForms-SQLAlchemy==0.3.0
# APScheduler automated scheduler
APScheduler==3.9.1.post1
# Python Time packages # Python Time packages
pytz==2022.6 pytz==2022.6