]> granicus.if.org Git - python/commitdiff
asyncio: repr(Task) now also contains the line number even if the coroutine is
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 24 Jun 2014 20:57:14 +0000 (22:57 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 24 Jun 2014 20:57:14 +0000 (22:57 +0200)
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.

Lib/asyncio/tasks.py
Lib/test/test_asyncio/test_tasks.py

index f5c10c866526a2f92ac8cf927f4aeba6df1dbd2c..3b41a21c8aad4f1eace8d53b10e3e86edc130b62 100644 (file)
@@ -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
 
index d770a910349709885f2f7a4a66d922dd1256006b..3037f60ddaa064c2141534844307275abf9dbef3 100644 (file)
@@ -148,12 +148,14 @@ class TaskTests(test_utils.TestCase):
         self.assertRaises(asyncio.CancelledError,
                           self.loop.run_until_complete, t)
         self.assertEqual(repr(t),
-                         'Task(<notmuch done at %s>)<CANCELLED>' % filename)
+                         'Task(<notmuch done at %s:%s>)<CANCELLED>'
+                         % (filename, lineno))
 
         t = asyncio.Task(notmuch(), loop=self.loop)
         self.loop.run_until_complete(t)
         self.assertEqual(repr(t),
-                         "Task(<notmuch done at %s>)<result='abc'>" % filename)
+                         "Task(<notmuch done at %s:%s>)<result='abc'>"
+                         % (filename, lineno))
 
     def test_task_repr_custom(self):
         @asyncio.coroutine