Yes, I've got it working. Not sure what the original problem was though. I 
haven't been able to break it again.

Thanks!

/Jens

Skickat från min iPhone

13 apr 2011 kl. 17:45 skrev Massimo Di Pierro <[email protected]>:

> Is this issue closed? I cannot reproduce the problem.
> 
> On Apr 11, 12:25 pm, Jens Örtenholm <[email protected]> wrote:
>> Are we talking about different approaches here?
>> 
>> I am now certain I did something wrong the first time around. I made a 
>> simple test as follows:
>> 
>> In db.py:
>> 
>> db.define_table('people',
>>         Field('name', 'string'))
>> 
>> In people.py (controller):
>> 
>> def func(form):
>>         session.flash = T('Onvalidation called')
>> 
>> def index():
>>         form = SQLFORM(db.people)
>>         if form.accepts(request.vars, session, onvalidation=func):
>>                 pass
>>         return dict(form=form)
>> 
>> I get the flash every time I submit the form, so the function is definitely 
>> called. Also, if I try to replace it with an undeclared function, I get a 
>> ticket with NameError: global name 'undeclaredfunc' is not defined.
>> 
>> Tried with and without regular validators in the table definition. Only case 
>> where the onvalidation function is not called is when one of the regular 
>> validators does not validate.
>> 
>> I also did verify it works when updating a record, atleast with this simple 
>> example.
>> 
>> Regards,
>> Jens Örtenholm
>> [email protected]
>> 
>> 11 apr 2011 kl. 16.40 skrev VP:
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>> I have checked again and inserted an undeclared function call into the
>>> custom validator and figured out that it is not called at all.
>> 
>>> Something is wrong.
>> 
>>> On Apr 8, 9:52 am, Massimo Di Pierro <[email protected]>
>>> wrote:
>>>> This may be a bug. Will look into it...
>> 
>>>> On Apr 8, 2:31 am, Jens Örtenholm <[email protected]> wrote:
>> 
>>>>> Hello everyone,
>> 
>>>>> I believe I've found a bug in SQLFORM.accepts.
>> 
>>>>> When calling with an onvalidation function as:
>> 
>>>>> form = SQLFORM(db.table)
>>>>> if form.accepts(request.vars, session, onvalidation=function):
>> 
>>>>> And the function sets an error:
>> 
>>>>> def function(form):
>>>>>     form.errors.myfield = 'This is an error'
>> 
>>>>> The form is still accepted, DB is inserted or updated with the record.
>> 
>>>>> As far as I can tell from looking at the code in SQLFORM.accepts, the case
>>>>> where ret value is False because of form.errors not being empty is not
>>>>> handled anywhere.
>> 
>>>>> Tested on 1.94.6
>> 
>>>>> //Jens

Reply via email to