hosting/lib/docker_pull.py

24 lines
932 B
Python

from lib import docker_interface
from lib import logging as logging_lib
import asyncio
import concurrent.futures
import time
log = logging_lib.log
async def pull_image(image_name, auth_config, log_dict, loop, pull_cancellation_event):
def blocking_pull():
client = docker_interface.low_level_client
for line in client.pull(image_name, auth_config=auth_config, stream=True, decode=True):
if pull_cancellation_event.is_set():
log.debug(f"Canceling pull of \"{image_name}\"")
break
layer_id = line.get('id', 'general')
status = line.get('status', '')
progress = line.get('progress', '').strip()
log_dict[layer_id] = f"{status} {progress}".strip()
# Run the blocking pull operation in a separate thread
with concurrent.futures.ThreadPoolExecutor() as pool:
await loop.run_in_executor(pool, blocking_pull)