import os import time from datetime import datetime, date from flask import Flask, render_template, redirect from flask_sqlalchemy import SQLAlchemy from flask_wtf import FlaskForm from wtforms import (StringField, DateField, TextAreaField, IntegerField, BooleanField, RadioField) from wtforms.validators import InputRequired, Length from wtforms_sqlalchemy.orm import QuerySelectField 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 = SQLAlchemy(app) from auth import auth as auth_blueprint app.register_blueprint(auth_blueprint) class Period(db.Model): period = db.Column(db.Integer, primary_key=True) periodTime = db.Column(db.Integer) weekendSchedule = db.Column(db.Boolean) def __repr__(self): return f'' class Task(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100)) description = db.Column(db.Text) is_completed = db.Column(db.Boolean) created_timestamp = db.Column(db.Integer) due_timestamp = db.Column(db.Integer) def __repr__(self): return f'' class Event(db.Model): id = db.Column(db.Integer, primary_key=True) scheduled_date = db.Column(db.String(100)) period = db.relationship(Period, backref='events') tasks = db.relationship(Task, backref='events') period_num = db.Column(db.Integer, db.ForeignKey('period.period')) task_id = db.Column(db.Integer, db.ForeignKey('task.id')) def __repr__(self): return f'' class TaskForm(FlaskForm): title = StringField('Title', validators=[InputRequired(), Length(min=5, max=100)]) description = TextAreaField('Description', validators=[InputRequired(), Length(max=200)]) class EventForm(FlaskForm): eventDate = DateField('Date', validators=[InputRequired()], format='m-%d-%Y') period_num = IntegerField(validators=[InputRequired()]) selectedTask = QuerySelectField(label='Task', get_label='title' ) @app.route('/') def index(): return redirect('/events') @app.route('/events') def events(): events = Event.query.all() tasks = Task.query.order_by('title') periods = Period.query.all() form = EventForm(obj=tasks) return render_template('events.html', events=events, periods=periods, datetime=datetime, date=date, form=form) @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/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//') 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//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//delete') def delete_task(task_id): task = Task.query.get_or_404(task_id) db.session.delete(task) db.session.commit() return redirect('/tasks')