File tree Expand file tree Collapse file tree 2 files changed +22
-3
lines changed Expand file tree Collapse file tree 2 files changed +22
-3
lines changed Original file line number Diff line number Diff line change @@ -25,12 +25,16 @@ RUN apt update && apt install -y \
2525 patch \
2626 pkg-config \
2727 python3.12 \
28- python3-aiohttp \
28+ python3-pip \
2929 libpython3-dev \
3030 texinfo \
3131 wget \
3232 xz-utils
3333
34+ # We require aiohttp >= 3.12 (For client middleware support), which is newer than the currently
35+ # available python3-aiohttp's version in Ubuntu.
36+ RUN python3.12 -m pip install --break-system-packages aiohttp
37+
3438COPY src/docker_utils/download_musl_toolchains.py .
3539RUN python3.12 -u download_musl_toolchains.py
3640
Original file line number Diff line number Diff line change 11#!/usr/bin/env python3.12
22
3- from typing import List
43from pathlib import Path
4+ from typing import List
55
66import tarfile
77import tempfile
2323MUSL_TOOLCHAINS_DIR = Path ("/musl-toolchains" )
2424ENTRYPOINT = Path ("/entrypoint.sh" )
2525
26+ NUM_RETRIES = 5
27+ RETRY_WAIT = 2
28+
29+ # Basically copied from aiohttp docs: Simple Retry Middleware
30+ async def retry_middleware (req : aiohttp .ClientRequest , handler : aiohttp .ClientHandlerType ) -> aiohttp .ClientResponse :
31+ for _ in range (NUM_RETRIES ):
32+ resp = await handler (req )
33+ if resp .ok :
34+ return resp
35+
36+ await asyncio .sleep (RETRY_WAIT )
37+
38+ return resp
39+
2640async def download_file (url : str , filename : str ):
27- async with aiohttp .ClientSession () as session :
41+ async with aiohttp .ClientSession (middlewares = ( retry_middleware ,) ) as session :
2842 async with session .get (url ) as response :
43+ response .raise_for_status ()
2944 with open (filename , 'wb' ) as f :
3045 async for data in response .content .iter_chunked (CHUNK_SIZE ):
3146 f .write (data )
You can’t perform that action at this time.
0 commit comments