Metadata-Version: 2.1 Name: aioaria2 Version: 1.3.6 Summary: Support Aria2 rpc client and manage server with async/await Home-page: https://github.com/synodriver/aioaria2 Author: synodriver Author-email: diguohuangjiajinweijun@gmail.com Maintainer: v-vinson License: GPLv3 Project-URL: Bug Tracker, https://github.com/synodriver/aioaria2/issues Keywords: asyncio,Aria2 Classifier: Development Status :: 3 - Alpha Classifier: Framework :: AsyncIO Classifier: Operating System :: OS Independent Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) Classifier: Programming Language :: Python 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: Programming Language :: Python :: Implementation :: CPython Requires-Python: >=3.6 Description-Content-Type: text/markdown License-File: LICENSE Requires-Dist: aiohttp Requires-Dist: aiofiles Requires-Dist: typing-extensions # 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.Aria2WebsocketClient = await aioaria2.Aria2WebsocketClient.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``` ### v1.3.5rc1 * graceful shutdown ### v1.3.5rc2 * add parser for aria2 files ```python from pprint import pprint from aioaria2 import DHTFile pprint(DHTFile.from_file2("dht.dat")) ``` ### v1.3.5rc3 * add strong ref to pending tasks ### v1.3.6 * update latest aiohttp version