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
