Mercurial > code > home > repos > rdferry
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 |
rev | line source |
---|---|
3 | 1 import asyncio |
2 from dataclasses import dataclass | |
3 from pathlib import Path | |
4 | |
5 import aiohttp | |
6 | |
7 | |
8 @dataclass | |
9 class HttpServer: | |
10 server_path: Path | |
11 | |
12 async def __aenter__(self): | |
13 self.subprocess = await asyncio.create_subprocess_exec( | |
14 'pdm', 'run', 'python', self.server_path) | |
15 self._session = await aiohttp.ClientSession().__aenter__() | |
16 return self | |
17 | |
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 | 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 | 23 async def get(self, url: str) -> aiohttp.ClientResponse: |
24 while True: | |
25 try: | |
26 return await self._session.get(url) | |
27 except aiohttp.ClientConnectorError: | |
28 await asyncio.sleep(0.05) |