create settings page, full timezone support
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-11-23 20:36:38 -05:00
parent 5c26838c50
commit 8ed6336e20
8 changed files with 58 additions and 10 deletions

View File

@@ -3,9 +3,9 @@ from flask import Flask, render_template, redirect, url_for, request, flash
from flask_migrate import Migrate
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import (LoginManager, login_user, login_required, logout_user, current_user)
from misc import datetime, date, time, currDay
from misc import datetime, date, time, currDay, ZoneInfo
from db import (db, Period, Task, Event, User)
from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm)
from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm)
from create_events import createEvents
basedir = os.path.abspath(os.path.dirname(__file__))
@@ -82,6 +82,19 @@ def logout():
logout_user()
return redirect(url_for('index'))
@app.route('/settings', methods=('GET', 'POST'))
@login_required
def settings():
user = User.query.get_or_404(current_user.id)
form = SettingsForm(obj=user)
if form.validate_on_submit():
user.realName = form.realName.data
user.timezone = form.timezone.data
if form.password.data != '':
user.password = generate_password_hash(form.password.data, method='sha256')
db.session.commit()
return render_template('settings.html', form=form)
# Periods routes
@app.route('/periods')
@login_required
@@ -133,7 +146,7 @@ def events():
periods = Period.query.all()
createEvents(db, currDay, Period, Event)
return render_template('events.html', events=events, periods=periods, datetime=datetime, date=date)
return render_template('events.html', events=events, periods=periods, datetime=datetime, date=date, ZoneInfo=ZoneInfo)
@app.route('/event/edit/<int:event_id>/', methods=('GET', 'POST'))
@login_required

View File

@@ -43,4 +43,4 @@ class User(UserMixin, db.Model):
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(100))
realName = db.Column(db.String(1000))
timezone = db.Column(db.String(20))
timezone = db.Column(db.String(20), default='UTC')

View File

@@ -1,6 +1,7 @@
import pytz
from db import Task
from flask_wtf import FlaskForm
from wtforms import (StringField, DateField, TimeField, TextAreaField, IntegerField, BooleanField,
from wtforms import (StringField, DateField, TimeField, TextAreaField, IntegerField, SelectField, BooleanField,
RadioField, EmailField, PasswordField)
from wtforms.validators import InputRequired, Length
from wtforms_sqlalchemy.orm import QuerySelectField
@@ -21,6 +22,11 @@ class PeriodForm(FlaskForm):
weekendSchedule = BooleanField(label='Include on Weekends?', false_values=None)
periodTime = TimeField('Time', format="%H:%M")
class SettingsForm(FlaskForm):
password = PasswordField('Password')
realName = StringField('Real Name')
timezone = SelectField('Time Zone', choices=pytz.all_timezones)
class SignupForm(FlaskForm):
userName = StringField('Username', validators=[InputRequired()])
password = PasswordField('Password', validators=[InputRequired()])

View File

@@ -1,8 +1,8 @@
"""empty message
Revision ID: d4e71a6e9479
Revision ID: d92ccc005d22
Revises: bf65c9f77f9f
Create Date: 2022-11-22 05:24:06.596342
Create Date: 2022-11-23 20:32:41.868230
"""
from alembic import op
@@ -10,7 +10,7 @@ import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'd4e71a6e9479'
revision = 'd92ccc005d22'
down_revision = 'bf65c9f77f9f'
branch_labels = None
depends_on = None
@@ -18,7 +18,7 @@ depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('user', sa.Column('timezone', sa.String(length=20), nullable=True))
op.add_column('user', sa.Column('timezone', sa.String(length=20), nullable=True, server_default='UTC'))
# ### end Alembic commands ###

View File

@@ -1,4 +1,5 @@
import time
from datetime import datetime, date
from zoneinfo import ZoneInfo
currDay = datetime.now()
currDay = currDay.strftime('%m-%d-%Y')

View File

@@ -20,6 +20,9 @@ Flask-User==1.0.2.2
# WTForms Extensions
WTForms-SQLAlchemy==0.3.0
# Python Time packages
pytz==2022.6
# Automated tests
pytest==7.2.0
pytest-cov==4.0.0

View File

@@ -1,10 +1,12 @@
{% extends 'base.html' %}
{% set currDay = datetime.now() %}
{% set currDay = currDay.astimezone(ZoneInfo(current_user.timezone)) %}
{% set currTime = currDay.strftime('%I:%M %p') %}
{% set currDay = currDay.strftime('%m-%d-%Y') %}
{% block content %}
<span><h1>{% block title %} Events {% endblock %}</h1></span>
<b>Current Date: {{ currDay }} </b> <br> <br>
<b>Current Date: {{ currDay }} </b> <br> <b>Current Time: {{ currTime }}</b> <br> <br>
<div>
{% for period in periods %}
<div>

View File

@@ -0,0 +1,23 @@
{% extends 'base.html' %}
{% block content %}
<span><h1>{% block title %} Settings {% endblock %}</h1></span>
<form method="post">
{{ form.csrf_token }}
<p>
<b>User: {{ current_user.userName }}</b>
<div>
{{ form.realName.label }} {{ form.realName }}
</div> <br>
<div>
{{ form.password.label }} {{ form.password }}
</div> <br>
<div>
{{ form.timezone.label }} {{ form.timezone }}
</div>
</p>
<p>
<button class="btn btn-primary" type="submit">Submit</button>
</p>
</form>
{% endblock %}