New submission from Nick Coghlan:

functools.update_wrapper inadvertently overwrites the just set __wrapped__ 
attribute when it updates the contents of __dict__.

This means the intended __wrapped__ chain is never created - instead, for every 
function in a wrapper stack, __wrapped__ will always refer to the innermost 
function.

This means that using __wrapped__ to bypass functools.lru_cache doesn't work 
correctly if the decorated function already has __wrapped__ set.

Explicitly setting __signature__ fortunately still works correctly, since that 
is checked before recursing down through __wrapped__ in inspect.signature.

----------
messages: 184648
nosy: ncoghlan
priority: normal
severity: normal
stage: test needed
status: open
title: functools.update_wrapper doesn't overwrite attributes correctly
type: behavior
versions: Python 3.4

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17482>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to