downly


Namedownly JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
SummaryYet another download manager in python.
upload_time2025-04-29 15:41:57
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords download url fast download manager
VCS
bugtrack_url
requirements aiohttp aiofiles tqdm
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Downly - Python Download Manager

*A fast and efficient Python download manager.*

(For downloading torrents visit [torrentix](https://github.com/Amir-Hossein-ID/torrentix))

## 🚀 Features
- **Synchronous downloads** for faster performance
- **Resume support** for interrupted downloads (even if the process is killed!)
- **Progress tracking** with a clean CLI output

## 📦 Installation
```sh
pip install downly
```

## 💻 Command Line Usage

```sh
downly https://example.com/file.zip [options]
```

## 🐍 Direct Usage

```python
import asyncio
from downly import Downloader

async def main():
    d = Downloader("https://example.com/file.zip")
    await d.start()

if __name__ =='__main__':
    asyncio.run(main())
```

### Non-Blocking Downloads
```python
async def main():
    d = Downloader("https://example.com/file.zip")
    download = await d.start(block=False)

    await asyncio.sleep(3) # do other stuff while downloading

    await download # wait for download to finish
```

### Pause and resume Downloads
```python
async def main():
    d = Downloader("https://example.com/file.zip")
    await d.start(block=False)
    await d.pause()

    # do other stuff

    await d.start() # resume download
```

### Automatically Saves download state
- Start download: `await d.start()`
- Something Happens and the process terminates:
```sh
  7%|██                           | 21.2M/296M [00:12<02:36, 1.75MB/s]
Ctrl^C (Keyboard Interrupt)
```
- Start Download Again: `await d.start()`
- Download starts from where it was stopped:
```sh
  7%|██                           | 21.2M/296M [00:12<02:36, 1.75MB/s]
```

## 🛠 Configuration
You can customize Downly’s settings by passing options:
```python
async def main():
    d = Downloader(
        "https://example.com/file.zip",
        path='myfolder/myfilename.zip',
        chunk_size=1024*1024*2, # 2MB
        n_connections=16) # 16 synchronous connections 
    await d.start()
```


## 🔥 Roadmap
- [ ] Proxies Support
- [ ] More control over User agents, number of retries, ...

## 📜 License
MIT License. See [LICENSE](LICENSE) for details.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "downly",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "download, url, fast, download manager",
    "author": null,
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/41/66/a4142a2b6c27d101808ff3b4b4a872bfa7b729f9aae8a3ebf3a0e6994e08/downly-0.2.0.tar.gz",
    "platform": null,
    "description": "# Downly - Python Download Manager\n\n*A fast and efficient Python download manager.*\n\n(For downloading torrents visit [torrentix](https://github.com/Amir-Hossein-ID/torrentix))\n\n## \ud83d\ude80 Features\n- **Synchronous downloads** for faster performance\n- **Resume support** for interrupted downloads (even if the process is killed!)\n- **Progress tracking** with a clean CLI output\n\n## \ud83d\udce6 Installation\n```sh\npip install downly\n```\n\n## \ud83d\udcbb Command Line Usage\n\n```sh\ndownly https://example.com/file.zip [options]\n```\n\n## \ud83d\udc0d Direct Usage\n\n```python\nimport asyncio\nfrom downly import Downloader\n\nasync def main():\n    d = Downloader(\"https://example.com/file.zip\")\n    await d.start()\n\nif __name__ =='__main__':\n    asyncio.run(main())\n```\n\n### Non-Blocking Downloads\n```python\nasync def main():\n    d = Downloader(\"https://example.com/file.zip\")\n    download = await d.start(block=False)\n\n    await asyncio.sleep(3) # do other stuff while downloading\n\n    await download # wait for download to finish\n```\n\n### Pause and resume Downloads\n```python\nasync def main():\n    d = Downloader(\"https://example.com/file.zip\")\n    await d.start(block=False)\n    await d.pause()\n\n    # do other stuff\n\n    await d.start() # resume download\n```\n\n### Automatically Saves download state\n- Start download: `await d.start()`\n- Something Happens and the process terminates:\n```sh\n  7%|\u2588\u2588                           | 21.2M/296M [00:12<02:36, 1.75MB/s]\nCtrl^C (Keyboard Interrupt)\n```\n- Start Download Again: `await d.start()`\n- Download starts from where it was stopped:\n```sh\n  7%|\u2588\u2588                           | 21.2M/296M [00:12<02:36, 1.75MB/s]\n```\n\n## \ud83d\udee0 Configuration\nYou can customize Downly\u2019s settings by passing options:\n```python\nasync def main():\n    d = Downloader(\n        \"https://example.com/file.zip\",\n        path='myfolder/myfilename.zip',\n        chunk_size=1024*1024*2, # 2MB\n        n_connections=16) # 16 synchronous connections \n    await d.start()\n```\n\n\n## \ud83d\udd25 Roadmap\n- [ ] Proxies Support\n- [ ] More control over User agents, number of retries, ...\n\n## \ud83d\udcdc License\nMIT License. See [LICENSE](LICENSE) for details.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Yet another download manager in python.",
    "version": "0.2.0",
    "project_urls": {
        "Homepage": "https://github.com/Amir-Hossein-ID/Downly"
    },
    "split_keywords": [
        "download",
        " url",
        " fast",
        " download manager"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e47bc6a225cc49bfc42d7743e91a9f885f4fae643d5b39a29f957b1f1cfdef87",
                "md5": "42fa270d03318325a998056ddfc168a0",
                "sha256": "0e5700166ed18b22bdaf50d527890c43b41bd04cbfe9d5da0e4dc6bf51e3bfa9"
            },
            "downloads": -1,
            "filename": "downly-0.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "42fa270d03318325a998056ddfc168a0",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 6251,
            "upload_time": "2025-04-29T15:41:55",
            "upload_time_iso_8601": "2025-04-29T15:41:55.645832Z",
            "url": "https://files.pythonhosted.org/packages/e4/7b/c6a225cc49bfc42d7743e91a9f885f4fae643d5b39a29f957b1f1cfdef87/downly-0.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4166a4142a2b6c27d101808ff3b4b4a872bfa7b729f9aae8a3ebf3a0e6994e08",
                "md5": "c728cf4dadaee583f75d8456a08e49ce",
                "sha256": "b1e0693e345acabd20e84b7b933d859184bbd4232cfd7f51f87c143fc89bb14f"
            },
            "downloads": -1,
            "filename": "downly-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "c728cf4dadaee583f75d8456a08e49ce",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 5894,
            "upload_time": "2025-04-29T15:41:57",
            "upload_time_iso_8601": "2025-04-29T15:41:57.491318Z",
            "url": "https://files.pythonhosted.org/packages/41/66/a4142a2b6c27d101808ff3b4b4a872bfa7b729f9aae8a3ebf3a0e6994e08/downly-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-04-29 15:41:57",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Amir-Hossein-ID",
    "github_project": "Downly",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "aiohttp",
            "specs": []
        },
        {
            "name": "aiofiles",
            "specs": []
        },
        {
            "name": "tqdm",
            "specs": []
        }
    ],
    "lcname": "downly"
}
        
Elapsed time: 0.55271s