Alessandro, I just ran into an issue with tgext.crud, since it generates pager links based on self._mount_point(). They look like they would have been generated from the last statically dispatched controller, so there are some parts missing.
In tgext/crud/controller.py, line 144, you could probably replace tg.dispatched_controller().mount_point with request.controller_state.controller.mount_point Cheers, Moritz Am Mittwoch, 18. April 2012 11:18:40 UTC+2 schrieb Alessandro Molina: > > That shouldn't be an issue, you can access the currently dispatched > controller using tg.dispatched_controller() > This way you will be able to access the controller instance and > retrieve the property you need even from the class method. > > About the behavior of the before_validate parameters, that is actually > the right one. > I used *args and **kw just because I'm lazy and didn't want to specify > the right parameters. > > The expected before_validate hook signature is: > > def before_validate_hook(remainder, params): > > if you use *args and **kw you simply get the remainder and the params > inside the args argument :D > > On Wed, Apr 18, 2012 at 10:02 AM, Moritz Schlarb <[email protected]> > wrote: > > 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. > > -- 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/-/06sWOXQ9yCgJ. 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.

