1.0.1 release #15
19
app/app.py
19
app/app.py
@@ -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
|
||||
|
@@ -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')
|
||||
|
@@ -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()])
|
||||
|
@@ -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 ###
|
||||
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import time
|
||||
from datetime import datetime, date
|
||||
from zoneinfo import ZoneInfo
|
||||
currDay = datetime.now()
|
||||
currDay = currDay.strftime('%m-%d-%Y')
|
@@ -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
|
||||
|
@@ -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>
|
||||
|
23
app/templates/settings.html
Normal file
23
app/templates/settings.html
Normal 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 %}
|
Reference in New Issue
Block a user