| """Builtins implemented in Python. | |
| This module is frozen into the interpreter and imported during startup, | |
| before the import system exists. The names listed in ``__all__`` are | |
| copied into the ``builtins`` module. | |
| """ | |
| __all__ = ['anext'] | |
| _NOT_GIVEN = sentinel("_NOT_GIVEN") | |
| def anext(async_iterator, default=_NOT_GIVEN, /): | |
| """Return the next item from the async iterator. | |
| If default is given and the async iterator is exhausted, | |
| it is returned instead of raising StopAsyncIteration. | |
| """ | |
| cls = type(async_iterator) | |
| try: | |
| # Looked up on the type, like the C slot am_anext. | |
| anext_method = cls.__anext__ | |
| except AttributeError: | |
| raise TypeError( | |
| f"{cls.__name__!r} object is not an async iterator" | |
| ) from None | |
| awaitable = anext_method(async_iterator) | |
| if default is _NOT_GIVEN: | |
| return awaitable | |
| return _anext_with_default(awaitable, default) | |
| async def _anext_with_default(awaitable, default): | |
| try: | |
| return await awaitable | |
| except StopAsyncIteration: | |
| return default | |
| for _name in __all__: | |
| globals()[_name].__module__ = 'builtins' | |
| del _name |