-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathwtf_required_if.py
22 lines (21 loc) · 969 Bytes
/
wtf_required_if.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from wtforms import validators
class RequiredIf(object):
"""Validates field conditionally.
Usage::
login_method = StringField('', [AnyOf(['email', 'facebook'])])
email = StringField('', [RequiredIf(login_method='email')])
password = StringField('', [RequiredIf(login_method='email')])
facebook_token = StringField('', [RequiredIf(login_method='facebook')])
"""
def __init__(self, message=None, *args, **kwargs):
self.message = message
self.conditions = kwargs
def __call__(self, form, field):
for name, data in self.conditions.items():
if name not in form._fields:
validators.optional(form, field)
else:
condition_field = form._fields.get(name)
if condition_field.data == data and not field.data:
validators.InputRequired(message=self.message)(form, field)
validators.optional()(form, field)