Oleg Broytmann wrote:
> BTW, the signals are not mentioned in the docs, not a single word, not in
> an example. Can you write a few words/sentences/paragraphs/examples about
Sure, although part of the reason I mentioned them is because I was
hoping someone would tell me what they were for :-) The mechanics of how
to use them are covered by comments in events.py, but it's not clear the
use cases for all of them, or for example why some signals pass
post_funcs, which seems useless to me.
But in any case, here's a quick stab at some docs, in the hopes that you
or whoever wrote signals.py can improve them:
Signals are a mechanism to be notified when data or schema changes
happen through SQLObject. This may be useful for doing custom data
validation, logging changes, or XXXX (Oleg?). Some of what signals can
do is also possible by overriding methods, but signals may provide a
cleaner way, especially across classes not related by inheritance.
from sqlobject.events import listen, RowUpdateSignal, RowCreatedSignal
from model import Users
def update_listener(instance, kwargs):
"""keep "last_updated" field current"""
# BAD method 1, causes infinite recursion?
# instance should be read-only
instance.last_updated = datetime.datetime.now()
# GOOD method 2
kwargs['last_updated'] = datetime.datetime.now()
def created_listener(kwargs, post_funcs):
""""email me when new users added"""
# email() implementation left as an exercise for the reader
msg = "%s just was just added to the database!" % kwargs['name']
listen(update_listener, Users, RowUpdateSignal)
listen(created_listener, Users, RowCreatedSignal)
<cut n paste from comments in event.py here?>
HTH -- Regards -- Andy
PS btw I think the comment for RowCreatedSignal is cut n pasted from
RowCreateSignal, and may not be correct.