add scheduler to generate events, remove hacky workaround
This commit is contained in:
@@ -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
14
app/backgroundTasks.py
Normal 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()
|
@@ -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")
|
@@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user