diff options
author | Javier Sánchez Parra <jsanchez@soleta.eu> | 2021-09-03 14:51:15 +0200 |
---|---|---|
committer | Javier Sánchez Parra <jsanchez@soleta.eu> | 2021-09-03 14:51:15 +0200 |
commit | da9b2ea9c2ef37eb191ba0a9e78e62ce942dc912 (patch) | |
tree | 6e54487fc3ab2fb028402c8d84c06efe82caccc9 /ogcp | |
parent | d83e456daf20e070a3eee51d885166566177c369 (diff) |
Add image details action
This action is used to visualize the specific details of an image, as
its ID, name, size, etc.
Diffstat (limited to 'ogcp')
-rw-r--r-- | ogcp/forms/action_forms.py | 11 | ||||
-rw-r--r-- | ogcp/templates/actions/image_details.html | 13 | ||||
-rw-r--r-- | ogcp/templates/images.html | 2 | ||||
-rw-r--r-- | ogcp/views.py | 26 |
4 files changed, 50 insertions, 2 deletions
diff --git a/ogcp/forms/action_forms.py b/ogcp/forms/action_forms.py index 1722d8b..d881065 100644 --- a/ogcp/forms/action_forms.py +++ b/ogcp/forms/action_forms.py @@ -7,7 +7,7 @@ from wtforms import ( Form, SubmitField, HiddenField, SelectField, BooleanField, IntegerField, - StringField, RadioField, FormField, FieldList + StringField, RadioField, FormField, FieldList, DecimalField ) from wtforms.validators import InputRequired from flask_wtf import FlaskForm @@ -143,3 +143,12 @@ class DeleteRoomForm(FlaskForm): room = SelectField(label=_('Room'), validators=[InputRequired()]) submit = SubmitField(label=_('Submit')) + +class ImageDetailsForm(FlaskForm): + id = StringField(label=_('Id')) + name = StringField(label=_('Name')) + size = DecimalField(label=_('Size (GiB)')) + datasize = DecimalField(label=_('Datasize (GiB)')) + modified = StringField(label=_('Modified')) + permissions = StringField(label=_('Permissions')) + software_id = StringField(label=_('Software id')) diff --git a/ogcp/templates/actions/image_details.html b/ogcp/templates/actions/image_details.html new file mode 100644 index 0000000..a4feb55 --- /dev/null +++ b/ogcp/templates/actions/image_details.html @@ -0,0 +1,13 @@ +{% extends 'base.html' %} +{% import "bootstrap/wtf.html" as wtf %} + +{% block content %} + +<h1 class="m-5">{{_('Image details')}}</h1> + +{{ wtf.quick_form(form, + method='post', + button_map={'create': 'primary'}, + extra_classes="mx-5") }} + +{% endblock %} diff --git a/ogcp/templates/images.html b/ogcp/templates/images.html index e698af9..3faa029 100644 --- a/ogcp/templates/images.html +++ b/ogcp/templates/images.html @@ -25,5 +25,7 @@ {% endblock %} {% block commands %} + <input class="btn btn-light" type="submit" value="{{ _('Image details') }}" + form="imagesForm" formaction="{{ url_for('action_image_info') }}" formmethod="get"> {% endblock %} diff --git a/ogcp/views.py b/ogcp/views.py index 3e80120..11e3693 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -9,7 +9,7 @@ from flask import ( g, render_template, url_for, flash, redirect, request, jsonify, make_response ) from ogcp.forms.action_forms import ( - WOLForm, SetupForm, ClientDetailsForm, HardwareForm, + WOLForm, SetupForm, ClientDetailsForm, ImageDetailsForm, HardwareForm, SessionForm, ImageRestoreForm, ImageCreateForm, SoftwareForm, BootModeForm, RoomForm, DeleteRoomForm, CenterForm, DeleteCenterForm ) @@ -774,3 +774,27 @@ def images(): r = g.server.get('/images') images = r.json()['images'] return render_template('images.html', images=images) + +@app.route('/action/image/info', methods=['GET']) +@login_required +def action_image_info(): + form = ImageDetailsForm() + ids = parse_elements(request.args.to_dict()) + if not validate_elements(ids, max_len=1): + return redirect(url_for('images')) + + id = ids.pop() + r = g.server.get('/images') + images = r.json()['images'] + image = next(img for img in images if img['id'] == int(id)) + + form.id.data = image['id'] + form.name.data = image['name'] + # Bytes to Gibibytes + form.size.data = image['size'] / 1024 ** 3 + form.datasize.data = image['datasize'] / 1024 ** 3 + form.modified.data = image['modified'] + form.permissions.data = image['permissions'] + form.software_id.data = image['software_id'] + + return render_template('actions/image_details.html', form=form) |