def test_validator_validated(): sentinel = [] def listener(**kw): sentinel.append(kw) signals.validator_validated.connect(listener) schema = String.using(validators=[Present(), Converted(), NoLongerThan(5)]) el = schema() assert not el.validate() eq_(sentinel, [dict(sender=schema.validators[0], element=el, state=None, result=False)]) del sentinel[:] el = schema(value='abcd') assert el.validate() assert len(sentinel) == 3 assert sentinel[-1]['result'] del sentinel[:] el = schema('squiznart') assert not el.validate() assert len(sentinel) == 3 assert not sentinel[-1]['result'] s2 = String.using(optional=False) del sentinel[:] el = s2() assert not el.validate() eq_(sentinel, [dict(sender=NotEmpty, element=el, state=None, result=False)]) del sentinel[:] el = s2('squiznart') assert el.validate() eq_(sentinel, [dict(sender=NotEmpty, element=el, state=None, result=True)]) del listener del sentinel[:] el = schema('squiznart') assert not el.validate() assert not sentinel signals.validator_validated._clear_state()
def test_joined_string(): el = JoinedString(u'abc') assert el.value == u'abc' assert [child.value for child in el] == [u'abc'] el = JoinedString(u'abc,def') assert el.value == u'abc,def' assert [child.value for child in el] == [u'abc', u'def'] el = JoinedString([u'abc', u'def']) assert el.value == u'abc,def' assert [child.value for child in el] == [u'abc', u'def'] el = JoinedString(u' abc,,ghi ') assert el.value == u'abc,ghi' assert [child.value for child in el] == [u'abc', u'ghi'] el = JoinedString(u'abc,,ghi', prune_empty=False) assert el.value == u'abc,,ghi' assert [child.value for child in el] == [u'abc', u'', u'ghi'] # The child (String) strips by default el = JoinedString(u' abc ,, ghi ', strip=False) assert el.value == u'abc,ghi' assert [child.value for child in el] == [u'abc', u'ghi'] # Try with a non-stripping String el = JoinedString(u' abc ,, ghi ', strip=False, member_schema=String.using(strip=False)) assert el.value == u' abc , ghi ' assert [child.value for child in el] == [u' abc ', u' ghi ']
class PersonSchema(Form): name = String age = Integer.using(validators=[ ValueAtLeast(minimum=18), ValueAtMost(maximum=120) ]) weight = Integer.using(validators=[ ValueAtLeast(minimum=0), ValueAtMost(maximum=300) ]) weight.render_options = dict( style='slider' ) friendly = Boolean address = String.using() address.render_options = dict( style='multiline' ) happy = Boolean.using() happy.render_options = dict( style='toggle' )
def test_joined_string(): el = JoinedString(u'abc') assert el.value == u'abc' assert [child.value for child in el] == [u'abc'] el = JoinedString(u'abc,def') assert el.value == u'abc,def' assert [child.value for child in el] == [u'abc', u'def'] el = JoinedString([u'abc', u'def']) assert el.value == u'abc,def' assert [child.value for child in el] == [u'abc', u'def'] el = JoinedString(u' abc,,ghi ') assert el.value == u'abc,ghi' assert [child.value for child in el] == [u'abc', u'ghi'] el = JoinedString(u'abc,,ghi', prune_empty=False) assert el.value == u'abc,,ghi' assert [child.value for child in el] == [u'abc', u'', u'ghi'] # The child (String) strips by default el = JoinedString(u' abc ,, ghi ', strip=False) assert el.value == 'abc,ghi' assert [child.value for child in el] == [u'abc', u'ghi'] # Try with a non-stripping String el = JoinedString(u' abc ,, ghi ', strip=False, member_schema=String.using(strip=False)) assert el.value == ' abc , ghi ' assert [child.value for child in el] == [u' abc ', u' ghi ']
def test_validator_validated(): sentinel = [] def listener(**kw): sentinel.append(kw) signals.validator_validated.connect(listener) schema = String.using(validators=[Present(), Converted(), NoLongerThan(5)]) el = schema() assert not el.validate() eq_(sentinel, [ dict(sender=schema.validators[0], element=el, state=None, result=False) ]) del sentinel[:] el = schema(value='abcd') assert el.validate() assert len(sentinel) == 3 assert sentinel[-1]['result'] del sentinel[:] el = schema('squiznart') assert not el.validate() assert len(sentinel) == 3 assert not sentinel[-1]['result'] s2 = String.using(optional=False) del sentinel[:] el = s2() assert not el.validate() eq_(sentinel, [dict(sender=NotEmpty, element=el, state=None, result=False)]) del sentinel[:] el = s2('squiznart') assert el.validate() eq_(sentinel, [dict(sender=NotEmpty, element=el, state=None, result=True)]) del listener del sentinel[:] el = schema('squiznart') assert not el.validate() assert not sentinel signals.validator_validated._clear_state()
def test_set_default(): schema = Array.of(String).using(default=[u'x', u'y']) el = schema() eq_(el.value, []) el.set_default() eq_(el.value, [u'x', u'y']) el.append(u'z') eq_(el.value, [u'x', u'y', u'z']) el.set_default() eq_(el.value, [u'x', u'y']) defaulted_child = String.using(default='not triggered') schema = Array.of(defaulted_child).using(default=[u'x']) el = schema.from_defaults() eq_(el.value, [u'x']) schema = Array.of(String.using(default=u'x')) el = schema.from_defaults() eq_(el.value, [])
class ModifyForm(Binary.ModifyForm): template = 'modify_text.html' data_text = String.using(strip=False, optional=True).with_properties(placeholder=L_("Type your text here")) rows = ROWS_DATA cols = COLS def _load(self, item): super(Text.ModifyForm, self)._load(item) data = item.data data = item.data_storage_to_internal(data) data = item.data_internal_to_form(data) self['data_text'] = data def _dump(self, item): data, contenttype_guessed = super(Text.ModifyForm, self)._dump(item) if data is None: data = self['data_text'].value data = item.data_form_to_internal(data) data = item.data_internal_to_storage(data) # we know it is text and utf-8 - XXX is there a way to get the charset of the form? contenttype_guessed = u'text/plain;charset=utf-8' return data, contenttype_guessed
class SignupForm(Form): username = String.using(label='Username', validators=[Present()]) password = String.using(label='Password', validators=[ Present(), LengthBetween(5, 25), ValuesEqual('.', '../confirmPassword') ]) confirmPassword = String.using(label='Confirm Password', validators=[Present()]) email = String.using(label='Email', validators=[Present(), IsEmail()]) firstname = String.using(label='First Name', validators=[Present()]) lastname = String.using(label='Last Name', validators=[Present()]) output_schema = [ 'username', 'password', 'confirmPassword', 'email', 'firstname', 'lastname' ]
re.compile(value, re.U) valid = True except re.error: valid = False if not valid: element.add_error("Subscription has invalid value.") return valid common_meta = ( String.named(keys.ITEMID).validated_by(itemid_validator), String.named(keys.REVID).validated_by(revid_validator), String.named(keys.PARENTID).validated_by(uuid_validator).using(optional=True), String.named(keys.WIKINAME).using(strip=False).validated_by(wikiname_validator), String.named(keys.NAMESPACE).using(strip=False).validated_by(namespace_validator), List.named(keys.NAME).of(String.using(strip=False).validated_by(name_validator)).using(optional=True), List.named(keys.NAME_OLD).of(String.using(strip=False).validated_by(name_validator)).using(optional=True), Integer.named(keys.MTIME).validated_by(mtime_validator), String.named(keys.ACTION).validated_by(action_validator), String.named(keys.ACL).validated_by(acl_validator), String.named(keys.COMMENT).validated_by(comment_validator), String.named(keys.ADDRESS).validated_by(address_validator), String.named(keys.HOSTNAME).validated_by(hostname_validator).using(optional=True), List.named(keys.TAGS).of(String.named('tag').validated_by(tag_validator)).using(optional=True), ) ContentMetaSchema = DuckDict.named('ContentMetaSchema').of( String.named(keys.CONTENTTYPE).validated_by(contenttype_validator), String.named(keys.USERID).validated_by(userid_validator), Integer.named(keys.SIZE).validated_by(size_validator), String.named(keys.HASH_ALGORITHM).validated_by(hash_validator),
return self.note_error(element, state, 'invalid_json_msg') if not self.validnamespace(meta.get(NAMESPACE)): return self.note_error(element, state, 'invalid_namespace_msg') if state[FQNAME].field == ITEMID: if not self.validitemid(meta.get(ITEMID, state[FQNAME].value)): return self.note_error(element, state, 'invalid_itemid_msg') return True JSON = OptionalMultilineText.with_properties( lang='en', dir='ltr').validated_by(ValidJSON()) URL = String.with_properties(widget=WIDGET_TEXT).validated_by(URLValidator()) Email = String.using(label=L_('E-Mail')).with_properties( widget=WIDGET_EMAIL, placeholder=L_("E-Mail address")).validated_by(IsEmail()) YourEmail = Email.with_properties(placeholder=L_("Your E-Mail address")) Password = Text.with_properties(widget=WIDGET_PASSWORD).using( label=L_('Password')) RequiredPassword = Password.validated_by(Present()) Checkbox = Boolean.with_properties(widget=WIDGET_CHECKBOX).using(optional=True, default=1) InlineCheckbox = Checkbox.with_properties(widget=WIDGET_INLINE_CHECKBOX) Select = Enum.with_properties(widget=WIDGET_SELECT)
class TextChaizedForm(Form): """a form providing TextCha support""" textcha_question = String textcha = String.using(label=L_('TextCha')).validated_by(TextChaValid())
if not self.validnamespace(meta.get(NAMESPACE)): return self.note_error(element, state, 'invalid_namespace_msg') if state[FQNAME].field == ITEMID: if not self.validitemid(meta.get(ITEMID, state[FQNAME].value)): return self.note_error(element, state, 'invalid_itemid_msg') return True JSON = OptionalMultilineText.with_properties(lang='en', dir='ltr').validated_by(ValidJSON()) URL = String.with_properties(widget=WIDGET_TEXT).validated_by(URLValidator()) OpenID = URL.using(label=L_('OpenID')).with_properties(placeholder=L_("OpenID address")) YourOpenID = OpenID.with_properties(placeholder=L_("Your OpenID address")) Email = String.using(label=L_('E-Mail')).with_properties(widget=WIDGET_EMAIL, placeholder=L_("E-Mail address")).validated_by(IsEmail()) YourEmail = Email.with_properties(placeholder=L_("Your E-Mail address")) Password = Text.with_properties(widget=WIDGET_PASSWORD).using(label=L_('Password')) RequiredPassword = Password.validated_by(Present()) Checkbox = Boolean.with_properties(widget=WIDGET_CHECKBOX).using(optional=True, default=1) InlineCheckbox = Checkbox.with_properties(widget=WIDGET_INLINE_CHECKBOX) Select = Enum.with_properties(widget=WIDGET_SELECT) # SelectSubmit is like Select in that it is rendered as a group of controls # with different (predefined) `value`s for the same `name`. But the controls are
class Inner(Form): sound = String.using(default='bleep')
def factory(default, **kw): return List.using(default=default, **kw).of( String.using(default=u'val'))
class Schema(Form): num = MyCreditCard.using(label='Visa/MC Number', accepted=(VISA, MASTERCARD)) name = String.using(optional=True)
def validated_string(*validators): return List.named(u'test').of( String.using(name=u'foo', validators=validators))
class SimpleForm2(Form): fname = String.using(default=u'FN') surname = String
class LoginForm(Form): username = String.using(label='Username', validators=[Present()]) password = String.using(label='Password', validators=[Present()])
def validated_string(*validators): return List.named('test').of(String.using(name=u'foo', validators=validators))
class EditLessonForm(Form): lesson_name = String.using(label='Lesson Name', validators=[Present()]) text = String.using(label='Text', validators=[Present()])
if not valid: element.add_error("Subscription has invalid value.") return valid common_meta = ( String.named(keys.ITEMID).validated_by(itemid_validator), String.named(keys.REVID).validated_by(revid_validator), String.named( keys.PARENTID).validated_by(uuid_validator).using(optional=True), String.named( keys.WIKINAME).using(strip=False).validated_by(wikiname_validator), String.named( keys.NAMESPACE).using(strip=False).validated_by(namespace_validator), List.named(keys.NAME).of( String.using(strip=False).validated_by(name_validator)).using( optional=True), List.named(keys.NAME_OLD).of( String.using(strip=False).validated_by(name_validator)).using( optional=True), Integer.named(keys.MTIME).validated_by(mtime_validator), String.named(keys.ACTION).validated_by(action_validator), String.named(keys.ACL).validated_by(acl_validator), String.named(keys.COMMENT).validated_by(comment_validator), String.named(keys.ADDRESS).validated_by(address_validator), String.named( keys.HOSTNAME).validated_by(hostname_validator).using(optional=True), List.named(keys.TAGS).of( String.named('tag').validated_by(tag_validator)).using(optional=True), )
class AddEditClassForm(Form): name = "addClass" classname = String.using(label='Class Name', validators=[Present()]) description = String.using(label='Description', validators=[Present()])
def factory(default, **kw): return List.using(default=default, **kw).of(String.using(default=u'val'))
from flatland import String from flatland.validation import Present, IsEmail OptionalText = String.using(optional=True) RequiredText = String.validated_by(Present()) RequiredEmail = String.validated_by(Present(), IsEmail())
class Inner(Schema): sound = String.using(default='bleep')
class Outer(Form): the_in = Inner way_out = String.using(default='mooooog')