byceps/blueprints/site/user_group/views.py
"""
byceps.blueprints.site.user_group.views
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Copyright: 2014-2024 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""
from flask import abort, g, request
from flask_babel import gettext
from byceps.services.user_group import user_group_service
from byceps.util.framework.blueprint import create_blueprint
from byceps.util.framework.flash import flash_success
from byceps.util.framework.templating import templated
from byceps.util.views import login_required, redirect_to
from .forms import CreateForm, UpdateForm
blueprint = create_blueprint('user_group', __name__)
@blueprint.get('/')
@templated
def index():
"""List groups."""
if g.party_id is None:
abort(404)
groups = user_group_service.get_groups_for_party(g.party_id)
return {
'groups': groups,
}
@blueprint.get('/<uuid:group_id>')
@templated
def view(group_id):
"""Show group."""
if g.party_id is None:
abort(404)
group = _get_group_or_404(group_id)
return {
'group': group,
}
@blueprint.get('/create')
@login_required
@templated
def create_form(erroneous_form=None):
"""Show a form to create a group."""
if g.party_id is None:
abort(404)
form = erroneous_form if erroneous_form else CreateForm(g.party_id)
return {
'form': form,
}
@blueprint.post('/')
@login_required
def create():
"""Create a group."""
if g.party_id is None:
abort(404)
form = CreateForm(g.party_id, request.form)
if not form.validate():
return create_form(form)
creator = g.user
title = form.title.data.strip()
description = form.description.data.strip()
group = user_group_service.create_group(
g.party, creator, title, description
)
flash_success(
gettext(
'Group "%(group_title)s" has been created.',
group_title=group.title,
)
)
return redirect_to('.view', group_id=group.id)
@blueprint.get('/<uuid:group_id>/update')
@login_required
@templated
def update_form(group_id, erroneous_form=None):
"""Show a form to update a group."""
group = _get_group_or_404(group_id)
form = (
erroneous_form
if erroneous_form
else UpdateForm(group.party_id, group.title, obj=group)
)
return {
'group': group,
'form': form,
}
@blueprint.post('/<uuid:group_id>')
@login_required
def update(group_id):
"""Update a group."""
group = _get_group_or_404(group_id)
form = UpdateForm(group.party_id, group.title, request.form)
if not form.validate():
return update_form(group_id, form)
title = form.title.data
description = form.description.data
user_group_service.update_group(group, title, description)
flash_success(gettext('Changes have been saved.'))
return redirect_to('.view', group_id=group.id)
def _get_group_or_404(group_id):
group = user_group_service.find_group(group_id)
if (group is None) or (group.party_id != g.party_id):
abort(404)
return group