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 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.

Reply via email to