Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Michele Simionato Newsgroups: comp.lang.python.announce Subject: decorator 4.1 is out Date: Sat, 15 Jul 2017 06:33:08 -0700 (PDT) Lines: 42 Approved: python-announce-list@python.org Message-ID: References: <4ac8d3f7-493b-4d90-b63f-98b27d2dc37c@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" X-Trace: news.uni-berlin.de 1vSHUpBwBefmZQhaTYR4KANLlTRP+HjGE6GrP2X6u87w== X-Orig-Path: v31no729634qtb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Return-Path: X-Original-To: python-announce@python.org Delivered-To: python-announce-list@mail.python.org X-Spam-Status: OK 0.014 X-Spam-Evidence: '*H*': 0.97; '*S*': 0.00; 'url:pypi': 0.03; 'received:209.85.223': 0.03; '__name__': 0.05; 'url:github': 0.05; '*args,': 0.07; 'python': 0.09; "'__main__':": 0.09; 'args)': 0.09; 'tracing': 0.09; 'def': 0.13; 'args,': 0.16; 'async': 0.16; 'debugging:': 0.16; 'time.time()': 0.16; 'skip:g 40': 0.18; 'output': 0.18; 'all,': 0.22; 'decorator': 0.22; 'instance,': 0.22; 'this:': 0.24; 'url:io': 0.24; 'module': 0.24; 'import': 0.26; 'header:User-Agent:1': 0.26; 'logging': 0.27; 'skip:l 30': 0.28; 'seconds': 0.29; 'example': 0.29; '**kwargs)': 0.29; '**kwargs):': 0.29; 'download:': 0.29; 'project:': 0.29; 'skip:[ 10': 0.31; 'url:python': 0.31; 'received:google.com': 0.32; 'implement': 0.32; 'hosted': 0.33; '3.5': 0.33; 'url:en': 0.34; 'release': 0.34; 'received:209.85': 0.36; 'url:org': 0.36; 'received:209': 0.38; 'proto:https': 0.39; 'received:io': 0.39; 'received:psf.io': 0.39; 'received:ams1.psf.io': 0.40; 'received:mail1.ams1.psf.io': 0.40; 'called': 0.40; 'received:net': 0.60; 'dear': 0.64; 'to:addr:comp-lang-python- announce': 0.66; 'here': 0.66; 'url:index': 0.69; 'url:4': 0.73; 'received:130': 0.73; 'await': 0.76; 'to:addr:moderators.isc.org': 0.76; 'received:130.133': 0.79; 'received:130.133.4': 0.79; 'received:130.133.4.7': 0.79; 'received:individual.net': 0.79; 'received:moderators.individual.net': 0.79; '@decorator': 0.84; 'links:': 0.84; 'message-id:@googlegroups.com': 0.93 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:path:newsgroups:date:complaints-to :injection-info:nntp-posting-host:user-agent:mime-version:message-id :subject:from:injection-date:to; bh=/Egpt+F05RKr32YqKfHycDtC4CpD/jojkqVXBJC3otM=; b=R3l+On6YpcKM+oo5fZsh0cdvo+5/uUw4wQEaWuCxah409ff/tucfgfGB1hd7UXpv1s dxYAmRpToOPUByFsVXzZ3FTMMv3gkR9w6i1W4Un+p/escthFJ3OWtCh/Jn3zJGpV2+Lf 4vFLCRiFBJCkfn9KiVlLWAsPXMz87d9ownp1Ro+Vj40ahnzqUURm7Bptt/G/z6ONLGGV 0mfJ+doNtOsevpVy1mxeHesQNfmGp1aAPYx1oUS/eWtHlFfNeScOWUijI/7CYsvcnZn8 0YtMYrdvz6h4Yq+IyIPVpIvJgNwfgxPZQQkWwQwWn4fddC+ZOe/YJHM+g6Dh4i3ymHih +clA== X-Gm-Message-State: AIVw111xTryNFZCroD82oecMtQkUjGzISz0qtLvCBqZrrzXa3rG5mKlD vMXXqqxykqsHBRVZEWGl0JHIWWBsw31bwGJfsuo= X-Received: by 10.107.170.158 with SMTP id g30mr9061873ioj.95.1500125589428; Sat, 15 Jul 2017 06:33:09 -0700 (PDT) X-Received: by 10.31.69.77 with SMTP id s74mr47984vka.1.1500125589265; Sat, 15 Jul 2017 06:33:09 -0700 (PDT) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=2.225.185.4; posting-account=gxxH8QkAAABVKeYyAqGOGoaFtdDdsshI User-Agent: G2/1.0 Injection-Date: Sat, 15 Jul 2017 13:33:09 +0000 X-Mailman-Approved-At: Mon, 17 Jul 2017 08:20:04 -0400 X-BeenThere: python-announce-list@python.org X-Mailman-Version: 2.1.24 Precedence: list List-Id: Announcement-only list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <4ac8d3f7-493b-4d90-b63f-98b27d2dc37c@googlegroups.com> Xref: csiph.com comp.lang.python.announce:2572 Dear all, a new release of the decorator module is out. For the first time we support decorating Python 3.5 coroutines. For instance, this is an example of how to implement a tracing decorator called log_start_stop that you can use for debugging: import time import logging from asyncio import get_event_loop, sleep, wait from decorator import decorator @decorator async def log_start_stop(coro, *args, **kwargs): logging.info('Starting %s%s', coro.__name__, args) t0 = time.time() await coro(*args, **kwargs) dt = time.time() - t0 logging.info('Ending %s%s after %d seconds', coro.__name__, args, dt) @log_start_stop async def make_task(n): for i in range(n): await sleep(1) if __name__ == '__main__': logging.basicConfig(level=logging.INFO) tasks = [make_task(3), make_task(2), make_task(1)] get_event_loop().run_until_complete(wait(tasks)) You will get an output like this: INFO:root:Starting make_task(1,) INFO:root:Starting make_task(3,) INFO:root:Starting make_task(2,) INFO:root:Ending make_task(1,) after 1 seconds INFO:root:Ending make_task(2,) after 2 seconds INFO:root:Ending make_task(3,) after 3 seconds Also, for the first time the documentation is hosted on readthedocs.org. Here are the relevant links: Download: https://pypi.python.org/pypi/decorator/4.1.1 Project: https://github.com/micheles/decorator/ Docs: http://decorator.readthedocs.io/en/latest/index.html