diff --git a/app/portal/__init__.py b/app/portal/__init__.py index ed29fe9..018e669 100644 --- a/app/portal/__init__.py +++ b/app/portal/__init__.py @@ -9,11 +9,14 @@ from app.models.bridges import BridgeConf, Bridge from app.models.alarms import Alarm from app import Origin, Proxy from app.models.base import Group, MirrorList -from app.portal.forms import EditGroupForm, NewGroupForm, NewOriginForm, EditOriginForm, LifecycleForm, \ +from app.portal.forms import NewOriginForm, EditOriginForm, LifecycleForm, \ NewBridgeConfForm, EditBridgeConfForm, NewMirrorListForm +from app.portal.group import group, NewGroupForm, EditGroupForm portal = Blueprint("portal", __name__, template_folder="templates", static_folder="static") +portal.register_blueprint(group, url_prefix="/group") + @portal.app_template_filter("mirror_expiry") def calculate_mirror_expiry(s: datetime) -> str: @@ -43,64 +46,6 @@ def portal_home(): lastweek=lastweek, proxies=proxies) -@portal.route("/groups") -def view_groups(): - groups = Group.query.order_by(Group.group_name).all() - return render_template("list.html.j2", - section="group", - title="Groups", - item="group", - items=groups, - new_link=url_for("portal.new_group")) - - -@portal.route("/group/new", methods=['GET', 'POST']) -def new_group(): - form = NewGroupForm() - if form.validate_on_submit(): - group = Group() - group.group_name = form.group_name.data - group.description = form.description.data - group.eotk = form.eotk.data - group.created = datetime.utcnow() - group.updated = datetime.utcnow() - try: - db.session.add(group) - db.session.commit() - flash(f"Created new group {group.group_name}.", "success") - return redirect(url_for("portal.edit_group", group_id=group.id)) - except exc.SQLAlchemyError as e: - print(e) - flash("Failed to create new group.", "danger") - return redirect(url_for("portal.view_groups")) - return render_template("new.html.j2", section="group", form=form) - - -@portal.route('/group/edit/', methods=['GET', 'POST']) -def edit_group(group_id): - group = Group.query.filter(Group.id == group_id).first() - if group is None: - return Response(render_template("error.html.j2", - section="group", - header="404 Group Not Found", - message="The requested group could not be found."), - status=404) - form = EditGroupForm(description=group.description, - eotk=group.eotk) - if form.validate_on_submit(): - group.description = form.description.data - group.eotk = form.eotk.data - group.updated = datetime.utcnow() - try: - db.session.commit() - flash("Saved changes to group.", "success") - except exc.SQLAlchemyError: - flash("An error occurred saving the changes to the group.", "danger") - return render_template("group.html.j2", - section="group", - group=group, form=form) - - @portal.route("/origin/new", methods=['GET', 'POST']) @portal.route("/origin/new/", methods=['GET', 'POST']) def new_origin(group_id=None): diff --git a/app/portal/forms.py b/app/portal/forms.py index cb7e4bc..1c2177a 100644 --- a/app/portal/forms.py +++ b/app/portal/forms.py @@ -3,19 +3,6 @@ from wtforms import StringField, SubmitField, SelectField, BooleanField, Integer from wtforms.validators import DataRequired, NumberRange -class NewGroupForm(FlaskForm): - group_name = StringField("Short Name", validators=[DataRequired()]) - description = StringField("Description", validators=[DataRequired()]) - eotk = BooleanField("Deploy EOTK instances?") - submit = SubmitField('Save Changes', render_kw={"class": "btn btn-success"}) - - -class EditGroupForm(FlaskForm): - description = StringField('Description', validators=[DataRequired()]) - eotk = BooleanField("Deploy EOTK instances?") - submit = SubmitField('Save Changes', render_kw={"class": "btn btn-success"}) - - class NewOriginForm(FlaskForm): domain_name = StringField('Domain Name', validators=[DataRequired()]) description = StringField('Description', validators=[DataRequired()]) diff --git a/app/portal/group.py b/app/portal/group.py new file mode 100644 index 0000000..ca944d0 --- /dev/null +++ b/app/portal/group.py @@ -0,0 +1,83 @@ +from datetime import datetime + +from flask import render_template, url_for, flash, redirect, Response, Blueprint +from flask_wtf import FlaskForm +from sqlalchemy import exc +from wtforms import StringField, BooleanField, SubmitField +from wtforms.validators import DataRequired + +from app.extensions import db +from app.models.base import Group + +group = Blueprint("group", __name__) + + +class NewGroupForm(FlaskForm): + group_name = StringField("Short Name", validators=[DataRequired()]) + description = StringField("Description", validators=[DataRequired()]) + eotk = BooleanField("Deploy EOTK instances?") + submit = SubmitField('Save Changes', render_kw={"class": "btn btn-success"}) + + +class EditGroupForm(FlaskForm): + description = StringField('Description', validators=[DataRequired()]) + eotk = BooleanField("Deploy EOTK instances?") + submit = SubmitField('Save Changes', render_kw={"class": "btn btn-success"}) + + +@group.route("/list") +def group_list(): + groups = Group.query.order_by(Group.group_name).all() + return render_template("list.html.j2", + section="group", + title="Groups", + item="group", + items=groups, + new_link=url_for("portal.group.group_new")) + + +@group.route("/new", methods=['GET', 'POST']) +def group_new(): + form = NewGroupForm() + if form.validate_on_submit(): + group = Group() + group.group_name = form.group_name.data + group.description = form.description.data + group.eotk = form.eotk.data + group.created = datetime.utcnow() + group.updated = datetime.utcnow() + try: + db.session.add(group) + db.session.commit() + flash(f"Created new group {group.group_name}.", "success") + return redirect(url_for("portal.group.group_edit", group_id=group.id)) + except exc.SQLAlchemyError as e: + print(e) + flash("Failed to create new group.", "danger") + return redirect(url_for("portal.group.group_list")) + return render_template("new.html.j2", section="group", form=form) + + +@group.route('/edit/', methods=['GET', 'POST']) +def group_edit(group_id): + group = Group.query.filter(Group.id == group_id).first() + if group is None: + return Response(render_template("error.html.j2", + section="group", + header="404 Group Not Found", + message="The requested group could not be found."), + status=404) + form = EditGroupForm(description=group.description, + eotk=group.eotk) + if form.validate_on_submit(): + group.description = form.description.data + group.eotk = form.eotk.data + group.updated = datetime.utcnow() + try: + db.session.commit() + flash("Saved changes to group.", "success") + except exc.SQLAlchemyError: + flash("An error occurred saving the changes to the group.", "danger") + return render_template("group.html.j2", + section="group", + group=group, form=form) diff --git a/app/portal/templates/base.html.j2 b/app/portal/templates/base.html.j2 index 4129be9..701d613 100644 --- a/app/portal/templates/base.html.j2 +++ b/app/portal/templates/base.html.j2 @@ -72,7 +72,7 @@