Create "Add Room" form and view

Creates "add room" form with required inputs only: center, name and
netmask.

Adds a new button inside the button group in the scopes view. Because
scopes checkboxes values maps to ips the only way to specify the center
in which to add the room is in the add room form itself, using a select
input.

In the future, the RoomForm can be used to display room information once
such functionality lands in the ogserver.
multi-ogserver
Jose M. Guisado 2021-04-20 10:56:25 +00:00 committed by OpenGnSys Support Team
parent 5e46157060
commit f303240c55
4 changed files with 48 additions and 1 deletions

View File

@ -89,3 +89,12 @@ class ImageCreateForm(FlaskForm):
validators=[InputRequired()])
description = StringField(label=_('Description'))
create = SubmitField(label=_('Create'))
class RoomForm(FlaskForm):
center = SelectField(label=_('Center'),
validators=[InputRequired()])
name = StringField(label=_('Room name'),
validators=[InputRequired()])
netmask = StringField(label=_('Netmask'),
validators=[InputRequired()])
submit = SubmitField(label=_('Submit'))

View File

@ -0,0 +1,15 @@
{% extends 'base.html' %}
{% import "bootstrap/wtf.html" as wtf %}
{% block content %}
<h1 class="m-5">{{_('Add room form')}}</h1>
{{ wtf.quick_form(form,
action=url_for('action_room_add'),
method='post',
button_map={'submit': 'primary'},
extra_classes="mx-5") }}
{% endblock %}

View File

@ -59,6 +59,8 @@
formaction="{{ url_for('action_image_create') }}" formmethod="get">
<input class="dropdown-item" type="submit" value="{{ _('Set boot mode') }}"
formaction="{{ url_for('action_mode') }}" formmethod="get">
<input class="dropdown-item" type="submit" value="{{ _('Add room') }}"
formaction="{{ url_for('action_room_add') }}" formmethod="get">
</div>
</div>
</form>

View File

@ -3,7 +3,7 @@ from flask import (
)
from ogcp.forms.action_forms import (
WOLForm, PartitionForm, ClientDetailsForm, HardwareForm, SessionForm,
ImageRestoreForm, ImageCreateForm, SoftwareForm, BootModeForm
ImageRestoreForm, ImageCreateForm, SoftwareForm, BootModeForm, RoomForm
)
from flask_login import (
current_user, LoginManager,
@ -653,3 +653,24 @@ def action_refresh():
else:
flash(_('Refresh request processed successfully'), category='info')
return redirect(url_for("scopes"))
@app.route('/action/room/add', methods=['GET', 'POST'])
@login_required
def action_room_add():
form = RoomForm(request.form)
if request.method == 'POST':
payload = {"center": int(form.center.data),
"name": form.name.data,
"netmask": form.netmask.data}
r = g.server.post('/room/add', payload)
if r.status_code != requests.codes.ok:
flash(_('Server replied with error code when adding the room'), category='error')
else:
flash(_('Room added successfully'), category='info')
return redirect(url_for("scopes"))
else:
r = g.server.get('/scopes')
centers = parse_scopes_from_tree(r.json(), 'center')
centers = [(center['id'], center['name']) for center in centers]
form.center.choices = list(centers)
return render_template('actions/add_room.html', form=form)