A Python Asynchronous Downloader - pyaiodl
Project description
Python Asynchronous Downloader - pyaoidl
Don't Use it in Production or Live Projects Currently Its Unstable
Version
installation
pypi Method (Recommended)
pip3 install pyaiodl
Github repo method
pip3 install git+https://github.com/aryanvikash/pyaiodl.git
Available Methods
-
Downloader class Instance
Non-blocking , params = [fake_useragent:bool,chunk_size:int ,download_path:str] optinalsdl = 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 Falseresult = await dl.is_active(uuid)
Usage
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())
known Bugs -
- None Please Report :)
TODO
- Multipart Download
- Queue Download / Parallel Downloads Limit
- Better Error Handling
Thanks ❤️
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pyaiodl-0.0.4.tar.gz
(9.1 kB
view details)
File details
Details for the file pyaiodl-0.0.4.tar.gz.
File metadata
- Download URL: pyaiodl-0.0.4.tar.gz
- Upload date:
- Size: 9.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de0f706e722029ba641d47914ef7a48ca38c79a39fd400187add8ee357dace78
|
|
| MD5 |
ef4857a1ae26aa2b2c69e194d9e51b5e
|
|
| BLAKE2b-256 |
c57f76783a1a6d4880a84cf2552a1b46a266f18fcf7e97f0c33b79ca4b64ff02
|