On May 30, 6:16 pm, Gabriel <gabr...@opensuse.org> wrote:

> I have something like this:
>
> @render(format="a")
> @render(format="b")
> @....
> def view(format, data):
>   return data

> In my understanding this equivalent to:
>
> render('a',
>  render('b',
>   view(***)))

Not quite.  'render' is a function of one argument that returns a
decorator. So, the equivalent is more like this:
  view = render('a')(render('b')(view))
or more simply:
  fb = render('b')
  view = fb(view)
  fa = render('a')
  view = fa(view)

> Is there any way to know, in this case, that 'a' is the 'default' format?

Will this do?  (In case the formatting gets messed up, I've also
posted the code to http://python.pastebin.com/f7f229d9d)

##from functools import wraps

def render(c):
    def decorator(f):
##        @wraps(f)
        def wrapper(*args, **kwds):
            if getattr(wrapper, 'outermost', False):
                print('outer wrapper', c)
            else:
                print('inner wrapper', c)
            return f(*args, **kwds)
        return wrapper
    return decorator

def mark_as_top(f):
    print('marking', f)
    f.outermost = True
##    @wraps(f)
    return f

@mark_as_top
@render('a')
@render('b')
@render('c')
@render('d')
def f():
    pass

f()

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to