Commit d6109ba4 authored by Stefan Behnel's avatar Stefan Behnel

use original "types.coroutine" in PEP 492 test if available

parent c9245a28
...@@ -7,32 +7,45 @@ import gc ...@@ -7,32 +7,45 @@ import gc
import sys import sys
#import types #import types
import os.path import os.path
import inspect #import inspect
import unittest import unittest
import warnings import warnings
import contextlib import contextlib
# fake types.coroutine() decorator try:
class types_coroutine(object): from types import coroutine as types_coroutine
def __init__(self, gen): except ImportError:
self._gen = gen # duck typed types.coroutine() decorator copied from types.py in Py3.5
class types_coroutine(object):
class as_coroutine(object):
def __init__(self, gen): def __init__(self, gen):
self._gen = gen self._gen = gen
self.send = gen.send
self.throw = gen.throw
self.close = gen.close
def __await__(self):
return self._gen
def __iter__(self):
return self._gen
def __call__(self, *args, **kwargs): class GeneratorWrapper:
return self.as_coroutine(self._gen(*args, **kwargs)) def __init__(self, gen):
self.__wrapped__ = gen
self.send = gen.send
self.throw = gen.throw
self.close = gen.close
self.__name__ = getattr(gen, '__name__', None)
self.__qualname__ = getattr(gen, '__qualname__', None)
@property
def gi_code(self):
return self.__wrapped__.gi_code
@property
def gi_frame(self):
return self.__wrapped__.gi_frame
@property
def gi_running(self):
return self.__wrapped__.gi_running
def __next__(self):
return next(self.__wrapped__)
def __iter__(self):
return self.__wrapped__
__await__ = __iter__
def __call__(self, *args, **kwargs):
return self.GeneratorWrapper(self._gen(*args, **kwargs))
# compiled exec() # compiled exec()
...@@ -60,7 +73,7 @@ class AsyncYield: ...@@ -60,7 +73,7 @@ class AsyncYield:
def run_async(coro): def run_async(coro):
#assert coro.__class__ is types.GeneratorType #assert coro.__class__ is types.GeneratorType
assert coro.__class__.__name__ in ('coroutine', 'as_coroutine') assert coro.__class__.__name__ in ('coroutine', 'GeneratorWrapper')
buffer = [] buffer = []
result = None result = None
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment