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.