Yury Selivanov 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. 

I think this is reasonable.  I'll try it tomorrow to see if there are any 
corner cases, but I doubt there are any.

> 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.  

Sure, this can be fixed too.  

Could you please update types.coroutine locally and verify that it will work 
for Tornado?

> (related: inspect.iscoroutine is defined in terms of 
> collections.abc.Coroutine. Should inspect.isgenerator be redefined to use the 
> new collections.abc.Generator?)

Since abc.Generator is a new thing I guess we still can do that.  Do you have a 
good use case for it?  We need a good one to convince Larry to include this 
post-beta.

----------

_______________________________________
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