Ok, no more problems. Thank you! 2012/9/16 Massimo Di Pierro <massimo.dipie...@gmail.com>
> fixed > > > On Sunday, 16 September 2012 13:28:55 UTC-5, mweissen wrote: > >> I used my small test-program and the admin-application. >> >> Yes, now I can change an existing record without an error. >> And a wrong email-address show an appropriate message. >> >> Then I tried to add a new row and I got: >> <type 'exceptions.TypeError'> object of type 'NoneType' has no len() >> >> Function argument list >> >> (cls=<class 'gluon.sqlhtml.ListWidget'>, field=<gluon.dal.Field object>, >> value=None, **attributes={'_style': 'list-style:none'}) >> Code listing >> >> >> 243. >> 244. >> 245. >> 246. >> 247. >> 248. >> >> 249. >> 250. >> 251. >> 252. >> >> >> field.requires, (IS_NOT_EMPTY, IS_LIST_OF)) else None >> >> >> >> attributes['_style'] = 'list-style:none' >> items = [LI(INPUT(_id=_id, _class=_class, _name=_name, >> >> >> >> value=v, hideerror=k<len(value)-1, >> >> >> >> requires=requires), >> **attributes) for (k,v) in enumerate(value or [''])] >> >> >> >> script=SCRIPT(""" >> >> >> >> // from >> http://refactormycode.com/**codes/694-expanding-input-**list-using-jquery >> <http://refactormycode.com/codes/694-expanding-input-list-using-jquery> >> (function(){ >> jQuery.fn.grow_input = function() { >> >> >> >> 2012/9/16 Massimo Di Pierro <massimo....@gmail.com> >> >> You opened a pyfpdf issue. You may want to close it. >> >> >> Ooops - sorry! >> >>> >>> I moved it to web2py issue 1010 and I think I have a fix in trunk. Can >>> you check? >>> >>> http://code.google.com/p/**web2py/issues/detail?id=1010<http://code.google.com/p/web2py/issues/detail?id=1010> >>> >>> >>> On Sunday, 16 September 2012 01:03:19 UTC-5, mweissen wrote: >>> >>>> Done: Issue 29 <https://code.google.com/p/pyfpdf/issues/detail?id=29>: on >>>> error IS_LIST_OF() changes the value of INPUT >>>> >>>> 2012/9/16 Massimo Di Pierro <massimo....@gmail.com> >>>> >>>> Definitively a problem with the widget. Please open a ticket about it. >>>>> >>>>> >>>>> On Saturday, 15 September 2012 17:01:44 UTC-5, mweissen wrote: >>>>> >>>>>> Sorry, I did not mention: >>>>>> I did not use a form, I have used the admin interface to insert and >>>>>> update the records. >>>>>> I have tried it twice: first with my "real" program and second with >>>>>> the small program I have sent. >>>>>> >>>>>> Now I have added this function: >>>>>> >>>>>> def em(): >>>>>> form=SQLFORM(db.address) >>>>>> if form.process().accepted: >>>>>> response.flash='ok' >>>>>> elif form.errors: >>>>>> print form.errors >>>>>> return dict(form=form) >>>>>> >>>>>> ... and used it to add two wrong email-addresses: >>>>>> aa >>>>>> bb >>>>>> >>>>>> I did not get an error messege below the fields, but the flash >>>>>> "Errors in form, please check it out" and both fileds look like >>>>>> ['aa', 'bb'] >>>>>> >>>>>> >>>>>> 2012/9/15 Massimo Di Pierro <massimo....@gmail.com> >>>>>> >>>>>>> I cannot reproduce this: >>>>>>> >>>>>>> >>> IS_EMAIL()('x') >>>>>>> ('x', 'enter a valid email address') >>>>>>> >>> IS_EMAIL()('x...@x.com') >>>>>>> ('x...@x.com', None) >>>>>>> >>> IS_LIST_OF(IS_EMAIL())(['x']) >>>>>>> (['x'], 'enter a valid email address') >>>>>>> >>> IS_LIST_OF(IS_EMAIL())(['x...@****x.**com']) >>>>>>> (['x...@x.com'], None) >>>>>>> >>> IS_LIST_OF(IS_EMAIL())(['x#x.**c****om <http://x.com>']) >>>>>>> (['x#x.com'], 'enter a valid email address') >>>>>>> >>>>>>> can your print form.errors? Perhaps this is a problem with the >>>>>>> widget and not the validator. >>>>>>> >>>>>>> On Saturday, 15 September 2012 13:08:50 UTC-5, mweissen wrote: >>>>>>> >>>>>>>> I have a simple table, one name and a list of email-addresses: >>>>>>>> >>>>>>>> db.define_table('address', >>>>>>>> Field('name'), >>>>>>>> Field('emails','list:string', requires=IS_LIST_OF(IS_EMAIL()*** >>>>>>>> *****))) >>>>>>>> >>>>>>>> Now I add one name and two email-addresses to this table. >>>>>>>> >>>>>>>> Id: 1 >>>>>>>> Name: Smith >>>>>>>> Emails: jsm...@example.com >>>>>>>> j...@example.com >>>>>>>> >>>>>>>> Everything looks fine. >>>>>>>> >>>>>>>> But if there is an error in the email-address (which is catched by >>>>>>>> the validator), a lot goes wrong: >>>>>>>> Both email-addresses are converted to a list; this list is doubled and >>>>>>>> ... >>>>>>>> >>>>>>>> Id: 1 >>>>>>>> Name: Smith >>>>>>>> Emails: ['jsmith*#*example.com', 'j...@example.com'] >>>>>>>> ['jsmith#example.com', 'j...@example.com'] >>>>>>>> >>>>>>>> ... there is no error message! >>>>>>>> >>>>>>>> Now I have changed the model to >>>>>>>> >>>>>>>> db.define_table('address', >>>>>>>> Field('name'), >>>>>>>> Field('emails','list:string', requires=IS_EMAIL())) >>>>>>>> >>>>>>>> but this model does not detect the wrong email address. >>>>>>>> >>>>>>>> What is the right way to use a validator with a list of strings? >>>>>>>> >>>>>>>> Regards, Martin >>>>>>>> >>>>>>> >>>>>>> >>> > --