def fetch(method, url, loop): session = ClientSession(loop=loop) if hasattr(session, '__aenter__'): yield from session.__aenter__() else: session.__enter__() try: _method = getattr(session, method) try: response = yield from asyncio.wait_for(_method(url), timeout=None, loop=loop) except TypeError: response = yield from asyncio.wait_for(_method(url), timeout=None) text = yield from response.text() finally: if hasattr(session, '__aexit__'): yield from session.__aexit__(*sys.exc_info()) else: session.__exit__(*sys.exc_info()) return text