From: Victor Stinner Date: Tue, 24 Jun 2014 20:57:14 +0000 (+0200) Subject: asyncio: repr(Task) now also contains the line number even if the coroutine is X-Git-Tag: v3.4.2rc1~328 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=df29c4a83d13d96cfcf809e648ee9b31a4174729;p=thirdparty%2FPython%2Fcpython.git asyncio: repr(Task) now also contains the line number even if the coroutine is done: use the first line number of the code object instead of the current line number of the generator frame. The name of the coroutine is not enough because many coroutines may have the same name. It's a common case in asyncio tests for example. --- diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py index f5c10c866526..3b41a21c8aad 100644 --- a/Lib/asyncio/tasks.py +++ b/Lib/asyncio/tasks.py @@ -208,9 +208,11 @@ class Task(futures.Future): if iscoroutine(coro): filename = coro.gi_code.co_filename if coro.gi_frame is not None: - text += ' at %s:%s' % (filename, coro.gi_frame.f_lineno) + lineno = coro.gi_frame.f_lineno + text += ' at %s:%s' % (filename, lineno) else: - text += ' done at %s' % filename + lineno = coro.gi_code.co_firstlineno + text += ' done at %s:%s' % (filename, lineno) res = res[:i] + '(<{}>)'.format(text) + res[i:] return res diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py index d770a9103497..3037f60ddaa0 100644 --- a/Lib/test/test_asyncio/test_tasks.py +++ b/Lib/test/test_asyncio/test_tasks.py @@ -148,12 +148,14 @@ class TaskTests(test_utils.TestCase): self.assertRaises(asyncio.CancelledError, self.loop.run_until_complete, t) self.assertEqual(repr(t), - 'Task()' % filename) + 'Task()' + % (filename, lineno)) t = asyncio.Task(notmuch(), loop=self.loop) self.loop.run_until_complete(t) self.assertEqual(repr(t), - "Task()" % filename) + "Task()" + % (filename, lineno)) def test_task_repr_custom(self): @asyncio.coroutine