Skip to content

Commit 2981ce3

Browse files
authored
Don't try to close the aiohttp session if connector_owner is False (#382)
1 parent f28670d commit 2981ce3

File tree

2 files changed

+59
-6
lines changed

2 files changed

+59
-6
lines changed

gql/transport/aiohttp.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,21 @@ async def close(self) -> None:
183183

184184
log.debug("Closing transport")
185185

186-
closed_event = self.create_aiohttp_closed_event(self.session)
187-
await self.session.close()
188-
try:
189-
await asyncio.wait_for(closed_event.wait(), self.ssl_close_timeout)
190-
except asyncio.TimeoutError:
191-
pass
186+
if (
187+
self.client_session_args
188+
and self.client_session_args.get("connector_owner") is False
189+
):
190+
191+
log.debug("connector_owner is False -> not closing connector")
192+
193+
else:
194+
closed_event = self.create_aiohttp_closed_event(self.session)
195+
await self.session.close()
196+
try:
197+
await asyncio.wait_for(closed_event.wait(), self.ssl_close_timeout)
198+
except asyncio.TimeoutError:
199+
pass
200+
192201
self.session = None
193202

194203
async def execute(

tests/test_aiohttp.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,3 +1441,47 @@ async def handler(request):
14411441
# Checking that there is no space after the colon in the log
14421442
expected_log = '"query":"query getContinents'
14431443
assert expected_log in caplog.text
1444+
1445+
1446+
@pytest.mark.asyncio
1447+
async def test_aiohttp_connector_owner_false(event_loop, aiohttp_server):
1448+
from aiohttp import web, TCPConnector
1449+
from gql.transport.aiohttp import AIOHTTPTransport
1450+
1451+
async def handler(request):
1452+
return web.Response(
1453+
text=query1_server_answer,
1454+
content_type="application/json",
1455+
)
1456+
1457+
app = web.Application()
1458+
app.router.add_route("POST", "/", handler)
1459+
server = await aiohttp_server(app)
1460+
1461+
url = server.make_url("/")
1462+
1463+
connector = TCPConnector()
1464+
transport = AIOHTTPTransport(
1465+
url=url,
1466+
timeout=10,
1467+
client_session_args={
1468+
"connector": connector,
1469+
"connector_owner": False,
1470+
},
1471+
)
1472+
1473+
for _ in range(2):
1474+
async with Client(transport=transport) as session:
1475+
1476+
query = gql(query1_str)
1477+
1478+
# Execute query asynchronously
1479+
result = await session.execute(query)
1480+
1481+
continents = result["continents"]
1482+
1483+
africa = continents[0]
1484+
1485+
assert africa["code"] == "AF"
1486+
1487+
await connector.close()

0 commit comments

Comments
 (0)