doneth.at/app/settings.py

66 lines
2.0 KiB
Python

import pytz
from flask import Blueprint, abort, render_template
from flask.globals import request
from flask_login import current_user, login_required
from flask_migrate import current
from flask_wtf import FlaskForm
from wtforms import IntegerField, SelectField, SubmitField
from wtforms.validators import DataRequired, NumberRange
from wtforms.widgets import NumberInput
from .db import APIKey, db
blueprint = Blueprint('settings', __name__)
class SettingsForm(FlaskForm):
timezone = SelectField(
'Timezone', choices=list(map(lambda x: (x, x.replace("_", " ")), pytz.all_timezones)),
validators=[
DataRequired()
])
start_of_day = IntegerField(
'Start of day hour',
widget=NumberInput(min=0, max=23),
validators=[
NumberRange(min=0, max=23)
]
)
submit = SubmitField('Save')
@blueprint.route('/settings', methods=['GET', 'POST'])
@login_required
def settings():
form = SettingsForm(obj=current_user)
if form.validate_on_submit():
current_user.timezone = form.timezone.data
current_user.start_of_day = form.start_of_day.data
db.session.commit()
return render_template('settings.html', form=form, success=True)
return render_template('settings.html', form=form)
@blueprint.route('/settings/keys', methods=['GET', 'POST'])
@login_required
def api_keys():
apps = [a[0] for a in db.session.query(APIKey.app_name).filter(
APIKey.user == current_user).group_by(APIKey.app_name).all()]
keys = {app_name: APIKey.query.filter(
APIKey.user_id == current_user.id, APIKey.app_name == app_name).all() for app_name in apps}
return render_template('api_keys.html', apps=sorted(apps), keys=keys)
@blueprint.route('/settings/keys/<key_id>/delete', methods=['GET', 'POST'])
@login_required
def api_key_delete(key_id):
k = APIKey.query.get_or_404(key_id)
if k.user_id != current_user.id:
abort(403)
if request.method == 'GET':
return render_template('')