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
except ImportError:
# duck typed types.coroutine() decorator copied from types.py in Py3.5
class types_coroutine(object):
def __init__(self, gen): def __init__(self, gen):
self._gen = gen self._gen = gen
class as_coroutine(object): class GeneratorWrapper:
def __init__(self, gen): def __init__(self, gen):
self._gen = gen self.__wrapped__ = gen
self.send = gen.send self.send = gen.send
self.throw = gen.throw self.throw = gen.throw
self.close = gen.close self.close = gen.close
self.__name__ = getattr(gen, '__name__', None)
def __await__(self): self.__qualname__ = getattr(gen, '__qualname__', None)
return self._gen @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): def __iter__(self):
return self._gen return self.__wrapped__
__await__ = __iter__
def __call__(self, *args, **kwargs): def __call__(self, *args, **kwargs):
return self.as_coroutine(self._gen(*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