Fixed RadioField and added support for InputRequired

This commit is contained in:
SmileyJames
2015-02-12 17:50:17 +00:00
parent 01d7e1cf02
commit 37410c2e18
+13 -7
View File
@@ -4,7 +4,7 @@ import re
import copy
from wtforms.validators import Length, NumberRange, Email, EqualTo, IPAddress, \
Regexp, URL, AnyOf, Optional
Regexp, URL, AnyOf, Optional, InputRequired
try:
from wtforms.validators import DataRequired
except ImportError:
@@ -14,7 +14,8 @@ except ImportError:
from wtforms import StringField
from wtforms.widgets import TextInput as _TextInput, PasswordInput as _PasswordInput, \
CheckboxInput as _CheckboxInput, Select as _Select, TextArea as _TextArea, \
ListWidget as _ListWidget, HiddenInput as _HiddenInput, Input
ListWidget as _ListWidget, HiddenInput as _HiddenInput, RadioInput as _RadioInput, \
Input
from wtforms.fields import StringField as _StringField, BooleanField as _BooleanField, \
DecimalField as _DecimalField, IntegerField as _IntegerField, \
FloatField as _FloatField, PasswordField as _PasswordField, \
@@ -49,7 +50,7 @@ def parsley_kwargs(field, kwargs):
_length_kwargs(new_kwargs, vali)
if isinstance(vali, NumberRange):
_number_range_kwargs(new_kwargs, vali)
if isinstance(vali, DataRequired):
if isinstance(vali, DataRequired) or isinstance(vali, InputRequired):
_input_required_kwargs(new_kwargs)
_trigger_kwargs(new_kwargs, u'key')
if isinstance(vali, Regexp) and not 'data_regexp' in new_kwargs:
@@ -70,7 +71,6 @@ def parsley_kwargs(field, kwargs):
return new_kwargs
def _email_kwargs(kwargs):
kwargs[u'data-parsley-type'] = u'email'
@@ -107,7 +107,6 @@ def _number_range_kwargs(kwargs, vali):
def _input_required_kwargs(kwargs):
kwargs[u'data-parsley-required'] = u'true'
def _regexp_kwargs(kwargs, vali):
# Apparently, this is the best way to check for RegexObject Type
# It's needed because WTForms allows compiled regexps to be passed to the validator
@@ -118,11 +117,9 @@ def _regexp_kwargs(kwargs, vali):
regex_string = vali.regex
kwargs[u'data-parsley-regexp'] = regex_string
def _url_kwargs(kwargs):
kwargs[u'data-parsley-type'] = u'url'
def _string_seq_delimiter(vali, kwargs):
# We normally use a comma as the delimiter - looks clean and it's parsley's default.
# If the strings for which we check contain a comma, we cannot use it as a delimiter.
@@ -176,6 +173,13 @@ class TextArea(_TextArea, ParsleyInputMixin):
class CheckboxInput(_CheckboxInput, ParsleyInputMixin):
pass
class RadioInput(_RadioInput):
def __init__(self, parsley_options):
self.parsley_options = parsley_options
def __call__(self, field, **kwargs):
kwargs.update(self.parsley_options)
return super(RadioInput, self).__call__(field, **kwargs)
class Select(_Select):
def __call__(self, field, **kwargs):
@@ -202,6 +206,8 @@ class IntegerField(_IntegerField):
class RadioField(_RadioField):
def __init__(self, *args, **kwargs):
super(RadioField, self).__init__(widget=ListWidget(), *args, **kwargs)
widget_kwargs = parsley_kwargs(self, {})
self.option_widget = RadioInput(widget_kwargs)
class BooleanField(_BooleanField):