from app import app from auth import auth from flask import g, request, redirect, render_template, url_for from flask_peewee.utils import get_object_or_404 from models import Group, Member from forms import CreateGroup, DeleteForm, ChangeGroup from utils import templated from filters import * def get_group_or_404(*query): group = get_object_or_404(Group.select().join(Member), Member.user == g.user, *query) return group @app.route('/', methods=['GET', 'POST']) @templated('index.html') @auth.login_required def index(): form = CreateGroup(request.form) if form.validate_on_submit(): group = Group.create(name=form.name.data, public=form.public.data) Member.create(user=g.user, group=group, admin=True) form = CreateGroup() groups = [member.group for member in g.user.groups] return {'groups': groups, 'create_form': form} @app.route('//_delete/', methods=['GET', 'POST']) @templated('group_delete.html') @auth.login_required def group_delete(group_name): group = get_group_or_404(Group.name == group_name, Member.admin == True) form = DeleteForm(request.form) if form.validate_on_submit(): if form.sure.data == 'yes': group.delete_instance(recursive=True) return redirect(url_for('index')) return {'group': group, 'delete_form': form, 'breadcrumbs': [{'href': url_for('group', group_name=group.name), 'text': group}, {'text': 'Delete group'}]} @app.route('//_change/', methods=['GET', 'POST']) @templated('group_change.html') @auth.login_required def group_change(group_name): group = get_group_or_404(Group.name == group_name, Member.admin == True) form = ChangeGroup(request.form, obj=group) if form.validate_on_submit(): del form.name form.populate_obj(group) group.save() return redirect(url_for('group', group_name=group.name)) return {'group': group, 'change_form': form, 'breadcrumbs': [{'href': url_for('group', group_name=group.name), 'text': group}, {'text': 'Edit group'}]} @app.route('//') @templated('group.html') @auth.login_required def group(group_name): group = get_group_or_404(Group.name == group_name) member = get_object_or_404(Member, Member.user == g.user, Member.group == group) return {'group': group, 'admin': member.admin, 'members': [m for m in group.members.execute()], 'breadcrumbs': [{'text': group}]}