improved validattors, added form for removal

This commit is contained in:
Daniel 2019-11-03 18:35:24 +01:00
parent 9c6c72ab21
commit a93befa48c
6 changed files with 64 additions and 8 deletions

View file

@ -6,7 +6,11 @@
{% block body %} {% block body %}
<div class="ui container"> <div class="ui container">
{% from "_formhelpers.html" import render_field %} {% from "_formhelpers.html" import render_field %}
{% if form.errors %}
<form method=post class="ui form error"> <form method=post class="ui form error">
{% else %}
<form method=post class="ui form">
{% endif %}
{{ form.hidden_tag() }} {{ form.hidden_tag() }}
<h4 class="ui dividing header">Allgemeine Informationen</h4> <h4 class="ui dividing header">Allgemeine Informationen</h4>
{{ render_field(form.name) }} {{ render_field(form.name) }}

View file

@ -6,6 +6,25 @@
{% block body %} {% block body %}
<div class="topspacer"></div> <div class="topspacer"></div>
<div class="ui container"> <div class="ui container">
<h2 class="ui center aligned icon header">
<i class="circular trash icon"></i>
<div class="content">
Freigabe entfernen
<div class="sub header">Sie möchten die Samba Freigabe mit dem Namen "{{ name }}" entfernen. Bitte
konkretisieren und bestätigen.
</div>
</div>
</h2>
{% from "_formhelpers.html" import render_field %}
{% if form.errors %}
<form method=post class="ui form error">
{% else %}
<form method=post class="ui form">
{% endif %}
{{ form.hidden_tag() }}
{{ render_field(form.remove_data) }}
{{ render_field(form.okay) }}
{{ render_field(form.submit) }}
</form>
</div> </div>
{% endblock %} {% endblock %}

View file

@ -1,6 +1,8 @@
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, BooleanField, SelectField, validators, SubmitField from wtforms import StringField, BooleanField, SelectField, validators, SubmitField
from dirkules.wtforms_extension import ToggleBooleanField, RequiredIf
class SambaConfigForm(FlaskForm): class SambaConfigForm(FlaskForm):
workgroup = StringField("workgroup", [validators.required(message="Bitte Feld ausfüllen!"), workgroup = StringField("workgroup", [validators.required(message="Bitte Feld ausfüllen!"),
@ -33,3 +35,10 @@ class SambaAddForm(FlaskForm):
validators.Regexp('^[0-7]{4}$', message="Dies ist kein gültiger Wert!")], validators.Regexp('^[0-7]{4}$', message="Dies ist kein gültiger Wert!")],
render_kw={"placeholder": "0700"}) render_kw={"placeholder": "0700"})
submit = SubmitField("Freigabe hinzufügen") submit = SubmitField("Freigabe hinzufügen")
class SambaRemovalForm(FlaskForm):
remove_data = BooleanField("Alle Daten entfernen")
okay = ToggleBooleanField("Sicherheitsprotokolle überbrücken.",
validators=[RequiredIf("remove_data",)])
submit = SubmitField("Pool erstellen")

View file

@ -5,7 +5,7 @@ from flask import render_template, url_for, request, redirect, flash
from dirkules.samba import bp_samba from dirkules.samba import bp_samba
from dirkules.samba import manager as smb_man from dirkules.samba import manager as smb_man
from dirkules.samba.models import SambaShare from dirkules.samba.models import SambaShare
from dirkules.samba.validation import SambaConfigForm, SambaAddForm from dirkules.samba.validation import SambaConfigForm, SambaAddForm, SambaRemovalForm
@bp_samba.route('/', methods=['GET']) @bp_samba.route('/', methods=['GET'])
@ -81,9 +81,13 @@ def remove():
return redirect(url_for('.index')) return redirect(url_for('.index'))
else: else:
try: try:
form = SambaRemovalForm(request.form)
share_id = int(share_id) share_id = int(share_id)
share = smb_man.get_share_by_id(share_id) share = smb_man.get_share_by_id(share_id)
return render_template('samba/remove.html') if request.method == 'POST' and form.validate():
print("LOL")
return redirect(url_for('.index'))
return render_template('samba/remove.html', name=share.name, form=form)
except ValueError: except ValueError:
flash("ValueError: id is not an int") flash("ValueError: id is not an int")
except LookupError: except LookupError:

View file

@ -1,6 +1,7 @@
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, BooleanField, SelectField, IntegerField, RadioField, validators, SubmitField from wtforms import StringField, BooleanField, SelectField, IntegerField, RadioField, validators, SubmitField
from dirkules.models import Drive from dirkules.models import Drive
from dirkules.wtforms_extension import ToggleBooleanField
class CleaningForm(FlaskForm): class CleaningForm(FlaskForm):
@ -27,10 +28,6 @@ class SemanticMultiSelectField(SelectField):
raise ValueError(self.gettext('There are no elements available but this field is required.')) raise ValueError(self.gettext('There are no elements available but this field is required.'))
class ToggleBooleanField(BooleanField):
pass
class PoolAddForm(FlaskForm): class PoolAddForm(FlaskForm):
name = StringField("Name", [validators.required(message="Bitte Feld ausfüllen!"), name = StringField("Name", [validators.required(message="Bitte Feld ausfüllen!"),
validators.Length(max=255, message="Eingabe zu lang")], validators.Length(max=255, message="Eingabe zu lang")],

View file

@ -0,0 +1,23 @@
from wtforms import BooleanField
from wtforms.validators import InputRequired, Optional
class ToggleBooleanField(BooleanField):
pass
class RequiredIf(InputRequired):
field_flags = ('requiredif',)
def __init__(self, other_field_name, message=None, *args, **kwargs):
self.other_field_name = other_field_name
self.message = message
def __call__(self, form, field):
other_field = form[self.other_field_name]
if other_field is None:
raise Exception('no field named "%s" in form' % self.other_field_name)
if bool(other_field.data):
super(RequiredIf, self).__call__(form, field)
else:
Optional().__call__(form, field)