mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 17:15:35 +00:00
handle pytest-asyncio async def coroutines
This commit is contained in:
@@ -1,7 +1,13 @@
|
||||
import asyncio
|
||||
import aiohttp
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def aiohttp_request(session, method, url, as_text, **kwargs):
|
||||
response = yield from session.request(method, url, **kwargs) # NOQA: E999
|
||||
return response, (yield from response.text()) if as_text else (yield from response.json()) # NOQA: E999
|
||||
def aiohttp_request(loop, method, url, as_text, **kwargs):
|
||||
with aiohttp.ClientSession(loop=loop) as session:
|
||||
response = yield from session.request(method, url, **kwargs) # NOQA: E999
|
||||
if as_text:
|
||||
content = yield from response.text() # NOQA: E999
|
||||
else:
|
||||
content = yield from response.json() # NOQA: E999
|
||||
return response, content
|
||||
|
||||
13
tests/integration/async_def.py
Normal file
13
tests/integration/async_def.py
Normal file
@@ -0,0 +1,13 @@
|
||||
import aiohttp
|
||||
import pytest
|
||||
import vcr
|
||||
|
||||
|
||||
@vcr.use_cassette()
|
||||
@pytest.mark.asyncio
|
||||
async def test_http(): # noqa: E999
|
||||
async with aiohttp.ClientSession() as session:
|
||||
url = 'https://httpbin.org/get'
|
||||
params = {'ham': 'spam'}
|
||||
resp = await session.get(url, params=params) # noqa: E999
|
||||
assert (await resp.json())['args'] == {'ham': 'spam'} # noqa: E999
|
||||
@@ -1,28 +1,40 @@
|
||||
import pytest
|
||||
aiohttp = pytest.importorskip("aiohttp")
|
||||
|
||||
import asyncio # NOQA
|
||||
import sys # NOQA
|
||||
import asyncio # noqa: E402
|
||||
import contextlib # noqa: E402
|
||||
|
||||
import aiohttp # NOQA
|
||||
import pytest # NOQA
|
||||
import vcr # NOQA
|
||||
import pytest # noqa: E402
|
||||
import vcr # noqa: E402
|
||||
|
||||
from .aiohttp_utils import aiohttp_request # NOQA
|
||||
from .aiohttp_utils import aiohttp_request # noqa: E402
|
||||
|
||||
try:
|
||||
from .async_def import test_http # noqa: F401
|
||||
except SyntaxError:
|
||||
pass
|
||||
|
||||
|
||||
def run_in_loop(fn):
|
||||
with contextlib.closing(asyncio.new_event_loop()) as loop:
|
||||
asyncio.set_event_loop(loop)
|
||||
task = loop.create_task(fn(loop))
|
||||
return loop.run_until_complete(task)
|
||||
|
||||
|
||||
def request(method, url, as_text=True, **kwargs):
|
||||
def run(loop):
|
||||
return aiohttp_request(loop, method, url, as_text, **kwargs)
|
||||
|
||||
return run_in_loop(run)
|
||||
|
||||
|
||||
def get(url, as_text=True, **kwargs):
|
||||
loop = asyncio.get_event_loop()
|
||||
with aiohttp.ClientSession() as session:
|
||||
task = loop.create_task(aiohttp_request(session, 'GET', url, as_text, **kwargs))
|
||||
return loop.run_until_complete(task)
|
||||
return request('GET', url, as_text, **kwargs)
|
||||
|
||||
|
||||
def post(url, as_text=True, **kwargs):
|
||||
loop = asyncio.get_event_loop()
|
||||
with aiohttp.ClientSession() as session:
|
||||
task = loop.create_task(aiohttp_request(session, 'POST', url, as_text, **kwargs))
|
||||
return loop.run_until_complete(task)
|
||||
return request('POST', url, as_text, **kwargs)
|
||||
|
||||
|
||||
@pytest.fixture(params=["https", "http"])
|
||||
|
||||
22
tests/integration/test_http
Normal file
22
tests/integration/test_http
Normal file
@@ -0,0 +1,22 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers: {}
|
||||
method: GET
|
||||
uri: https://httpbin.org/get?ham=spam
|
||||
response:
|
||||
body: {string: "{\n \"args\": {\n \"ham\": \"spam\"\n }, \n \"headers\"\
|
||||
: {\n \"Accept\": \"*/*\", \n \"Accept-Encoding\": \"gzip, deflate\"\
|
||||
, \n \"Connection\": \"close\", \n \"Host\": \"httpbin.org\", \n \
|
||||
\ \"User-Agent\": \"Python/3.5 aiohttp/2.0.1\"\n }, \n \"origin\": \"213.86.221.35\"\
|
||||
, \n \"url\": \"https://httpbin.org/get?ham=spam\"\n}\n"}
|
||||
headers: {Access-Control-Allow-Credentials: 'true', Access-Control-Allow-Origin: '*',
|
||||
Connection: keep-alive, Content-Length: '299', Content-Type: application/json,
|
||||
Date: 'Wed, 22 Mar 2017 20:08:29 GMT', Server: gunicorn/19.7.1, Via: 1.1 vegur}
|
||||
status: {code: 200, message: OK}
|
||||
url: !!python/object/new:yarl.URL
|
||||
state: !!python/tuple
|
||||
- !!python/object/new:urllib.parse.SplitResult [https, httpbin.org, /get, ham=spam,
|
||||
'']
|
||||
- false
|
||||
version: 1
|
||||
Reference in New Issue
Block a user