On Wed, Oct 06, 2010 at 08:42:21AM -0700, Matt H wrote: > Hi. > > I'm trying to set an attribute on c from a decorator, like so: > > def dec1(): > def wrap_fn(f): > c.msg = 'hi'
You're doing this assignmeny once, when wrapping the function (i.e. at module import time). You need to do this for every request, i.e. when f gets called. > return f > return wrap_fn > > @dec1 > def create(self): This will fail; I assume you meant @dec1(). (And since it makes no sense to have a decorator-making function with no arguments, I assume you've reduced your real code to an example and made a mistake.) > return render('create_tmpl') Correct code would be something like def dec1(): def wrap_fn(f): def wrapped_fn(*args, **kw): c.msg = 'hi' return f(*arg,s **kw) return wrapped_fn return wrap_fn @dec1() def create(self): return render('create_tmpl') Even more correct code would use http://pypi.python.org/pypi/decorator, like Wyatt suggested: def dec1(): @decorator def wrap_fn(f, *args, **kw): c.msg = 'hi' return f(*arg,s **kw) return wrap_fn @dec1() def create(self): return render('create_tmpl') HTH, Marius Gedminas -- You have moved the mouse. NT must be restarted for the changes to take effect.
signature.asc
Description: Digital signature