annotate examples/run_server_make_request.py @ 6:d885fce5e4e7

try to reduce warnings about leaked sessions
author drewp@bigasterisk.com
date Sat, 16 Mar 2024 12:25:20 -0700
parents b34cd6619316
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
1 import asyncio
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
2 from dataclasses import dataclass
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
3 from pathlib import Path
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
4
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
5 import aiohttp
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
6
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
7
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
8 @dataclass
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
9 class HttpServer:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
10 server_path: Path
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
11
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
12 async def __aenter__(self):
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
13 self.subprocess = await asyncio.create_subprocess_exec(
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
14 'pdm', 'run', 'python', self.server_path)
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
15 self._session = await aiohttp.ClientSession().__aenter__()
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
16 return self
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
17
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
18 async def __aexit__(self, exc_type, exc, tb):
6
d885fce5e4e7 try to reduce warnings about leaked sessions
drewp@bigasterisk.com
parents: 5
diff changeset
19 await self._session.close()
3
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
20 self.subprocess.terminate()
5
b34cd6619316 new test. server has to be able to exit between tests.
drewp@bigasterisk.com
parents: 3
diff changeset
21 await self.subprocess.wait()
6
d885fce5e4e7 try to reduce warnings about leaked sessions
drewp@bigasterisk.com
parents: 5
diff changeset
22
3
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
23 async def get(self, url: str) -> aiohttp.ClientResponse:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
24 while True:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
25 try:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
26 return await self._session.get(url)
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
27 except aiohttp.ClientConnectorError:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
28 await asyncio.sleep(0.05)