Hi Christoph, I like the look of that :))) Will try it out this w/e (would do sooner - but I'm 'Land-unter' with work ATM)
Cheers, C On Oct 24, 2:55 pm, Christoph Zwerschke <[email protected]> wrote: > Am 24.10.2010 14:24 schrieb [email protected]: > > > In my attempts to solve this problem, I'd also tried to write a custom > > decorator to do this ... but didn't get that to work for a variety of > > reasons - some certainly due to the fact that I don't yet understand > > TurboGears fully enough! ;) > > I think the real problem is that this stuff is not yet documented good > enough. How about the following solution? > > ----------------------------------------------------------- > > from tg import json_encode, tmpl_context > from tg.decorators import Decoration > from tg.render import _get_tg_vars > > class expose_jsonp(object): > > def __init__(self, callback=None, exclude_names=None): > if callback is None: > callback = 'callback' > if exclude_names is None: > exclude_names = [] > if 'tmpl_context' not in exclude_names: > exclude_names.append('tmpl_context') > self.callback = callback > self.exclude_names = exclude_names > self.exclude_callback = 'callback' in exclude_names > > def before_validate(self, remainder, params): > if self.exclude_callback: > tmpl_context.callback = self.callback > else: > tmpl_context.callback = params.pop( > 'callback', self.callback) > > def __call__(self, func): > deco = Decoration.get_decoration(func) > deco.register_hook( > 'before_validate', self.before_validate) > deco.register_template_engine( > 'text/javascript; charset=utf-8', > 'jsonp', '', self.exclude_names) > return func > > def render_jsonp(template_name, template_vars, **kwargs): > callback = tmpl_context.callback > for key in _get_tg_vars(): > del template_vars[key] > return '%s(%s)' % (callback, json_encode(template_vars)) > > from myapp.config.app_cfg import base_config > base_config.render_functions['jsonp'] = render_jsonp > > ----------------------------------------------------------- > > You can provide a default name for the callback in the decorator that > can be overwritten by the client with the "callback" parameter unless > you set exclude_names=['callback']. > > -- Christoph -- 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.

