[Async-sig] [ANN] async_generator v1.2 released

Alex Grönholm alex.gronholm at nextday.fi
Sat Nov 26 11:04:58 EST 2016


26.11.2016, 17:42, Nathaniel Smith kirjoitti:
>
> On Nov 26, 2016 2:07 AM, "Alex Grönholm" <alex.gronholm at nextday.fi 
> <mailto:alex.gronholm at nextday.fi>> wrote:
> >
> > 26.11.2016, 09:47, Nathaniel Smith kirjoitti:
> >>
> >> On Fri, Nov 25, 2016 at 10:46 AM, Alex Grönholm 
> <alex.gronholm at nextday.fi <mailto:alex.gronholm at nextday.fi>> wrote:
> >>>
> >>> 25.11.2016, 12:09, Nathaniel Smith kirjoitti:
> >>>>
> >>>>  On Thu, Nov 24, 2016 at 11:59 PM, Alex Grönholm 
> <alex.gronholm at nextday.fi <mailto:alex.gronholm at nextday.fi>> wrote:
> >>>>>
> >>>>>  25.11.2016, 09:25, Nathaniel Smith kirjoitti:
> >>>>>>
> >>>>>>  On Thu, Nov 24, 2016 at 1:23 PM, Nathaniel Smith 
> <njs at pobox.com <mailto:njs at pobox.com>> wrote: [...]
> >>>>>>>>
> >>>>>>>>  One thing I noticed is that there seems to be no way to 
> detect async generator functions in your implementation. That is 
> something I would want to have before switching.
> >>>>>>>
> >>>>>>>  Good point. That should be pretty trivial to add.
> >>>>>>
> >>>>>>  Just pushed async_generator v1.3 to PyPI, with new isasyncgen, 
> isasyncgenfunction, and (on 3.6) registration with 
> collections.abc.AsyncGenerator.
> >>>>>
> >>>>>  And you just *had* to make it incompatible with the async 
> generators from asyncio_extras? "_is_async_gen_function" vs 
> "_is_async_generator"? I thought we agreed on cooperating?
> >>>>
> >>>>  I started doing that, but... it's not an async generator, 
> isasyncgen is a different inspect function... -n
> >>>
> >>> It's an arbitrary string that will likely never be seen by anyone 
> except for people working on the libraries. But it makes a world of 
> difference in compatibility. I named it this way to be consistent with 
> asyncio which marks yield-based coroutines with "_is_coroutine". So 
> please reconsider.
> >>
> >>  Sure, I guess it doesn't matter too much either way. Can we pause 
> a moment to ask whether we really want the two async generator types 
> to return true for each other's introspection function, though? Right 
> now they aren't really interchangeable, and the only user for this 
> kind of introspection I've seen is your contextmanager.py. It seems to 
> use the inspect versions of isasyncgen and isasyncgenfunction, because 
> it wants to know whether asend/athrow/aclose are supported. Right now, 
> if it switched to using async_generator's 
> isasyncgen/isasyncgenfunction, it would continue to work; but if I 
> then switched async_generator's isasyncgen/isasyncgenfunction to 
> detect asyncio_extras's generators, it would stop working again. 
> Speaking of which, what do you want to do about isasyncgen? -n
> >
> > I've created a new branch in asyncio_extras which delegates the 
> implementation of async generators to async_generator. All tests pass 
> with 100% combined coverage.
>
> Cool!
>
> > Before I merge this into master, I would like to implement some 
> changes in your library:
> > Set the default value for yield_() argument to None, as in my 
> yield_async()
>
> Makes sense.
>
> > Add type hints to methods and functions
>
> I haven't had a chance to play with these much, but no objections.
>
> > Look into implementing missing attributes which neither lib had 
> before (if technically possible): ag_frame, ag_running, ag_code, 
> __name__, __qualname__
>
> __name__ and __qualname__ are obviously a good idea. The others I'm 
> not so sure about -- I'd worry that anyone who's reaching that deep 
> into the internals is not going to be satisfied by any half-way 
> attempts at compatibility, and it seems unlikely we can achieve 
> detailed compatibility at that level. But maybe it's not that bad; I 
> haven't looked at them in detail. Do you have any particular use cases 
> in mind for them?
>
I don't have a particular use case in mind, I'm just looking for 
completeness. They're right in the spec and I believe simple getters 
should do just fine (coroutines should have matching attributes which 
can be used directly).

I'll send you a PR when I get around to it.
>
> -n
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/async-sig/attachments/20161126/903dedf1/attachment-0001.html>


More information about the Async-sig mailing list