pypi Method (Recommended)
pip3 install pyaiodl
Github repo method
pip3 install git+https://github.com/aryanvikash/pyaiodl.git
-
Downloader class Instance
Non-blocking , params = [fake_useragent:bool,chunk_size:int ,download_path:str] optinals
dl = Downloader()
-
Download [
download(self,url)
]uuid = await dl.download(url)
-
Errors [
iserror(self, uuid)
]: Returns - Error Or None , Even On cancel It returns an error "{uuid} Cancelled"
await dl.iserror(uuid)
-
cancel [
cancel(self, uuid)
]await dl.cancel(uuid)
-
Get Status [
status(self, uuid)
]response = await dl.status(uuid) returns a dict """ filename:str file_type :str total_size :int total_size_str : str downloaded :int downloaded_str :str progress:int download_speed:str complete :bool download_path:str """
-
is_active returns : bool [
is_active( self,uuid )
]- on cancel ,error , download complete return False
result = await dl.is_active(uuid)
Example :
from pyaiodl import Downloader, errors
import asyncio
url = "https://speed.hetzner.de/100MB.bin"
async def main():
dl = Downloader()
# you can pass your
# custom chunk size and Download Path
# dl = Downloader(download_path="/your_dir/", chunk_size=10000)
uuid = await dl.download(url)
try:
while await dl.is_active(uuid):
r = await dl.status(uuid)
#cancel
if r['progress'] > 0:
try:
await dl.cancel("your_uuid")
except errors.DownloadNotActive as na:
print(na)
print(f"""
Filename: {r['filename']}
Total : {r['total_size_str']}
Downloaded : {r['downloaded_str']}
Download Speed : {r['download_speed']}
progress: {r['progress']}
""")
# let him breath for a second:P
await asyncio.sleep(1)
# If You are putting uuid manually Than its better handle This Exception
except errors.InvalidId:
print("not valid uuid")
return
# when loop Breaks There are 2 Possibility
# either Its An error Or Download Complete
# Cancelled Is also count as error
if await dl.iserror(uuid):
print(await dl.iserror(uuid))
else:
# Final filename / path
print("Download completed : ", r['download_path'])
asyncio.get_event_loop().run_until_complete(main())
- None Please Report :)
- Multipart Download
- Queue Download / Parallel Downloads Limit
- Better Error Handling