Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!xlned.com!feeder1.xlned.com!newsfeed.xs4all.nl!newsfeed1.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.007 X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'def': 0.12; 'anyway': 0.14; '"""return': 0.16; 'finney': 0.16; 'function?': 0.16; 'magic': 0.16; 'portable': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'simpson': 0.16; 'stdlib.': 0.16; 'wrote:': 0.18; 'skip:f 30': 0.19; 'header:User-Agent:1': 0.23; 'header:X-Complaints-To:1': 0.27; 'function': 0.29; 'appear': 0.29; 'getting': 0.31; "d'aprano": 0.31; 'steven': 0.31; 'writes:': 0.31; 'level.': 0.33; "i'd": 0.34; 'there': 0.35; 'so,': 0.37; 'ben': 0.38; 'to:addr:python-list': 0.38; 'to:addr:python.org': 0.39; 'received:org': 0.40; 'skip:u 10': 0.60; 'black': 0.61; 'not:': 0.91; 'whereas': 0.91; 'technique': 0.93 X-Injected-Via-Gmane: http://gmane.org/ To: python-list@python.org From: Ben Finney Subject: Re: Skipping decorators in unit tests Date: Fri, 11 Oct 2013 14:42:36 +1100 References: <525768a5$0$29984$c3e8da3$5496439d@news.astraweb.com> <20131011031319.GA30742@cskk.homeip.net> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Gmane-NNTP-Posting-Host: rasputin.madmonks.org X-Public-Key-ID: 0xAC128405 X-Public-Key-Fingerprint: 517C F14B B2F3 98B0 CB35 4855 B8B2 4C06 AC12 8405 X-Public-Key-URL: http://www.benfinney.id.au/contact/bfinney-gpg.asc X-Post-From: Ben Finney User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.4 (gnu/linux) Cancel-Lock: sha1:+Vc0axrS/+9D+T6JRzikxH+vl70= X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 22 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1381462970 news.xs4all.nl 15875 [2001:888:2000:d::a6]:48599 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:56641 Cameron Simpson writes: > On 11Oct2013 02:55, Steven D'Aprano wrote: > > def undecorate(f): > > """Return the undecorated inner function from function f.""" > > return f.func_closure[0].cell_contents > > Whereas this feels like black magic. Is this portable to any decorated > function? If so, I'd have hoped it was in the stdlib. If not: black > magic. What would you expect? The purpose of decorating functions is to do magic to make it appear as though the original function isn't there any more. Any technique to getting at that original function anyway is *of course* going to look like black magic at the implementation level. -- \ “What if the Hokey Pokey IS what it's all about?” —anonymous | `\ | _o__) | Ben Finney