annotate examples/_run_server_child.py @ 10:52e1bb1532f2

serve_inline_graph
author drewp@bigasterisk.com
date Sat, 16 Mar 2024 16:02:23 -0700
parents 25538e3ee531
children 0bc06da6bf74
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
8
drewp@bigasterisk.com
parents: 6
diff changeset
9 class RunHttpServerChildProcess:
3
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
10
52e1bb1532f2 serve_inline_graph
drewp@bigasterisk.com
parents: 8
diff changeset
23 async def get(self, url: str, headers=None) -> aiohttp.ClientResponse:
3
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:
10
52e1bb1532f2 serve_inline_graph
drewp@bigasterisk.com
parents: 8
diff changeset
26 return await self._session.get(url, headers=headers)
3
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)