Ben Darnell added the comment:

GeneratorWrapper helps, but it fails when applied to non-generator functions 
that return a value (while both tornado.gen.coroutine and asyncio.coroutine 
take pains to support such usage). The "raise TypeError" should be removed; 
just return the result without wrapping if it's not a generator. 

GeneratorWrapper also runs afoul of some places where I do explicit type 
checking instead of duck typing (isinstance(x, types.GeneratorType)). Using the 
Generator ABC doesn't work because the generator methods are set as attributes 
on __init__ instead of defined on the class. The methods should be defined on 
the class, even if they're overwritten with instance attributes later for 
speed.  (related: inspect.iscoroutine is defined in terms of 
collections.abc.Coroutine. Should inspect.isgenerator be redefined to use the 
new collections.abc.Generator?)

----------

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

Reply via email to