On 8/10/2010 10:58 PM, Nick Coghlan wrote: > On Wed, Aug 11, 2010 at 12:48 PM, Éric Araujo <mer...@netwok.org> wrote: >>> The second (#9396) came up in the context of the new cache decorators >>> added to functools, and allowing applications to choose their own >>> caching strategies. I suggested exposing the original (uncached) >>> function, and Raymond suggested that the easiest way to enable that >>> would be for functools.update_wrapper to add a new attribute that >>> provides a reference to the original function. >> >> I moved this feature request to its own bug after brief IRC discussion >> with RDM: http://bugs.python.org/issue9567 >> >> The idea was to separate concerns and eventually get feedback from >> people reading new-bugs-announce, but your email actually does that :) >> >> I say “add attribute to partial objects” in the bug title since I don’t >> know if it’s feasible in wraps only; while update_wrapper is simple >> Python code, wraps merely delegates to _functools.partial, so please >> change the title (and maybe add easy keyword) if appropriate. > > Ah, that's the trick though - the partial object is the *decorator*, > so when you write > > @wraps(f) > def wrapper: > # .... > > it is equivalent to: > > def wrapper: > # .... > > wrapper = partial(update_wrapper, wrapped=f)(wrapper) > > The partial object is a transient thing during the decoration process > - the wrapper function itself is the object that persists. > > So it's only update_wrapper that needs changing to add the new attribute. > One of the things that's slightly irking about the decorator syntax is that a decorator is always called with exactly one argument, and that if you want to write a parameterized decorator you therefore end up writing a function that returns a function that returns a function.
I've scratched my head about how partials (or indeed anything else) could be used to make the extra level of indirection necessary, but haven' come up with anything that even I could regard as acceptable. But I can't escape this feeling that there must be a way. regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 DjangoCon US September 7-9, 2010 http://djangocon.us/ See Python Video! http://python.mirocommunity.org/ Holden Web LLC http://www.holdenweb.com/ _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com