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