aioaria2


Nameaioaria2 JSON
Version 1.3.4 PyPI version JSON
download
home_pagehttps://github.com/synodriver/aioaria2
SummarySupport Aria2 rpc client and manage server with async/await
upload_time2021-12-03 15:07:29
maintainerv-vinson
docs_urlNone
authorsynodriver
requires_python>=3.6
licenseGPLv3
keywords asyncio aria2
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # aioaria2


[![pypi](https://img.shields.io/pypi/v/aioaria2.svg)](https://pypi.org/project/aioaria2/)
![python](https://img.shields.io/pypi/pyversions/aioaria2)
![implementation](https://img.shields.io/pypi/implementation/aioaria2)
![wheel](https://img.shields.io/pypi/wheel/aioaria2)
![license](https://img.shields.io/github/license/synodriver/aioaria2.svg)

## Support async rpc call with aria2 and process management

## Usage:

### example

```python
import asyncio
from pprint import pprint

import aioaria2


async def main():
    async with aioaria2.Aria2HttpClient("http://117.0.0.1:6800/jsonrpc",
                                        token="token") as client:
        pprint(await client.getVersion())


asyncio.run(main())
```

### The ip address should be replaced with your own

### See [aria2 manual](http://aria2.github.io/manual/en/html/) for more detail about client methods

```python
# exampe of http
import asyncio
from pprint import pprint

import aioaria2
import ujson


async def main():
    async with aioaria2.Aria2HttpClient("http://127.0.0.1:6800/jsonrpc",
                                        token="token",
                                        loads=ujson.loads,
                                        dumps=ujson.dumps) as client:
        pprint(await client.addUri(["http://www.demo.com"]))  # that would start downloading


asyncio.run(main())
```

```python
# exampe of websocket
import asyncio
from pprint import pprint

import aioaria2
import ujson


@aioaria2.run_sync
def on_download_complete(trigger, data):
    print(f"downlaod complete {data}")


async def main():
    client: aioaria2.Aria2WebsocketTrigger = await aioaria2.Aria2WebsocketTrigger.new("http://127.0.0.1:6800/jsonrpc",
                                                                                      token="token",
                                                                                      loads=ujson.loads,
                                                                                      dumps=ujson.dumps)
    client.onDownloadComplete(on_download_complete)
    pprint(await client.addUri(["http://www.demo.com"]))


loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()
```

- Run that coroutine function and each method represent an aria2-rpc call. As for server, each instance represent an aria2 process.

```python
import aioaria2
import asyncio


async def main():
    server = aioaria2.AsyncAria2Server(r"aria2c.exe",
                                       r"--conf-path=aria2.conf", "--rpc-secret=admin", daemon=True)
    await server.start()
    await server.wait()


asyncio.run(main())
```

#### this start an aria2 process

[Aria2 Manual](http://aria2.github.io/manual/en/html/)

### todolist

- [x] async http
- [x] async websocket
- [x] async process management
- [x] unitest

This module is built on top of [aria2jsonrpc](https://xyne.archlinux.ca/projects/python3-aria2jsonrpc)
with async and websocket support.

### For windows users, you should

```
# for start async aria2 process
asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
asyncio.set_event_loop(asyncio.ProactorEventLoop())
```

For python version greater than 3.8, asyncio uses ProactorEventLoop by default, so there is no need to modify

#### v1.2.0

new Aria2WebsocketTrigger class for websocket events, use on* methods to add callbacks

Like

```
@trigger.onDownloadStart
async def onDownloadStart(trigger, future):
    print("下载开始{0}".format(future.result()))
```

#### v1.2.3

Now you can add multiple callbacks for one event ,must be coroutine function or an async callable, use ```aioaria2.run_sync``` to wrap a sync function

```
@trigger.onDownloadStart
async def callback1(trigger, future):
    print("第一个回调{0}".format(future.result()))

@trigger.onDownloadStart
@run_sync
def callback2(trigger, future):
    print("第二个回调{0}".format(future.result()))
```

#### v1.3.0

* Big changes for class```Aria2WebsocketTrigger```

* Callbacks now accept```dict```as second parameter instead of```asyncio.Future```
* methods of class```Aria2WebsocketTrigger``` now have same return value as ```Aria2HttpClient```
* ```id``` parameter now accept a callable as idfactory to generate uuid, otherwise default uuid factory is used.


```
@trigger.onDownloadStart
async def callback1(trigger, data:dict):
    print("第一个回调{0}".format(data))

@trigger.onDownloadStart
@run_sync
def callback2(trigger, data:dict):
    print("第二个回调{0}".format(data))
```

### v1.3.1

* custom json library with keyword arguments ```loads``` ```dumps```

### v1.3.2

* fix  unclosed client_session when exception occurs during ws_connect
* alias for ```Aria2WebsocketTrigger```,named ```Aria2WebsocketClient```

### v1.3.3

* fix method problems in client

### v1.3.4rc1

* handle reconnect simply
* handle InvalidstateError while trying to ping aria2

### v1.3.4

* add async id factory support
* allow unregister callbacks in websocketclient
* add contextvars support in ```run_sync```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/synodriver/aioaria2",
    "name": "aioaria2",
    "maintainer": "v-vinson",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "asyncio,Aria2",
    "author": "synodriver",
    "author_email": "diguohuangjiajinweijun@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/37/7b/4c1fb78d55d9ea7ec14e862d85d9d7edd905c3a3f09e25d27bce0e4a434e/aioaria2-1.3.4.tar.gz",
    "platform": "",
    "description": "# aioaria2\n\n\n[![pypi](https://img.shields.io/pypi/v/aioaria2.svg)](https://pypi.org/project/aioaria2/)\n![python](https://img.shields.io/pypi/pyversions/aioaria2)\n![implementation](https://img.shields.io/pypi/implementation/aioaria2)\n![wheel](https://img.shields.io/pypi/wheel/aioaria2)\n![license](https://img.shields.io/github/license/synodriver/aioaria2.svg)\n\n## Support async rpc call with aria2 and process management\n\n## Usage:\n\n### example\n\n```python\nimport asyncio\nfrom pprint import pprint\n\nimport aioaria2\n\n\nasync def main():\n    async with aioaria2.Aria2HttpClient(\"http://117.0.0.1:6800/jsonrpc\",\n                                        token=\"token\") as client:\n        pprint(await client.getVersion())\n\n\nasyncio.run(main())\n```\n\n### The ip address should be replaced with your own\n\n### See [aria2 manual](http://aria2.github.io/manual/en/html/) for more detail about client methods\n\n```python\n# exampe of http\nimport asyncio\nfrom pprint import pprint\n\nimport aioaria2\nimport ujson\n\n\nasync def main():\n    async with aioaria2.Aria2HttpClient(\"http://127.0.0.1:6800/jsonrpc\",\n                                        token=\"token\",\n                                        loads=ujson.loads,\n                                        dumps=ujson.dumps) as client:\n        pprint(await client.addUri([\"http://www.demo.com\"]))  # that would start downloading\n\n\nasyncio.run(main())\n```\n\n```python\n# exampe of websocket\nimport asyncio\nfrom pprint import pprint\n\nimport aioaria2\nimport ujson\n\n\n@aioaria2.run_sync\ndef on_download_complete(trigger, data):\n    print(f\"downlaod complete {data}\")\n\n\nasync def main():\n    client: aioaria2.Aria2WebsocketTrigger = await aioaria2.Aria2WebsocketTrigger.new(\"http://127.0.0.1:6800/jsonrpc\",\n                                                                                      token=\"token\",\n                                                                                      loads=ujson.loads,\n                                                                                      dumps=ujson.dumps)\n    client.onDownloadComplete(on_download_complete)\n    pprint(await client.addUri([\"http://www.demo.com\"]))\n\n\nloop = asyncio.get_event_loop()\nloop.create_task(main())\nloop.run_forever()\n```\n\n- Run that coroutine function and each method represent an aria2-rpc call. As for server, each instance represent an aria2 process.\n\n```python\nimport aioaria2\nimport asyncio\n\n\nasync def main():\n    server = aioaria2.AsyncAria2Server(r\"aria2c.exe\",\n                                       r\"--conf-path=aria2.conf\", \"--rpc-secret=admin\", daemon=True)\n    await server.start()\n    await server.wait()\n\n\nasyncio.run(main())\n```\n\n#### this start an aria2 process\n\n[Aria2 Manual](http://aria2.github.io/manual/en/html/)\n\n### todolist\n\n- [x] async http\n- [x] async websocket\n- [x] async process management\n- [x] unitest\n\nThis module is built on top of [aria2jsonrpc](https://xyne.archlinux.ca/projects/python3-aria2jsonrpc)\nwith async and websocket support.\n\n### For windows users, you should\n\n```\n# for start async aria2 process\nasyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())\nasyncio.set_event_loop(asyncio.ProactorEventLoop())\n```\n\nFor python version greater than 3.8, asyncio uses ProactorEventLoop by default, so there is no need to modify\n\n#### v1.2.0\n\nnew Aria2WebsocketTrigger class for websocket events, use on* methods to add callbacks\n\nLike\n\n```\n@trigger.onDownloadStart\nasync def onDownloadStart(trigger, future):\n    print(\"\u4e0b\u8f7d\u5f00\u59cb{0}\".format(future.result()))\n```\n\n#### v1.2.3\n\nNow you can add multiple callbacks for one event ,must be coroutine function or an async callable, use ```aioaria2.run_sync``` to wrap a sync function\n\n```\n@trigger.onDownloadStart\nasync def callback1(trigger, future):\n    print(\"\u7b2c\u4e00\u4e2a\u56de\u8c03{0}\".format(future.result()))\n\n@trigger.onDownloadStart\n@run_sync\ndef callback2(trigger, future):\n    print(\"\u7b2c\u4e8c\u4e2a\u56de\u8c03{0}\".format(future.result()))\n```\n\n#### v1.3.0\n\n* Big changes for class```Aria2WebsocketTrigger```\n\n* Callbacks now accept```dict```as second parameter instead of```asyncio.Future```\n* methods of class```Aria2WebsocketTrigger``` now have same return value as ```Aria2HttpClient```\n* ```id``` parameter now accept a callable as idfactory to generate uuid, otherwise default uuid factory is used.\n\n\n```\n@trigger.onDownloadStart\nasync def callback1(trigger, data:dict):\n    print(\"\u7b2c\u4e00\u4e2a\u56de\u8c03{0}\".format(data))\n\n@trigger.onDownloadStart\n@run_sync\ndef callback2(trigger, data:dict):\n    print(\"\u7b2c\u4e8c\u4e2a\u56de\u8c03{0}\".format(data))\n```\n\n### v1.3.1\n\n* custom json library with keyword arguments ```loads``` ```dumps```\n\n### v1.3.2\n\n* fix  unclosed client_session when exception occurs during ws_connect\n* alias for ```Aria2WebsocketTrigger```,named ```Aria2WebsocketClient```\n\n### v1.3.3\n\n* fix method problems in client\n\n### v1.3.4rc1\n\n* handle reconnect simply\n* handle InvalidstateError while trying to ping aria2\n\n### v1.3.4\n\n* add async id factory support\n* allow unregister callbacks in websocketclient\n* add contextvars support in ```run_sync```\n\n",
    "bugtrack_url": null,
    "license": "GPLv3",
    "summary": "Support Aria2 rpc client and manage server with async/await",
    "version": "1.3.4",
    "split_keywords": [
        "asyncio",
        "aria2"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4dd2c17d19a54b10f9f683fc4e19f28844d453615ea2c31eb22b96e3e9db5582",
                "md5": "a72ac9d8024e4593bf92b71895246c05",
                "sha256": "f9040cc2bf04dbff40ebc375681deaa6e2d4d5d0f9a537155e0c6e6c632e07c8"
            },
            "downloads": -1,
            "filename": "aioaria2-1.3.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a72ac9d8024e4593bf92b71895246c05",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 31463,
            "upload_time": "2021-12-03T15:07:28",
            "upload_time_iso_8601": "2021-12-03T15:07:28.265313Z",
            "url": "https://files.pythonhosted.org/packages/4d/d2/c17d19a54b10f9f683fc4e19f28844d453615ea2c31eb22b96e3e9db5582/aioaria2-1.3.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "377b4c1fb78d55d9ea7ec14e862d85d9d7edd905c3a3f09e25d27bce0e4a434e",
                "md5": "06c2430a209a0f6507f07c74c70d6f1b",
                "sha256": "8250a5e1d22e00e4f030a14d4ba274b3d98f8340299ed26abd2c5751afe1201d"
            },
            "downloads": -1,
            "filename": "aioaria2-1.3.4.tar.gz",
            "has_sig": false,
            "md5_digest": "06c2430a209a0f6507f07c74c70d6f1b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 32046,
            "upload_time": "2021-12-03T15:07:29",
            "upload_time_iso_8601": "2021-12-03T15:07:29.727329Z",
            "url": "https://files.pythonhosted.org/packages/37/7b/4c1fb78d55d9ea7ec14e862d85d9d7edd905c3a3f09e25d27bce0e4a434e/aioaria2-1.3.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2021-12-03 15:07:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "synodriver",
    "github_project": "aioaria2",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "aioaria2"
}
        
Elapsed time: 0.04924s