dj-embe/framework/downloader.py
2023-05-06 03:25:01 +02:00

29 lines
914 B
Python

from asyncio import AbstractEventLoop
from os import stat
from urllib.request import urlretrieve
from entity import File
class Downloader:
def __init__(self, loop: AbstractEventLoop) -> None:
self.loop = loop
def progress(self, progress, block_num: int, block_size: int, total_size: int):
self.loop.create_task(progress(block_num * block_size, total_size))
async def download(self, url: str, fileName: str, progress=None) -> File:
await self.loop.run_in_executor(
None,
lambda: urlretrieve(
url,
fileName,
lambda block_num, block_size, total_size: self.progress(
progress, block_num, block_size, total_size
)
if progress is not None
else None,
),
)
return File(name=fileName, size=stat(fileName).st_size)