I wanted to do it that way, but since I need a property of the class that I want to "inject" into kw, I can't do it as a classmethod.... But it doesn't really matter if it gets injected twenty times...
Thanks anyway! Am Dienstag, 17. April 2012 10:39:00 UTC+2 schrieb Alessandro Molina: > > Also, forgot to say that in this case the before_put method has to be > a static/class method as you are registering it without self. > > On Tue, Apr 17, 2012 at 10:35 AM, Alessandro Molina > <[email protected]> wrote: > > Sorry, my fault. > > I forgot that Pylons based versions of TG reallocate the controller on > > each request, as you are hooking the before_validate inside the > > __init__ this has the side effect of registering the validate hook > > each time you get a request. > > > > Change it to something like: > > > > class MyGroupRestController(EasyCrudRestController): > > model = model.Group > > > > def before_put(self, *args, **kw): > > print args, kw > > > > > before_validate(MyGroupRestController.before_put)(MyGroupRestController.put) > > > > This is one of the things that are going to change on in 2.3+ which > > allocates the controllers only on application startup, in the mean > > time you must avoid doing anything that changes the controller class > > inside the init itself. > > > > On Tue, Apr 17, 2012 at 10:07 AM, Moritz Schlarb <[email protected]> > wrote: > >> Alessandro, a few additional questions came up ;): > >> > >> I got: > >> > >> class LessonsCrudController(FilteredCrudRestController): > >> model = Lesson > >> __table_options__ = {...} > >> __form_options__ = {...} > >> > >> def inject_event(self, *args, **kw): > >> log.debug('inject_event') > >> for a in args: > >> log.debug(a) > >> for k in kw: > >> log.debug('%s: %s' % (k,kw[k])) > >> > >> def __init__(self, *args, **kw): > >> super(LessonsCrudController, self).__init__(*args, **kw) > >> before_validate(self.inject_event)(self.post) > >> > >> And that is what I got on the logs: > >> > >> 09:54:46,751 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,751 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,751 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,751 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,751 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,751 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,751 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,752 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,752 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,752 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,752 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,752 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,752 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,752 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,752 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,752 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,752 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,752 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,753 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,753 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,753 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,753 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,753 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,753 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,753 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,753 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,753 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,753 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,753 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,754 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,754 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,754 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,754 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> 09:54:46,754 DEBUG [sauce.controllers.crc] inject_event > >> 09:54:46,754 DEBUG [sauce.controllers.crc] [] > >> 09:54:46,754 DEBUG [sauce.controllers.crc] {'event': u'', 'name': > u'text', > >> 'teacher': u'3', 'lesson_id': u'text', 'sprox > >> _id': u'', 'id': u''} > >> > >> So you see, the hook gets called very often! It's not event a constant > >> number, at first I counted 6 calls, now its more than 10. > >> And the arguments are (not merely wrong but) unexected both packed in > args > >> like args = [[], {}]. > >> > >> What am I doing wrong NOW? :D > >> > >> Thanks a lot, > >> best wishes, > >> Moritz > >> > >> Am Dienstag, 17. April 2012 01:28:36 UTC+2 schrieb Moritz Schlarb: > >>> > >>> Ooooh noo.... > >>> I think I was doing something incredibily stupid... > >>> > >>> I'm not sure what I coded yesterday, I don't seem to have saved it, > but I > >>> think I was using the decorator wrongly. > >>> > >>> I think it was something like: > >>> > >>> @before_validate() > >>> def before_put(...): > >>> > >>> Thanks a lot! > >>> > >>> Am Montag, 16. April 2012 10:36:07 UTC+2 schrieb Alessandro Molina: > >>>> > >>>> How are you registering the decorator? It should work correctly. > >>>> I tested it on the fly and it seems to correctly work as expected. > >>>> > >>>> class MyGroupRestController(EasyCrudRestController): > >>>> model = model.Group > >>>> > >>>> def before_put(self, *args, **kw): > >>>> print args, kw > >>>> > >>>> def __init__(self, *args, **kw): > >>>> super(MyGroupRestController, self).__init__(*args, **kw) > >>>> before_validate(self.before_put)(self.put) > >>>> > >>>> There are other ways to register the hook, but they should all work > >>>> correctly. > >>>> > >>>> On Sun, Apr 15, 2012 at 11:54 PM, Moritz Schlarb < > [email protected]> > >>>> wrote: > >>>> > Hi there! > >>>> > > >>>> > I'm subclassing EasyCrudRestController and now I have an attribute > >>>> > self.event, that I don't want to be changed in the add and edit > forms, > >>>> > but > >>>> > that needs to be present when writing the form to the database. > >>>> > I thought about using a @before_validate hook to simply insert it > into > >>>> > kwargs, but that doesn't work since @before_validate doesn't seem to > >>>> > get > >>>> > called (no logging). > >>>> > Another alternative would be using a HiddenField, but then I would > have > >>>> > to > >>>> > insert the value into the AddForm, which I don't know how to do. > >>>> > > >>>> > Any help would be nice! ;) > >>>> > > >>>> > Thanks and good night, > >>>> > Moritz > >>>> > > >>>> > -- > >>>> > You received this message because you are subscribed to the Google > >>>> > Groups > >>>> > "TurboGears" group. > >>>> > To view this discussion on the web visit > >>>> > https://groups.google.com/d/msg/turbogears/-/qTqkd_d9t0gJ. > >>>> > To post to this group, send email to [email protected]. > >>>> > To unsubscribe from this group, send email to > >>>> > [email protected]. > >>>> > For more options, visit this group at > >>>> > http://groups.google.com/group/turbogears?hl=en. > >> > >> -- > >> You received this message because you are subscribed to the Google > Groups > >> "TurboGears" group. > >> To view this discussion on the web visit > >> https://groups.google.com/d/msg/turbogears/-/LUazTYzarrcJ. > >> > >> To post to this group, send email to [email protected]. > >> To unsubscribe from this group, send email to > >> [email protected]. > >> For more options, visit this group at > >> http://groups.google.com/group/turbogears?hl=en. > -- You received this message because you are subscribed to the Google Groups "TurboGears" group. To view this discussion on the web visit https://groups.google.com/d/msg/turbogears/-/Dgo6nOyTDfQJ. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/turbogears?hl=en.

