Skip to main content

Pymatris 📂

Pyversions

Parallel file downloader for HTTP/HTTPS, FTP and SFTP protocols, built using Python.

Installation

pip install pymatris

Usage

  • Initialize Downloader
from pymatris import Downloader

dl = Downloader()
  • Enqueue file to download
dl.enqueue_file("https://storage.data.gov.my/pricecatcher/pricecatcher_2022-01.parquet", path="./")
  • Start downloading files
dl.download()
  • View results
result = dl.download()

Under the hood, pymatris.Downloader uses a global queue to manage the download tasks. pymatris.Downloader.enqueue_file() will add url to download queue, and pymatris.Downloder.download() will download the files in parallel. Pymatris uses asyncio to download files in parallel, with asychronous I/O operations using aiofiles, hence enabling faster downloads.

Results and Error Handling

pymatris.Downloader.download() returns a Results object, which is a list of the filenames that have been downloaded. Results object has two attributes, success and errors.

success is a list of named tuples, where each named tuple contains .path the filepath and .url the url.

errors is a list of named tuples, where each named tuple contains .filepath_partial the intended filepath, .url the url, .exception an Exception or aiohttp.ClientResponse that occurred during download.

Example Usage

from main.py

from pymatris import Downloader
urls = [
    "https://storage.data.gov.my/pricecatcher/pricecatcher_2022-01.parquet",
    "ftp://bob:bob@192.168.1.6:20/tesfile.txt",
    "https://storage.data.gov.my/pricecatcher/pricecatcher_2022-01.parquet",
]



dm = Downloader()

for url in urls:
    dm.enqueue_file(url, path="./")

results = dm.download()


print(results)
>> Success:
>> pricecatcher_2022-01.csv https://storage.data.gov.my/pricecatcher/pricecatcher_2022-01.csv
>> pricecatcher_2022-01.parquet https://storage.data.gov.my/pricecatcher/pricecatcher_2022-01.parquet

>> Errors:
>> (ftp://bob:bob@192.168.1.6:20/tesfile.txt,
>> ConnectionRefusedError(61, "Connect call failed ('192.168.1.6', 20)"))

Advanced Usage

Visit main.py for advanced usage.

CLI

Pymatris also provides a command line interface to download files in parallel. In your terminal, run the following command to download files in parallel.

# Insert single url as argument
pymatris https://storage.data.gov.my/pricecatcher/pricecatcher_2022-01.parquet 

# Or multiple urls 
pymatris https://storage.data.gov.my/pricecatcher/pricecatcher_2022-01.parquet https://storage.data.gov.my/pricecatcher/pricecatcher_2022-02.parquet https://storage.data.gov.my/pricecatcher/pricecatcher_2022-03.parquet
  $ pymatris --help
  usage: pymatris [-h] [--max-parallel MAX_PARALLEL] [--max-splits MAX_SPLITS]
                [--overwrite] [--quiet] [--dir DIR] [--show-errors SHOW_ERRORS]
                [--timeouts TIMEOUTS] [--max-tries MAX_TRIES]
                URLS [URLS ...]

Arguments

To provide path to save files, use --dir option. By default files will be saved in current directory.

pymatris --dir "./" <urls>

To overwrite existing files, use --overwrite option. By default, files will not be overwritten.

pymatris --overwrite <urls>

Assuming your have "pricecatcher_2022-01.parquet" file in your current directory, running above command will overwrite the existing file. During download, Pymatris creates tempfile to download files, if download is interrupted, rest assured that your existing files are safe, and tempfiles will be deleted.

To configure number of parallel downloads, use --max-parallel option. By default, 5 parallel downloads are allowed.

pymatris --max-parallel 10 <urls>

Pymatris uses asyncio to download files in parallel. By default, 5 files are downloaded in parallel. You can increase or decrease the number of parallel downloads.

To configure number of parallel download parts per file, use --max-splits option. By default, 5 parts are downloaded in parallel for each file.

pymatris --max-splits 10 <urls>

This is only available for HTTP/HTTPS and SFTP protocols. Currently, FTP protocol does not support multipart downloads.

To configure number of retries for failed downloads, use --max-tries option. By default, 5 retries are allowed.

pymatris --max-tries 10 <urls>

To hide progress bar, use --quiet option. By default, progress bar is shown.

pymatris --quiet <urls>

Requirements

  • Python 3.9 or above
  • aiohttp
  • aioftp
  • asyncssh
  • aiofiles
  • tqdm

TODO

  • Add better concurrency support for FTP protocol.
  • Better error handling and logging for FTP and SFTP protocols.

Acknowledgements

Release files for pymatris 0.0.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pymatris 0.0.10
File Size Uploaded
pymatris-0.0.10.tar.gz 15.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pymatris 0.0.10
File Interpreter ABI Platform
pymatris-0.0.10-py3-none-any.whl Python 3 none any Details

Total release size: 35.0 kB

Release files / pymatris-0.0.10.tar.gz

Download URL pymatris-0.0.10.tar.gz
Size 15.7 kB
Tags Source
SHA-256 checksum
How to use checksums
e26a25aaa9f9c88237d8e44713dd499ccee7b85005ae6f9787f36efe068cea50
BLAKE2b-256 checksum
How to use checksums
d308fd833fb3780c35fa87c7b710b0e511802ae8c889421ad1f1643e97be5244
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.2 CPython/3.12.3 Linux/6.5.0-1018-azure

Release files / pymatris-0.0.10-py3-none-any.whl

Download URL pymatris-0.0.10-py3-none-any.whl
Size 19.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4fc6297ea43e35f47c0eaa958227b2cad16192bba4708a98e427116c464c11d7
BLAKE2b-256 checksum
How to use checksums
2793e8427012d7385538543116ec2e9f2bb2e83e8c837cc4d0ac924ec3d53448
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.2 CPython/3.12.3 Linux/6.5.0-1018-azure

Release history Release notifications | RSS feed

This release

0.0.10 This release

2 release files

0.0.8

2 release files

0.0.6

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page