On Tuesday, October 20, 2015 at 10:51:28 AM UTC-7, Gael Princivalle wrote: > > Thanks Anthony but what does it mean the proper signature? >
I think in this case, he's referring to Python ... the def line of the function specifies its parameters (or arguments, if you prefer). Code that calls the function has to fill in the correct parameters. That's the function's signature. In this case, the caller defines the signature (because it is a call-back function) and the implementer has to make the def line fit. Above, you used a lambda function to munch around the parameters, but since no-one else calls the named function, you can just make the named function fit. /dps > > def add_phplist_user(f,id): > auth_user = db.auth_user(id) > #add user > db_phplist.phplist_user_user.insert( > email = auth_user.email, > confirmed = auth_user.newsletter) > > db.auth_user._after_insert.append(lambda f,id: add_phplist_user(f,id)) > > I have to take the new record data from somewhere, and if I do that: > db.auth_user._after_insert.append(add_phplist_user(f,id)) > > Of course f and id are not defined. > > Il giorno martedì 20 ottobre 2015 18:38:18 UTC+2, Anthony ha scritto: >> >> Note, if you function already has the proper signature, there is no >> reason to wrap it in a lambda. Also, your callbacks do not have to return >> an empty dictionary (they are not controller actions). >> >> Anthony >> >> On Tuesday, October 20, 2015 at 9:19:20 AM UTC-4, Gael Princivalle wrote: >>> >>> Thanks Niphlod. >>> >>> After insert works great: >>> def add_phplist_user(f,id): >>> auth_user = db.auth_user(id) >>> #add user >>> db_phplist.phplist_user_user.insert( >>> email = auth_user.email, >>> confirmed = auth_user.newsletter) >>> return dict() >>> >>> db.auth_user._after_insert.append(lambda f,id: add_phplist_user(f,id)) >>> >>> After update works well also: >>> >>> def update_phplist_user(s,f): >>> n_rows = db_phplist(db_phplist.phplist_user_user.email == s.email). >>> count() >>> if n_rows > 0: >>> #update confirmed >>> db_phplist(db_phplist.phplist_user_user.email == s.email).update >>> ( >>> confirmed = s.newsletter) >>> return dict() >>> >>> db.auth_user._after_update.append(lambda s,f: update_phplist_user(s,f)) >>> >>> But the after update run also after a new insert, and the f dictionary >>> is empty, so I've got a ticket. >>> >>> Do you know why? >>> Have you got a solution? >>> >>> Il giorno martedì 20 ottobre 2015 11:53:42 UTC+2, Niphlod ha scritto: >>>> >>>> see the manual about database callbacks. >>>> >>>> >>>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#callbacks-on-record-insert--delete-and-update >>>> >>>> On Tuesday, October 20, 2015 at 11:49:02 AM UTC+2, Gael Princivalle >>>> wrote: >>>>> >>>>> Hello all. >>>>> >>>>> I would like to run a function everytime there is a modification in >>>>> auth. >>>>> >>>>> something like: >>>>> auth.settings.onchange = lambda: myfunction() >>>>> >>>>> Or only if a specific field change: >>>>> auth.settings.myfield.onchange = lambda: myfunction() >>>>> >>>>> Is it possible? >>>>> >>>>> I need it for changing a field value in another db. >>>>> >>>>> Thanks, regards. >>>>> >>>>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

