11import operator
2+ from types import GeneratorType , CoroutineType
23
34from .compat import PY2
45from .compat import PY3
@@ -414,7 +415,14 @@ def __exit__(self, *args, **kwargs):
414415 return self .__wrapped__ .__exit__ (* args , ** kwargs )
415416
416417 def __iter__ (self ):
417- return iter (self .__wrapped__ )
418+ if hasattr (self .__wrapped__ , '__await__' ):
419+ return self .__wrapped__ .__await__ ()
420+ else :
421+ # raise TypeError("'coroutine' object is not iterable")
422+ return iter (self .__wrapped__ )
423+
424+ def __next__ (self ):
425+ return next (self .__wrapped__ )
418426
419427 def __call__ (self , * args , ** kwargs ):
420428 return self .__wrapped__ (* args , ** kwargs )
@@ -426,16 +434,20 @@ def __reduce_ex__(self, protocol):
426434 return identity , (self .__wrapped__ ,)
427435
428436 def __aiter__ (self ):
429- return self .__wrapped__ .__aiter__ ()
430-
431- def __await__ (self ):
432- return self .__wrapped__ .__await__ ()
437+ return self
433438
434439 async def __anext__ (self ):
435440 return await self .__wrapped__ .__anext__ ()
436441
437- async def __aenter__ (self ):
438- return await self .__wrapped__ .__aenter__ ()
442+ def __await__ (self ):
443+ if hasattr (self .__wrapped__ , '__await__' ):
444+ return self .__wrapped__ .__await__ ()
445+ else :
446+ return (yield from self .__wrapped__ )
447+
448+
449+ def __aenter__ (self ):
450+ return self .__wrapped__ .__aenter__ ()
439451
440- async def __aexit__ (self , * args , ** kwargs ):
441- return await self .__wrapped__ .__aexit__ (* args , ** kwargs )
452+ def __aexit__ (self , * args , ** kwargs ):
453+ return self .__wrapped__ .__aexit__ (* args , ** kwargs )
0 commit comments