Metadata-Version: 2.1
Name: pysmartdl2
Version: 2.0.0
Summary: Modernized fork of the Smart Download Manager for Python by iTaybb with CI testing matrix and other 2024 bells and whistles.
Author-email: Adam Krajewski <ak@psu.edu>, Itay Brandes <brandes.itay+pysmartdl@gmail.com>
Project-URL: homepage, https://github.com/amkrajewski/pysmartdl2
Project-URL: repository, https://github.com/amkrajewski/pysmartdl2
Project-URL: Bug Tracker, https://github.com/amkrajewski/pysmartdl2/issues
Project-URL: ForkedFrom, https://github.com/iTaybb/pySmartDL
Keywords: download,downloader,parallel download,concurrent download
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: Public Domain
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Provides-Extra: tests
Requires-Dist: pytest; extra == "tests"
Requires-Dist: pytest-cov; extra == "tests"
Requires-Dist: codecov; extra == "tests"

# pysmartdl2

This software is a fork of the `pySmartDL` or **Python Smart Download Manager** by iTaybb which appears to not be maintained anymore. I (1) went through its codebase to check if things work as expected in modern (Python 3.8-12+) versions of Python, (2) did some modernizing fixes here and there, (3) implemented test suites, and (4) restructured it to modern standards with `pyproject.toml`. 

Test suites go over all popular Python versions on all four platforms: Linux (Ubuntu), MacOS (Intel CPU), MacOS (M1 CPU), and Windows. Live status is shown below.

[![Multi-OS Multi-Python Build](https://github.com/amkrajewski/pysmartdl2/actions/workflows/test_Linux.yaml/badge.svg)](https://github.com/amkrajewski/pysmartdl2/actions/workflows/test_Linux.yaml)

[![Multi-OS Multi-Python Build](https://github.com/amkrajewski/pysmartdl2/actions/workflows/test_MacM1.yaml/badge.svg)](https://github.com/amkrajewski/pysmartdl2/actions/workflows/test_MacM1.yaml)

[![Multi-OS Multi-Python Build](https://github.com/amkrajewski/pysmartdl2/actions/workflows/test_MacIntel.yaml/badge.svg)](https://github.com/amkrajewski/pysmartdl2/actions/workflows/test_MacIntel.yaml)

[![Multi-OS Multi-Python Build](https://github.com/amkrajewski/pysmartdl2/actions/workflows/test_Windows.yaml/badge.svg)](https://github.com/amkrajewski/pysmartdl2/actions/workflows/test_Windows.yaml)

Per the original README, `pysmartdl` strives to be a full-fledged smart download manager for Python. Main features:

* Built-in download acceleration (with the [multipart downloading technique](http://stackoverflow.com/questions/93642/how-do-download-accelerators-work)).
* Mirrors support.
* Pause/Unpause feature.
* Speed limiting feature.
* Hash checking.
* Non-blocking, shows the progress bar, download speed and ETA.
* Full support for custom headers and methods.

 
## Installation

You can install `pysmartdl2` from PyPI through `pip`, with a simple:

```cmd
pip install pysmartdl2
```

Or you can install from the source in _editable_ mode, by cloning this repository and:

```cmd
pip install -e .
```
 
## Usage

Downloading with it is as simple as creating an instance and starting it:

```python
from pysmartdl2 import SmartDL

url = "https://raw.githubusercontent.com/amkrajewski/pysmartdl2/master/test/7za920.zip"
dest = "."  # <-- To download to current directory 
            # or '~/Downloads/' for Downloads directory on Linux
            # or "C:\\Downloads\\" for Downloads directory on Windows

obj = SmartDL(url, dest)
obj.start()
# [*] 0.23 Mb / 0.37 Mb @ 88.00Kb/s [##########--------] [60%, 2s left]

path = obj.get_dest()
```

Copyright (C) 2023-2024 Adam M. Krajewski

Copyright (C) 2014-2020 Itay Brandes.
