1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
import asyncio
import sys
from typing import Dict
import pytest
from gql import Client, gql
from gql.transport.exceptions import TransportQueryError
@pytest.mark.aiohttp
@pytest.mark.online
@pytest.mark.asyncio
async def test_aiohttp_simple_query():
from gql.transport.aiohttp import AIOHTTPTransport
# Create https url
url = "https://countries.trevorblades.com/graphql"
# Get transport
transport = AIOHTTPTransport(url=url)
# Instanciate client
async with Client(transport=transport) as session:
query = gql(
"""
query getContinents {
continents {
code
name
}
}
"""
)
# Fetch schema
await session.fetch_schema()
# Execute query
result = await session.execute(query)
# Verify result
assert isinstance(result, Dict)
print(result)
continents = result["continents"]
africa = continents[0]
assert africa["code"] == "AF"
@pytest.mark.aiohttp
@pytest.mark.online
@pytest.mark.asyncio
async def test_aiohttp_invalid_query():
from gql.transport.aiohttp import AIOHTTPTransport
transport = AIOHTTPTransport(url="https://countries.trevorblades.com/graphql")
async with Client(transport=transport) as session:
query = gql(
"""
query getContinents {
continents {
code
bloh
}
}
"""
)
with pytest.raises(TransportQueryError):
await session.execute(query)
@pytest.mark.aiohttp
@pytest.mark.online
@pytest.mark.skipif(sys.version_info < (3, 8), reason="requires python3.8 or higher")
@pytest.mark.asyncio
async def test_aiohttp_two_queries_in_parallel_using_two_tasks():
from gql.transport.aiohttp import AIOHTTPTransport
transport = AIOHTTPTransport(
url="https://countries.trevorblades.com/graphql",
)
# Instanciate client
async with Client(transport=transport) as session:
query1 = gql(
"""
query getContinents {
continents {
code
}
}
"""
)
query2 = gql(
"""
query getContinents {
continents {
name
}
}
"""
)
async def query_task1():
result = await session.execute(query1)
assert isinstance(result, Dict)
print(result)
continents = result["continents"]
africa = continents[0]
assert africa["code"] == "AF"
async def query_task2():
result = await session.execute(query2)
assert isinstance(result, Dict)
print(result)
continents = result["continents"]
africa = continents[0]
assert africa["name"] == "Africa"
task1 = asyncio.create_task(query_task1())
task2 = asyncio.create_task(query_task2())
await task1
await task2
|