Files
BellScheduler/app.py

124 lines
4.2 KiB
Python

import os
from flask import Flask, render_template, redirect
from misc import datetime, date, time, currDay
from db import (db, Period, Task, Event)
from forms import (TaskForm, EventForm, PeriodForm)
from create_events import createEvents
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SECRET_KEY'] = 'HwG55rpe83jcaglifXm8NuF4WEeXyJV4'
app.config['SQLALCHEMY_DATABASE_URI'] =\
'sqlite:///' + os.path.join(basedir, 'database.db')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
from auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint)
@app.route('/')
def index():
createEvents(db, currDay, Period, Event)
return redirect('/events')
# Periods routes
@app.route('/periods')
def periods():
periods = Period.query.all()
return render_template('periods.html', periods=periods, datetime=datetime)
@app.route('/period/new', methods=('GET', 'POST'))
def newPeriod():
form = PeriodForm()
if form.validate_on_submit():
period = Period(periodTime=form.periodTime.data,
weekendSchedule=form.weekendSchedule.data
)
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)
@app.route('/period/edit/<int:periodNum>', methods=('GET', 'POST'))
def editPeriod(periodNum):
period = Period.query.get_or_404(periodNum)
form = PeriodForm(obj=period)
if form.validate_on_submit():
period.periodTime = form.periodTime.data
period.weekendSchedule = form.weekendSchedule.data
db.session.commit()
return redirect(f'/period/edit/{periodNum}')
return render_template('editPeriod.html', period=period, form=form, datetime=datetime)
@app.post('/period/delete/<int:periodNum>')
def delete_period(periodNum):
period = Period.query.get_or_404(periodNum)
db.session.delete(period)
db.session.commit()
return redirect('/periods')
# Events routes
@app.route('/events')
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)
@app.route('/event/edit/<int:event_id>/', methods=('GET', 'POST'))
def editEvent(event_id):
event = Event.query.get_or_404(event_id)
form = EventForm(obj=event)
if form.validate_on_submit():
if hasattr(form.selectedTask.data, 'id'):
event.task_id = form.selectedTask.data.id
else:
event.task_id = None
db.session.commit()
return redirect('/events')
return render_template('editEvent.html', event=event, form=form, datetime=datetime)
# Tasks routes
@app.route('/tasks')
def tasks():
tasks = Task.query.all()
return render_template('tasks.html', str=str, tasks=tasks, datetime=datetime, date=date)
@app.route('/task/<int:task_id>/')
def task(task_id):
task = Task.query.get_or_404(task_id)
return render_template('task.html', str=str, task=task, datetime=datetime, date=date)
@app.route('/task/new', methods=('GET', 'POST'))
def newTask():
form = TaskForm()
if form.validate_on_submit():
task = Task(title=form.title.data,
description=form.description.data,
created_timestamp=int(time.time()))
db.session.add(task)
db.session.commit()
return redirect(f'/task/{task.id}')
return render_template('newtask.html', form=form)
@app.route('/task/<int:task_id>/edit', methods=('GET', 'POST'))
def editTask(task_id):
task = Task.query.get_or_404(task_id)
form = TaskForm(obj=task)
if form.validate_on_submit():
task.title=form.title.data
task.description=form.description.data
db.session.commit()
return redirect(f'/task/{task_id}')
return render_template('edittask.html', task=task, form=form)
@app.post('/task/<int:task_id>/delete')
def delete_task(task_id):
task = Task.query.get_or_404(task_id)
db.session.delete(task)
db.session.commit()
return redirect('/tasks')