annotate examples/run_server_make_request.py @ 3:b5afa9363c3b

add test helper
author drewp@bigasterisk.com
date Sat, 16 Mar 2024 11:40:08 -0700
parents
children b34cd6619316
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):
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
19 self.subprocess.terminate()
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
20
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
21 async def get(self, url: str) -> aiohttp.ClientResponse:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
22 while True:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
23 try:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
24 return await self._session.get(url)
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
25 except aiohttp.ClientConnectorError:
b5afa9363c3b add test helper
drewp@bigasterisk.com
parents:
diff changeset
26 await asyncio.sleep(0.05)